找回密碼
 立即注册

CSUpdate.exe源代码

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

: X! c- H+ ]  u( I% ?, ~' T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! E& F* k" V) w: s/ Q5 X! |
  2. //5 R5 F( j& [& ^% x* W8 J

  3. / G7 e4 p# g5 E  D  N
  4. #include "stdafx.h"8 ~/ O  r7 U7 S5 v7 U9 _

  5. ) c$ @% Z3 h4 P
  6. //#define UNICODE
    ) a# C2 @* E. m. r0 `
  7. //#include <gdiplus.h>
    , }8 {! K, N: U' }4 f$ I( F
  8. //using namespace Gdiplus;+ `$ W- P5 r* ]; }. m# _: z
  9. + X! P+ z) F: ^- \; Z
  10. #include "RevApp.h"
    3 K4 x& A$ {) O/ v$ S
  11. #include "RevAppDlg.h"
    " z- J" U$ h2 Z, u2 h

  12. % u/ b0 S0 @2 N; I/ ]7 ^7 }
  13. #pragma warning(disable:4786); _8 j: ^" C  t) `
  14. #include <map>
    , b. w( w* W. Z
  15. #include <list>/ q' w; F5 I. _3 ]0 F: z1 T4 R3 O. n
  16. #include <direct.h>  v7 x8 U' X  n! Z, k4 O

  17. ( K' H9 _/ X1 s: l% h/ c
  18. #ifdef _DEBUG
    " ]4 Q+ y8 k: ]6 z) ^4 H+ H
  19. #define new DEBUG_NEW# f7 @6 o. m. d+ b
  20. #undef THIS_FILE
    # ?$ p" d  {3 m: L
  21. static char THIS_FILE[] = __FILE__;
    ! X7 w; G2 g: T9 p
  22. #endif
      V1 X2 ~8 k9 G1 v
  23. #include "SkinResDef.h"9 s8 v' N+ }. B  n% \: P
  24. #include "ChangeBG.h"2 N/ k5 `2 S7 f1 K3 x
  25. #include "AFXINET.H") @  B6 A! z6 F  O" h; d
  26. ! k! [+ g' [( \- s, t0 j4 n& ]
  27. #define TRADITIONAL_CHINESE 0( e) h7 |7 i/ Q
  28. #define SIMPLIFY_CHINESE 1
    ; ?' e% k7 g' z5 Z/ l
  29. #define ENGLISH 2
    1 v; ~- }% t9 q; ~. P5 d4 i
  30. int m_iLanguage = ENGLISH;
    . d! p& g# o! F9 P% T
  31. /////////////////////////////////////////////////////////////////////////////5 N3 L4 a3 M( m# Q; g& |
  32. // CRevAppApp
    ( q2 P2 M- V1 g5 M4 {
  33. ) e* f: j" n" v7 r' {$ D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    $ {/ k: F, b& P
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " f* C7 T& E$ F* _% r# }) p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; P( C) J" M" U- l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& k/ U1 c. p, w% E
  38.         //}}AFX_MSG
    6 R# Z" K$ z+ C) x. W
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" R% r! l- g: |( y' N
  40. END_MESSAGE_MAP()" P# w# C) r, ?  h% {

  41. ; q4 ^* ^) z4 e' q2 o4 V! [$ @
  42. /////////////////////////////////////////////////////////////////////////////
    # ~, @  Q: q5 U6 p) ~: s4 ?
  43. // CRevAppApp construction
    ) C; M3 n  S3 [( l& w: p
  44. ; g& G! ?1 H' N5 @+ e$ c, u
  45. CRevAppApp::CRevAppApp()0 v% _0 H4 t- p
  46. {
    9 W" H- g5 v. U: g$ x% k
  47.         // TODO: add construction code here,
    ! ]" Y4 l6 F! L2 d
  48.         // Place all significant initialization in InitInstance
    " @5 y7 [0 y# j* S
  49.   bDisplayIsBig5=FALSE;  s# i% B, N$ l/ d1 s6 Z( z
  50.   bRestartUpdater=FALSE;
    1 o8 l6 i3 d; }) v% W. q6 o9 j
  51.   bFinishUpdated=FALSE;  a7 Y) ~/ a  c$ V5 L. n1 t
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 Y4 O1 e2 w6 ?$ s! x
  53.   InitChangeDataBig52GBKS();
    : c% s) x* I* U7 Q
  54.   InitChangeDataGBKS2Big5();
    . Y# l: h! p4 ?4 O. a# x. n
  55.         //
    8 k0 M! N0 l7 q5 o3 z6 s) q
  56.         bClickRunExe = FALSE;) x0 N$ \6 j7 M* @
  57.         //
    5 K  C8 \5 s, F- q! k4 [
  58. }
    . p& d' \8 O' c9 U3 c$ n& |# H
  59.   r: z7 U' }) C7 i# V
  60. CRevAppApp::~CRevAppApp()
    # S1 L! y$ [3 }( D
  61. {
    * o/ l/ o' N$ h! ?8 C
  62.         // TODO: add construction code here,2 \9 ?" |# X, T3 Z" v+ g# D
  63.         // Place all significant initialization in InitInstance
    % }$ v2 h; U+ H/ n+ K; ?' ], ?* i
  64.   EndChangeData();/ H& U/ S. i3 o" }
  65. }/ z2 ]* H; F+ @' m, e7 @8 ~" w9 ?9 S

  66. : E' @, [. c' E' a( ~
  67. /////////////////////////////////////////////////////////////////////////////) Z: s$ B* o  t9 W/ G* t% a
  68. // The one and only CRevAppApp object( b6 I# A5 B! j( q* }

  69. ( R, ?2 b3 Z, |' F
  70. CRevAppApp theApp;1 l4 i  x0 U6 T# m! I3 V
  71. : Y2 i& z4 r2 D- S
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( A* ~+ c9 Y9 |* ]5 {- J
  73. {2 M1 h2 w3 E' |: R* ?
  74.   int iEOF=0;
    3 ^- G  S9 X" b6 F  j. c
  75.   char szTempName[MAX_PATH];
      O1 P% P; U. @  R7 W  @
  76.   *szFileName=0;
    & l" z3 J' T9 r$ f
  77.   iEOF=fscanf(fp,"%s",szTempName);: q$ W8 r! H9 R1 R$ ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), C8 L) x- ?! w1 q. a- O
  79.   {
    + k& x+ \' B8 C  b, }  f! k
  80.     strcpy(szFileName,&szTempName[1]);
    6 `1 Z) w4 N5 M8 E( Q) @' i
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)( v1 Q4 Q. D) P3 g
  82.     {
    6 k( F; o6 v8 v# ~7 t0 Q9 y
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # u2 P% m& O+ e! ^- z0 S8 u/ q9 y/ `
  84.       strcat(szFileName," ");
    1 a% U! V' F* T! g
  85.       strcat(szFileName,szTempName);# [: `, d0 X0 i- l4 o
  86.     }; X: z$ u! i# H  [1 N+ ]
  87.     if(strlen(szFileName)>=1)0 R4 y; ]0 [( n/ d% t5 X
  88.     {
    , q4 U8 Q3 R! l! K- v
  89.       szFileName[strlen(szFileName)-1]=0;& }1 _, S2 {2 p3 M7 X' X! q
  90.     }; R5 E) T9 u: s- f6 s  H
  91.   }+ O% o0 g8 u; k& ]
  92.   return szFileName;: C: {) c% O8 ~* ]
  93. }
    + K0 c0 }# }2 u; c& w5 d
  94. # F9 \# m: |6 o# V& r) z; t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)0 C" y: y+ O% G0 I( F8 d- }
  96. {
    ' G( }6 n3 D2 M9 w; F
  97.   FILE *fp;
    6 ?0 H3 C$ i- |
  98.   char *key=NULL;
    5 T% x% \% H5 u
  99.   char version[MAX_PATH];
    ( z+ ^$ B6 u( d" j, G+ L6 [! s
  100.   LPUPDATEFILE file,olds;
    2 q, W6 j3 m; y6 ]0 R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 u8 I) q- B* c, S2 a5 H! m7 G3 T

  102. # h: }( g0 R* L' N- u$ h
  103.   UpdateList.clear();1 _# Y+ N6 e) u1 o
  104.   UpdateFile.clear();
    0 a" A2 r3 ]; l: |7 f% D1 q: P
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; l6 ]* U4 F; U- S2 `" N& h
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + E. v( P6 W" A; U4 x( I1 ~$ Z
  107.   fscanf(fp,"%s",version);
    0 c. J, Z& U4 c1 P5 ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( d( g6 w% t$ E/ H" @$ z5 L
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & Z5 }& o7 l* K6 _+ j
  110.   {
    ; X8 r$ Z: Y" q4 d8 B- F& F% ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , k3 D  C& Z& i2 E" H" ~
  112.     fscanf(fp,"%s",file->path);
    + A  p# M5 R! c& v, P
  113.     ReadFileNames(fp,file->file);
    ) `5 C1 G$ X0 l, w. ^% a
  114.     strcpy(file->full,".");
    3 x, x3 \+ m" r+ Y5 F: l
  115.     strcat(file->full,file->path);8 K9 j7 u; C+ f' `
  116.     strcat(file->full,file->file);9 Z1 M6 o: P) y+ [+ c; u+ h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 f3 d* |! c. u% Q7 ^
  118.     {
    4 @3 A- n( ]' T' N& T& f
  119.       file->vers=(float)atof(version);
    " U( g6 b# F. [0 k
  120.       UpdateList.push_back(file->full);% E& a' Y! y  H  v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( K2 x7 Z2 K0 Z, a
  122.     }! u5 P( J; F5 W9 W
  123.     else
    / w+ N+ N* `* I+ C/ F1 r# u
  124.     {3 U: J0 ^4 m0 g5 E' P7 ^
  125.       olds=(*p).second;
    : G; G, \* Q2 Q
  126.       if(olds->vers<(float)atof(version))7 D: U6 }0 B. w; b; j8 `# @0 \9 M
  127.       {
    ; p3 f( d/ l# ~; S
  128.         olds->vers=(float)atof(version);
    5 p# B' W1 p( ?0 W& y2 I2 B- O
  129.       }
    , ^6 ^( |! E5 w: o
  130.       free(file);
    8 T8 X/ _. K  n5 f8 V
  131.     }& A% b1 }$ i+ t* n# n( T! ~) b
  132.   }" O. |& ^& V2 B' u1 p/ H
  133.   fclose(fp);' O  ]! l; B6 V9 v5 }4 c, _
  134.   return true;# n7 [# D! [& N  l0 _7 K
  135. }
    + W. ^3 P& X+ v2 X- d, x
  136. ! c3 X( k' I8 m' n; G( _, y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - b& B9 A) o. B9 o! \
  138. {$ S& N  z( W4 A, ^
  139.   TCHAR  szFull[MAX_PATH];  r0 F- S; i9 f8 ?7 ~
  140.   TCHAR *token,*inter;
    # f3 C: {# p3 e/ w4 L; ^
  141.   *szPath=0;& \' }6 L9 Y! J* b4 U
  142.   strcpy(szFull,szFullPath);' q- t+ f: c1 Y: Q9 Z
  143.   token=strtok(szFull,"\\/");
    4 y# ]3 h5 k' z% L* e" E; H9 I7 L# k
  144.   inter=token;
    7 m4 c/ w7 a2 i& A' o
  145.   while(token=strtok(NULL,"\\/"))  L+ x: n. |0 p- c8 o1 K$ x7 B
  146.   {# ]3 O' V! G) @: U, |9 G- g0 P
  147.     strcat(szPath,inter);. K) {. j/ ?$ K- v3 n$ l. V0 [
  148.     strcat(szPath,"\");  M  e5 M- O/ D# r; Z+ t
  149.     inter=token;
      U" p0 Z/ A5 \7 _1 W
  150.   }
    " v  {& h4 t  v/ w0 a
  151.   return strlen(szPath);
    0 s8 Z% l" D1 T7 E! ~0 j! J
  152. }! p, k2 a0 M5 o: `2 J! j  |' |
  153. ' c( `( X) N8 g+ @) i
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    5 j& u) K- |% l# D% o- X
  155. {% n# T' r/ q! z  k, O3 h9 y, Z
  156.   DWORD attrib=GetFileAttributes(Target);
    / e' g- f- W7 R0 r$ g# b' X
  157.   if(attrib!=-1)
    ( Y) A" |  ^7 h9 W# D2 w
  158.   {( S+ I! n7 a6 Y" P. i, r3 a6 I% o
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ t2 `2 @$ E: O6 S8 X1 g5 D$ C) E
  160.     {
    9 x* t+ V& N% e& M
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 U1 c: ]6 l8 D3 a- b0 y! j4 e4 v; @
  162.       SetFileAttributes(Target,attrib);
    0 l& U- R& l( h& {: s* C# T0 I& O9 d2 p
  163.     }
    1 o' j$ @4 q$ x) B0 B
  164.   }% X: m+ I3 R7 B; ]/ p$ T
  165.   CopyFile(Source,Target,Erase);
    2 ~! X/ Y; g0 E2 I! f1 H) b4 D
  166. }2 U) B$ i. {( b* o" I( ?- ]
  167. 4 ^$ b9 ^$ l# `+ ]( ^" J, L" U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . f$ x' u' Z& Q
  169. {4 O* d9 d& L4 s( D% N
  170.      FILE *fp;$ e3 ]+ l5 D  z$ w4 L
  171.      char  szBuffer[8192];
    5 h/ j" R! _/ b9 z3 T* w
  172.   va_list  argptr;
    % X8 i9 l3 _7 I/ C7 _. r3 H
  173. 7 D; s0 g( `- b5 ^3 C2 t' X( b0 u" l
  174.         va_start(argptr,message);
    + \3 P2 z- S4 y7 O3 A/ B
  175.         vsprintf(szBuffer,message,argptr);
    ' A7 j* q. I* S5 c
  176.         va_end(argptr);
    7 B3 p) b8 p6 r
  177.   fp=fopen(FileName,"a");
    $ B! y( Z  V3 w
  178.   if(fp)1 `+ p, T, D* z' j+ p
  179.   {
    7 s4 q. _6 K, j: s* `
  180.     fprintf(fp,szBuffer);; }2 Q. W3 ~  z, G) a
  181.     fclose(fp);7 @% X& s2 S7 Z# P/ i  o) K
  182.           _flushall();
    6 S* b5 w- E1 m; y7 K
  183.   }6 a6 I: i6 _' G0 x9 v/ ^- T
  184. }4 u6 y0 O3 \& X: S
  185. - w: P# `+ z- A* R8 H! B
  186. BOOL CRevAppApp::Fclearf(char *FileName)" D/ h; H2 R/ s5 W4 H- J
  187. {
    ) C- @5 J3 ^( K5 p, ]  W" b
  188.      FILE *fp;% ^0 w8 y; t1 a3 \
  189.     DWORD  attrib;! p/ r/ Z2 W& W  a
  190.   attrib=GetFileAttributes(FileName);
    8 h7 b1 G9 J0 I/ _0 f9 }3 M
  191.   if(attrib!=-1)( g8 n1 P% `9 n4 g# O/ r
  192.   {9 _* a! I; o7 s; ~, g4 v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 `2 ]; }1 [3 L0 S7 I7 u
  194.     if(!SetFileAttributes(FileName,attrib))
    4 ^% [6 {) g3 x
  195.     {
    & b3 J" u1 c/ N
  196.       return FALSE;
    ' m9 Q3 Z( w2 T6 g/ F4 b
  197.     }
    . K. b! r+ i6 e  }: r. f
  198.   }
    & k' k8 p: |6 C' E; J$ J
  199.   fp=fopen(FileName,"wb");
    ' l) |7 B6 `) A
  200.   if(fp)
    6 O0 c$ x4 A5 i) |
  201.   {
    " |8 x  a: `- c1 v1 u1 v  p
  202.     fclose(fp);7 V: I: h, n- M! g
  203.   }
    3 r  r! ]1 L3 F4 a( Q
  204.   return TRUE;. B' ?8 f- U8 F/ e% q
  205. }* [9 E* n% n7 E+ C7 W

  206. ) i' T  o1 E: V( o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 H" s5 Z1 a! b: ^3 Z- \2 f  N4 E% ^! ?
  208. {+ d7 p. S8 X, C/ o- Y8 Y5 i$ s
  209.   char filename[MAX_PATH];
    7 M! o5 D4 I- Y9 V; r
  210.   LPUPDATEFILE file,olds;
    : u! P, L% e" @( y, A& u' j+ l: T. x; _
  211.   std::map<int,CString>::iterator i;
    ( S7 m5 \/ `) v$ ]6 }; m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' j( I/ v+ F* b( J
  213.   std::list<CString>::iterator l;! L- K6 i: A: V# K

  214. + s) D8 {* s& e8 H3 G
  215.   if(bFirstUpdate)
    8 d, d/ n! O; h; h  k! S6 J* `
  216.   {
    3 J1 L$ s8 i2 X1 w/ X; f0 _& ~% R
  217.     dwCurrFile=0;* L8 u" t9 b7 }  W* p7 e
  218.     bFirstUpdate=FALSE;
      c* N+ T* t# ~* t, |7 G3 A
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & r6 E5 N( ~& Y: G
  220.     {6 E. {- b/ ^9 I' [8 m0 e& f
  221.       dwTotalFiles=UpdateLocal.size();. d% f9 w" e& R3 w
  222.       dwDownLoaded=0;$ A0 S0 _# v0 k& y' p2 H
  223.       bSilentStep=FALSE;1 o6 z$ s$ ^1 X( m
  224.       bCompressed=TRUE;
    + b; A5 V# V% d( B
  225.       strExtLocal.Empty();$ b% `2 o' E' k2 V! h
  226.       strFullName=(*i).second;
    " {1 K/ [5 u" r( |7 o; c  a1 R
  227.       dwProgramState=AP_CONNECT;
    7 L5 F  ~$ {$ z! ~
  228.       return TRUE;/ a% x& @) Q$ R7 O% h* I5 o+ A4 j
  229.     }
    3 z; K4 f0 i$ @
  230.   }/ |; g; [/ C7 y1 S- ]1 V7 q
  231.   else if(bRestartUpdater==FALSE)0 i0 k- N: Y( j8 U) a" }4 ~
  232.   {
    : u- |7 X2 R: G/ k4 [4 O/ W- D' p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): D+ A5 W4 Q/ y9 |
  234.     {" a- r; J0 Y! ~# [) I5 {
  235.       file=(*p).second;
    % B. v' t3 C* \$ T% R: ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) D& Q. i: K4 b) Q" X0 x6 H3 l
  237.       {  v& Y3 t0 o, E' o  M5 Y
  238.         olds=(*p).second;
    ' c, @4 T8 o0 R2 g9 T
  239.         olds->vers=file->vers;
    % S/ a! z* C% r" O0 \: P
  240.       }
    5 T9 w5 c% W0 ~1 K+ w* F- ^
  241.       else. @+ W3 c- ]( E2 @3 z
  242.       {' ]  T. p; R1 X& F  Z+ z/ U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 N+ ?% ]9 D. R$ c/ Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      M- W6 K' G5 S% _8 Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " O7 `8 L9 e& B
  246.       }
    4 F9 {; B" r& B& `: s& e/ \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' b. E/ B1 r# k# m  Y
  248.       sprintf(filename,"(%s)",file->file);
    / E/ x! g5 k. W& t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 X5 s2 J' w+ q* A& J7 \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ D) R) ^" Z# t$ l- V
  251.     }, w8 {! r0 w' [2 T
  252.     dwCurrFile++;# V  N% o7 m, O5 g" n- V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 {; _; f2 n2 n# m* Z1 y
  254.     {
    8 F: F  a" c0 m
  255.       bSilentStep=FALSE;
    % b3 _+ J6 _" A* Y+ z
  256.       bCompressed=TRUE;
    ' ?5 g& ]3 f8 q: G0 Y) Z& q
  257.       strExtLocal.Empty();
    % B* |, C' L) d  ^+ ^6 j
  258.       strFullName=(*i).second;
    , |) d- ~8 W. H* h
  259.       dwProgramState=AP_CONNECT;
    - p6 p5 h  \+ O& c5 R  h
  260.       return TRUE;
    ; ?, K% K; t1 l# u" V
  261.     }
    ; H7 r0 U2 p% X! }! f! _1 o
  262.     if(!bRestartUpdater)
    ! F& w4 P# ?3 e7 J+ |; d
  263.     {
    , r: A# O. P* N3 U' t! l4 M. `
  264.       int iCurrSize,iFileSize;7 A: _3 V8 [$ j9 b5 Q1 L
  265.       iCurrSize=0;
    ; C9 e$ t' f; v1 I
  266.       iFileSize=UpdateList2.size();4 x! \0 T# j5 R' }+ `6 P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' r# h1 T1 f# h% x; [: l$ ^1 U5 Q; M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + n6 m9 W! ]5 S9 }, p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , ~+ w$ A9 ], `3 i0 Z3 j
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 g  ?6 O+ j$ A/ ?4 l& n
  271.       Fclearf(".\\update.dat");
    ' @4 [: I: E4 a1 A. `
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 f2 j5 b, p" s: Q( f2 j+ P" _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 `' }/ G; [3 C! I" v% A: M1 N1 S
  274.       {
    & \" l7 [4 A% X& I8 b3 J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 A0 O1 F/ X9 x6 }% z$ t
  276.         {
    ' _, Q( W# k+ U, r
  277.           file=(*p).second;$ r0 k: ]2 r% i# n
  278.           sprintf(filename,"(%s)",file->file);$ t( l9 _( j9 I5 J% P* T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; i( [5 r5 U2 e8 G7 }) I6 i* `3 _
  280.           iCurrSize++;
    ! y+ r0 F7 E; _& s* e6 ^3 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ \8 g4 ]; I# j
  282.         }5 w! D" h0 m0 n) T; J
  283.       }: L3 Y, i6 @( ]( I  {  m; ^
  284.       unlink(".\\update.txt");2 P3 f1 b9 V! E$ @" _5 R
  285.       unlink(".\\update.tmp");
    4 S; Z& C& a( B5 S, @
  286.       Fclearf(".\\checkversion.dat");
    ' I. ?6 j' @+ o3 q( X* y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    8 w  G+ t7 K$ x
  288.       if(UpdateLocal.size())
    6 ]5 [1 P' q: B
  289.       {
    ( s1 g9 A3 ]) N! i: Q: p' K: r0 o
  290.         UpdateLocal.clear();
    2 {/ E( n! C8 D" A/ M  P
  291.       }
    2 [% g3 T$ `9 E) p
  292.       if(UpdateFile3.size())+ D3 c# ]  o; R8 ?
  293.       {$ V' h# s  q/ P6 ?" }2 R( K2 \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 b( A! T6 v7 }8 x( \
  295.         {
    1 C5 w* d* ~8 t) d( n) Z/ T
  296.           file=(*p).second;- U" W# l: g/ }+ O* {( c9 T
  297.           free(file);7 R8 k8 R1 ?; c. x1 `8 e+ R
  298.         }
    , y- g/ W3 d& R' k% c( Q% q
  299.         UpdateFile3.clear();
    9 c9 J8 d7 ^8 u$ d6 X
  300.         UpdateList3.clear();) v" O3 r- \; V/ e$ H; J" [
  301.       }' B: F8 E! l! `" o
  302.       if(UpdateFile2.size())
    / e9 C) z3 }  e! [/ L$ g, b
  303.       {* M! s0 O8 {- @, t- h' @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' `6 ?2 E& B; g
  305.         {
    3 Q% L+ Z; O7 ]4 q4 Y
  306.           file=(*p).second;
    / K8 m* V  P& U6 a
  307.           free(file);4 a; T+ @* H* d( Q* P" k
  308.         }: I  W5 f9 c) w5 E$ V2 l7 f
  309.         UpdateFile2.clear();2 X: E& X3 @+ j, T
  310.         UpdateList2.clear();' k! p; |6 G% n6 \# V  U  T
  311.       }
    3 t7 b* K9 E2 a2 u/ D, @
  312.       if(UpdateFile1.size())
    ' ^' |: @: {2 M$ @
  313.       {
    6 a+ m/ j8 t0 E; e* }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . |  _& D, J4 c5 g) g
  315.         {
    8 |* v! u+ r* k6 h8 ?# {
  316.           file=(*p).second;
    7 |* M9 j  ^7 A' J; n
  317.           free(file);
      [% ^7 L9 Q1 [! T) p0 `! q
  318.         }9 e8 E4 c, G5 c" D) k/ k  b
  319.         UpdateFile1.clear();; S2 E' `' K8 l) z2 G1 ?
  320.         UpdateList1.clear();# G( c: e9 |2 z& \3 {4 V- s( E
  321.       }1 W' ]8 M9 i9 S8 b3 l  J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' Z3 o2 U5 x. P6 S$ w7 q& @
  323.     }! L( ~0 M' W' @) b8 o1 e
  324.   }
    # r2 x" y4 k% Q8 s3 H# ?1 }
  325.   return FALSE;
    0 A* E1 y& M2 b. `& `* B5 a
  326. }
    + k8 {# e% ]1 P
  327. 7 k2 e0 Y! e- W- P
  328. void CRevAppApp::ClearAll(void)' e9 O* [3 B, C3 O) X  \/ ?
  329. {; i  L0 B5 }) ?9 N' G7 ~# B7 O, H
  330.   LPUPDATEFILE file;
    6 R4 @, m% W. @- j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( s5 B" W4 D1 V; W
  332. & H# I2 P9 D  [4 ?, k
  333.   if(UpdateLocal.size())3 `$ W" X, l/ z2 X$ w2 E
  334.   {" |3 T/ O: I/ N
  335.     UpdateLocal.clear();
    / a# G# b" z* q1 M2 D
  336.   }
    " `; G( \* L5 k; a' V- y
  337.   if(UpdateFile3.size())' n+ ^( |9 x/ q' b! t9 T( a% E
  338.   {
    6 u9 _& G0 @  c! s! |3 l+ w' h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! l) p. s4 c, n0 c% x! k0 @7 o# K
  340.     {
    4 P) K% M2 ~# r+ t4 v. s
  341.       file=(*p).second;
    / W1 V' y2 K, {7 W& d7 H
  342.       free(file);  N: ?& r/ L1 k2 W3 P% @) s
  343.     }
    7 T8 I  D" A/ M( k& i- q
  344.     UpdateFile3.clear();: ?7 d! n8 _0 }1 c) F2 I3 E! k2 Z$ \
  345.     UpdateList3.clear();
    % s  k1 @+ H3 d- t) u
  346.   }
    3 l/ P2 [" w6 i/ a# c
  347.   if(UpdateFile2.size())* a# Q. q: t4 L7 q( E! c5 L
  348.   {
      |2 o9 G. g1 S  p' r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" N6 u8 ~6 J' W# X; ~( U# M
  350.     {8 o+ P. i$ \$ e) A2 B5 i1 T. O  }
  351.       file=(*p).second;' Y0 H% v( V5 n( V) I
  352.       free(file);
    , [: @. ]; F7 b* y# |6 ^; z5 H
  353.     }
    # }! J* Q( u3 j3 N$ G9 V5 X
  354.     UpdateFile2.clear();. {! {. q. g* c; U$ r8 }# n
  355.     UpdateList2.clear();
    , X! O) L6 s- ~! R) c% m( R/ k
  356.   }
    ( B9 c- @7 h, w# E
  357.   if(UpdateFile1.size()): |6 @; D+ ~& r: E2 P/ {
  358.   {
    . E$ p1 A9 D( C) Q0 Z5 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 W7 l9 r) }: R: k  e, H( o' g
  360.     {. q, F' ^6 d* ]# }! N, J" c
  361.       file=(*p).second;
    ! G  ?' o$ I$ S
  362.       free(file);
    , M4 p, b6 c6 \( o
  363.     }
      I0 O4 d" g# s  P' Z/ T! \: H6 f& @
  364.     UpdateFile1.clear();2 r8 `  w5 t1 h* ?: s
  365.     UpdateList1.clear();
    + y* F0 B7 p9 G, n6 i: w
  366.   }
    ) A- d! h+ x; y. ~1 j2 }% a
  367. }  & X1 h+ p% a6 |' f$ u5 c6 E% c% a
  368.   9 v& d% \- V+ A- ^/ Q: |( Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( l( @+ ~2 o& J& w* |- _
  370. {1 f$ _+ W0 ?; K2 o6 Z9 t& \- F
  371.   int c;
    5 [4 n5 l0 s' |& {1 k" `
  372.   LPUPDATEFILE file1,file2;
    4 d7 u: J( ]1 i0 h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;( l1 S4 K% S3 V
  374.   std::list<CString>::iterator l;
    , v' U9 A) @, Y; r+ K9 e; z8 t

  375. . b/ ^6 w- y8 P: u' L6 \1 u1 X* U
  376.   UpdateLocal.clear();% P3 I- M0 C1 t0 F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 Y! Q: _) X! e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 ^# y  C5 T' q) l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) j; i( m, F" s1 Q( b: P& S# y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 ~9 b9 P) y! S: u  O
  381.   if(UpdateFile3.size())
    / j0 m+ z& s. b8 I4 T9 L+ C
  382.   {8 Q) ?" F) ]; a, u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ A1 }- _- M, ~+ e2 O& a
  384.     {9 N+ r9 _0 N" c
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; h) c4 a/ z$ y) ]
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 B7 T* H# |% ~5 @- d: C3 H$ ]
  387.       {
    9 N+ j, N  t0 }/ e+ T- m
  388.         file1=(LPUPDATEFILE)(*p).second;
    % F& c3 T5 c  ?" {; S3 ^/ m0 @
  389.         file1->vers=file2->vers;6 Y6 z* \5 a, X+ I+ M) X- |
  390.       }
      v- [2 X1 {% w# X8 z+ `8 ?4 d
  391.       else
    - `" H, P, N8 h. N8 [) N; b
  392.       {
    # @- _% i: H! p- j. ?* ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# F6 h  ?$ r5 ^- i, F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));/ x; O1 r3 W+ u* k1 t; N, E
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    * ^- r+ q1 a+ N6 L/ T# S, f' K
  396.       }* [5 T3 W8 R: P/ R$ B3 v
  397.     }0 ?4 U9 k5 R  [6 N, d5 _+ e
  398.   }& y5 m3 E3 a4 ]# r  ?' l+ C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 m( F) W3 Z4 U/ ]1 l* G
  400.   {6 r  ^. L  U* T+ {! p1 q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- ~, C; C* i" C5 `
  402.     {# a3 W% R( r, s8 A9 {
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! s# Q9 A* V4 u( q0 e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 ]* q" p8 Q2 ^* P% Z4 L
  405.       {& K% j/ X4 U5 S8 b( B% K
  406.         file1=(LPUPDATEFILE)(*p).second;/ M& {7 k3 ?% g1 z, o9 R
  407.         if(file1->vers!=file2->vers)" Z) G. N2 ]+ n" u+ J* ]
  408.         {) y+ o2 Y% R8 ?
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, e' e/ S- w; V  {8 m0 w
  410.           c++;
    ( F. Y+ ^" Q% [
  411.         }$ X. E& K7 m: W" F
  412.       }4 r5 ^+ S/ V7 H+ s* Z  R, @
  413.       else
    # B8 P' H0 ?( i) u. v
  414.       {
    ; u/ U7 Z/ i/ R! P$ P: Q( Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 N8 c+ a3 ]5 t5 B  A6 _
  416.         c++;
    ; k+ d6 D  Y4 r2 t
  417.       }
    9 c3 d) O& ?1 z3 _3 Q. r% K2 H
  418.     }. U6 q9 Y4 I9 L/ [3 [& Z* M# b
  419.   }5 y! Y; m/ x% A+ \$ c
  420.   unlink(".\\DownLoad\\update.txt");
    # u$ G  T7 i8 S
  421.   if(UpdateLocal.size()) return TRUE;# w& ]/ {- l: Z/ [; R0 [8 }
  422.   else                   return FALSE;
    4 e+ F. Z) f3 h* g/ j, s$ R( }- ]
  423. }
    : @1 x% T7 c" `! Z/ S

  424. ; t2 I0 \) F% O, R% D. n" H) Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , H, a  E8 y1 P. Y' i6 t0 ]( D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    % W4 S, M- p( S9 X

  427. ' V. R' c* N1 q+ M& z$ e1 N
  428. " \3 M4 B: F& W) Z; ~
  429. 9 A# L1 V8 ^0 w( x9 P% Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). u) y4 e$ x: X. Z# t
  431. {
    . c# Q5 w1 k* N# t) }7 l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 I- M6 d+ q+ D0 ?- F# b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 R7 ~* `) |9 o$ |! T
  434.   {$ k+ a4 [. N# ^4 p$ o
  435.     char szLanguage[50];  D( a" E4 @/ E9 p4 ^; T( l% [
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- F) `& _$ c3 m1 Y+ P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* B* ?) w/ D, D) o! k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / q# i7 u0 I9 r: Z- k! o
  439.     else                                   m_iLanguage=ENGLISH;
    $ U0 @9 J# {9 N% ^
  440.     char szRegister[100];/ d$ \: O' y/ C6 S. [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( Y, L; x( ^  e
  442.     strRegsName=szRegister;
    ; R; L9 y6 V1 s# `. q
  443.     char szPatchURL[100];
    2 e. Q# @4 A! @; g" l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # v& X( o, E( r( ?( c, ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ g* H" {2 y1 h4 z
  446.   }  b' ]3 A- S0 s' p6 M% z8 u1 e- p
  447.   else# A, k" a( L3 r# l+ {
  448.   {
    $ f. U7 n: a$ m7 N9 ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 p  O9 o( H6 ~. \) c
  450.     strRegsName=DEFAULT_REG_URL;3 P) M* P/ P! s# H% S2 @5 d9 v
  451.   }5 l3 \0 j  Y- }3 b! I9 f9 \
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , c+ e/ |, ~" H( V0 t
  453.   {( y& d! Q- z& k  c
  454.     char szIP[50];
    " }; n& r- `5 Y6 ?: {, M$ Q
  455.     char szDIR[300];1 ^/ `6 L# k# {; y& v+ T$ o! }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 B2 k* G/ Y0 A  @3 z
  457.     {
    2 A! K! B1 c  W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . o* n2 Z  ?; P, X2 E# W; a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) @% k5 q0 O# n' ]0 `/ {7 h0 Q
  460.       strHostName=szIP;: z4 q9 G/ J2 w7 O7 l' c
  461.       strHostPath.Format("/%s",szDIR);. B+ {$ q+ K: w: C5 ^5 R' b
  462.     }
    2 _. y0 b/ f3 N
  463.     else9 _( C9 j. `* x7 E1 Y) p9 D& |
  464.     {
    " M& q/ @: Z9 x( L4 ~# Y3 z$ B
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 a9 g" x. B4 h/ L) q$ v
  466.       {
    - E$ z% j$ f/ l9 p. c, s9 R: |
  467.         char szLanguage[50];/ U' M0 Z4 A! V' C2 B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * E8 c1 q$ \3 J% b
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 b, w/ P+ {" c6 f9 `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 I* y! o8 f2 P3 L
  471.         else                                   m_iLanguage=ENGLISH;
    2 ~6 K" A- _, J/ C
  472.         char szRegister[100];& \8 D4 z* E4 T2 j* d+ G) f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! Z& b5 n" I; }4 e0 Z4 ^6 C
  474.         strRegsName=szRegister;
    3 @7 C5 l2 g% V. |$ n$ \6 o, n
  475.         char szPatchURL[100];7 ]: \3 p3 Y. Y/ ^3 f: i2 _) ^" S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : p) w) h) ?. _/ f
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" g. D* S  m- p$ W/ j( k
  478.       }
    ; Z  q+ Q: E& ?
  479.       else
    # [  y4 Z; z3 }
  480.       {- ?0 O" _1 S9 ]9 I- U9 j% {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 ~1 s7 O; ?3 {5 L9 y
  482.         strRegsName=DEFAULT_REG_URL;" E% q) h/ J$ r, I, w5 I7 v
  483.       }
    ( u6 F! x5 K, I- O$ Q
  484.     }
    . a6 t6 k0 J4 E( J* L9 c
  485.   }
    5 P$ }( m3 X! d) k( z/ V
  486.   return true;
    5 b; l7 D" B. Q
  487. }/ h6 [( R( p) u* a# F. n
  488. 3 F5 ]* P$ ]6 L7 D
  489. #include ".\ZLib\unzip.h"
    7 f. p4 R% }+ k8 D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( S  s7 _- [) i' n
  491. /////////////////////////////////////////////////////////////////////////////. U  u# k5 {/ n, l
  492. // CRevAppApp initialization3 J4 e2 Z, W! x8 W4 U

  493. + B0 k  `) b+ w0 M/ ^( @) Z: w- w$ y
  494. BOOL CRevAppApp::InitInstance()% Q9 H- G. Q. j( g4 X
  495. {# ~+ G5 a  z$ X$ t2 ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 W' }  g" a6 D3 W9 c

  497. 9 G0 ]9 Z, G2 j* P7 r7 g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: y& a0 x: N3 R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * p& p: s' \8 W! d3 y+ D
  500.   {
    6 t: m' \- z/ T; B: y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# n: B' P7 T5 v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 Y, J$ M- Y2 L( v5 }
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 }3 Y+ t& ?( K7 `, q& g$ Y# h2 C
  504.     {
    ( B( T6 s% z* |! _4 N9 P/ k
  505.       strcpy(szPath,szPathTarget);
    4 K* b$ j+ e$ F% Z1 x! A6 X
  506.       SetCurrentDirectory(szPath);
    2 V5 k4 ?8 I6 C  i1 K& r7 }/ ?( e
  507.     }8 F* v# n% O8 F2 x  ^
  508.   }0 r3 Q7 @) m5 w) B0 E  `
  509. #ifdef _DEBUG
    ; s* \& f5 z/ ^, g6 @- \' d, I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); B+ F/ N* T* B; e# A7 V5 @
  511. #else, \: H% U7 ^0 k- h: e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 |+ n' l2 f) u
  513. #endif, o4 N1 J( F: t# o
  514.   {2 }7 x0 d/ n7 n- ?4 d
  515.     char tempFileName[MAX_PATH];3 n2 W! s2 J& ~* w% W9 _
  516.     strcpy(tempFileName,szPathSource);& }1 `# c: G) z2 G2 @! w0 S: p: @
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * h. n6 V2 ~1 k- v1 K/ R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");' M% a8 d" R! O- W% z5 L# |
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    6 l+ |& q( h; p$ l, c. y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 s& J6 X% ]4 R3 A% q3 D
  521.     return TRUE;$ z* j2 C: y% K# C6 n3 W& u" a
  522.   }& u3 W: c$ L  l- ~
  523.   // Nuke 0118: Delete run.exe8 H; _8 [5 A+ k2 D3 F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, \3 x* M0 Z7 r, g5 w( T: ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  n& T1 U6 ?  h
  526.   if(!ReadCfgFile("Config.ini"))
    - ?' A6 g0 B. k8 X. V) J
  527.   {3 t) y2 F! @7 z) m4 F( R- h3 y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 w: l0 `' Z  d1 |9 o* M
  529.     return TRUE;" }0 X# y$ G( f0 ^
  530.   }/ [+ B+ N. C% t8 m3 O
  531.   HANDLE mutex;# O6 V) _8 T% g( o* }4 e5 O6 Q5 J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! ^9 Z& f/ `; d- b  x- M6 Y
  533.   {2 v1 A/ d2 }8 N" ~1 l) c7 R, p$ ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 {& k, Y* z  E
  535.     {, A& f- n$ C% D: j
  536.       CloseHandle(mutex);, x) U; O5 y+ S7 i5 h" g5 k' S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & \( F3 F- F0 D' q$ Y
  538.       return TRUE;
    % P# U, r- T  b5 U- ~; _, [
  539.     }
    ( S7 Q6 {& t3 ?3 Q3 n2 ?9 t0 L% a
  540.   }  
    . V6 g9 S& V% S2 {) ~* p) W& V
  541.   CloseHandle(mutex);
    & x. h6 T! X5 i
  542. / r# g, D! Y7 Z# J0 }0 s3 a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 f1 ?  G" a5 q: r3 T
  544. ; ]& \4 r! p) t4 O/ m- I! r
  545.         AfxEnableControlContainer();
    ! k) R$ g% S6 U% y( W( b
  546. * R4 m' N6 ~9 R4 D1 ^3 T
  547.   bCanUpdate=FALSE;+ g! e. F5 X! [! H3 d5 W
  548.   dwStartUpSteps=1;( ?) T7 R( F. e  D( G6 j
  549.   dwProgramState=AP_NOTHING;: n2 n% M) t; Z9 Q5 `' s

  550. 4 \" j$ p  D+ R) s" ?8 G- p7 L( `1 z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " Z- S) L. Y( ]
  552. 0 U$ T  P* l! {0 Y) B2 i
  553.         // Standard initialization7 V8 M3 r. T, M$ W1 U
  554.         // If you are not using these features and wish to reduce the size
    ; u/ C) H# q  B/ \9 s* B" h5 s
  555.         //  of your final executable, you should remove from the following0 c9 R3 g3 [3 Z  g$ s) }) v
  556.         //  the specific initialization routines you do not need.1 U: _( Z( z4 F; P4 K
  557. 2 v* N& C& g% s" q; _/ s9 Z) M7 z( J3 M
  558. #ifdef _AFXDLL
    " l& n' X; A2 U) X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; G8 {8 m, ^, {* H5 ^# S% j3 e
  560. #else5 M$ Y1 m; m' L6 y% Z# B6 i0 [& \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # U) F4 d' R/ h( o8 J0 Z0 \: E
  562. #endif. C, i1 J3 ?2 e; |( R7 t

  563. ; b' A" J7 Z- N3 e1 a' F
  564.   dlg=new CRevAppDlg;: r7 o. b" T# ]" [* s
  565.   dlg->Create(IDD_REVAPP_DIALOG);! _: y( O- i! H6 l, h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# Y9 \7 ^( [) g2 z8 {8 j
  567.   m_pMainWnd=dlg;& p4 V4 w# z( s! T" w; O" l0 j2 J
  568. : ~3 K% }$ S& x1 X! B) K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , S+ S& U# X6 p0 m

  570. 6 L( E7 z  y0 Z- I' ]$ z; L: }
  571. //  GdiplusStartupInput gdiplusStartupInput;2 T4 ?; I( {- o+ E% `* ^# M
  572. //  ULONG_PTR gdiplusToken;: {# N3 O# N! W0 g2 m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % L; W7 ?: f9 s- t, P; Y# l$ n

  574. 2 n( |1 ?+ j) `: J/ {
  575. //        CRevAppDlg dlg;1 V. M/ D- c$ I1 k+ e
  576. //        int nResponse = dlg.DoModal();
    6 L& B' X  Z+ P& x. f
  577. //        if (nResponse == IDOK)
    4 b. Q  N* H* O0 j7 ?" [4 _
  578. //        {( \+ P/ F0 N) I% _7 ~
  579. //                // TODO: Place code here to handle when the dialog is
    # q% ~; t6 C. u+ P
  580. //                //  dismissed with OK
    4 A- v7 B9 y% T# Y4 Q+ `( Z
  581. //        }
    , v; U  R+ s  ?, f
  582. //        else if (nResponse == IDCANCEL)" H4 G3 _+ i, e" O5 T% Z5 V
  583. //        {
    3 F8 \- o( w5 L  R# o4 E
  584. //                // TODO: Place code here to handle when the dialog is
    9 x  G& U  A" M+ S
  585. //                //  dismissed with Cancel$ S- U* c7 \  O5 u& {
  586. //        }- l% |% t9 \' ^7 e3 x
  587. 0 }" Y7 Z! R9 y& p7 `+ S
  588.         // Since the dialog has been closed, return FALSE so that we exit the; M5 b) u: E! s8 ]: \
  589.         //  application, rather than start the application's message pump.6 g. L. Y- p% T
  590.         return TRUE;
    9 \* v# |; G# t) w+ f6 F$ r
  591. }
    ; u$ V7 c" w) M
  592. " @6 X6 ~7 _& E) S3 K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 _% |3 ~- g, \
  594. {) E' \+ `/ e* m, I) g- \3 N
  595.   int i;0 l$ \6 g& L$ |# M( z
  596.   char *szRet;
      `9 X5 q7 z2 V- a6 o1 i

  597. ; s* E& P: Y( b; @% p
  598.   if(pSource) { itoken=0; sztoken=pSource; }. y  \; \" f: a2 [, Z
  599.   if(sztoken)/ {6 Z- w% t! _9 v6 l: i& b) T
  600.   {
    % F, p0 z- c# a( {7 N
  601.     szRet=&sztoken[itoken];
    % d* v2 @# K. c6 q) B* v
  602.     while(sztoken[itoken])  g* z& R1 i9 `% c
  603.     {1 z  v- c2 g  }' ^* Q0 H( X
  604.       for(i=0;i<(int)strlen(token);i++)
    2 V) ]& `6 N2 d
  605.       {) \( ~% `8 y. `! }) y! M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * Y" O8 v# x9 R. @2 Y
  607.         {
    4 J. T: i3 H* @* Q
  608.           sztoken[itoken++]=0;
    9 H/ {/ V" Y5 D9 l- I1 Y/ p
  609.           sztoken[itoken++]=0;  s- I0 o. g5 }
  610.           return szRet;
    . g- K; Y" [) M$ u7 Z, B
  611.         }$ x! t$ W/ o# M1 l0 p
  612.       }6 {( h- ^6 C. {7 l
  613.       itoken++;
    ' w. I3 m3 B! f; ]
  614.     }" @7 W9 m1 {, J( B
  615.   }
    0 [2 ?3 a: X$ Z% j/ }
  616.   return NULL;% Z3 V' ^' ?2 K- }, M) C8 D3 y
  617. }7 u; s9 h# y/ h! o$ _

  618. . }, b9 K1 A: T5 Z. L) j- V$ |
  619. void ProcessProc(long Total,long Current)
    + g$ h: W* M8 j4 G
  620. {6 i" P; B( s) ^/ O5 |3 c
  621.         MSG msg;
    ; g+ [0 u  w0 Q) [8 V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' N1 q+ \6 B/ i( }5 p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + w: f. l% L: {0 j# y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & Y. x- V, C5 X2 i- x8 P
  625.         {
    ; U) \, W3 |/ w  e+ ]$ A) ^# Q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) F8 Z* w, [) f' ?' \: T
  627.                 {
    & K- V' b& r# l6 a* P1 h) }& N
  628.                         return;
    , U. C+ O0 k$ p
  629.                 }0 A6 W! B7 i9 M0 C: O/ w3 _4 q
  630.                 TranslateMessage(&msg);
    1 D+ [( J, ^$ Y
  631.                 DispatchMessage(&msg);
    7 {& Y4 k* E6 g& M
  632.         }       
    / {/ k) @) k' e* a. @
  633. }
      b9 d' s( v1 v# `, r. H

  634. $ u0 Y5 z7 J; O3 K- }( p" D& e9 |
  635. BOOL bFirstChar=TRUE;, ]6 \; ?% M% E) |2 u
  636. 7 \5 i/ }1 Q7 t& C$ t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 `2 |& @( ^  \4 H6 u$ p. X
  638. {, C) Y) i! |$ c
  639.         // TODO: Add your specialized code here and/or call the base class& Q* u& ^: z) ~4 A
  640.   switch(dwProgramState)7 B# b) Q7 x0 ^3 W  Y
  641.   {5 D! c6 p8 h& r* W# N# l6 A
  642.   case AP_NOTHING:
    / }) w" K0 O+ R, F2 ~# D6 r! ?" X7 L
  643.     switch(dwStartUpSteps)
    6 M; I) t# b' m
  644.     {: Z: @& S. y. I" c' z0 e/ w
  645.     case 1:, R. H9 X# k& l3 S
  646.       {
    7 K  @0 A" _6 ]$ w! i( H
  647.         int i;/ E; u7 z; D4 ?8 n+ C8 Z8 n
  648.         CDC *pCDC=dlg->GetDC();
    # V% E# [# I: r& D: v
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 B5 y$ o6 B& U% l4 {6 B, P
  650. //        Graphics graphics(hdcwnd);
    ! E# L5 W  O; |$ h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ Y+ V- m9 `. N. v. y. w' z
  652. //        INT iWidth=bitmap.GetWidth();& P0 m% ]7 D5 U9 s" `% Q
  653. //        INT iHeight=bitmap.GetHeight();
    % n  |7 n6 Y) u' r1 V
  654. //        Color color,colorTemp;
    " |4 q+ `# ~* j& w1 q; a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 x( _1 ?5 }( {/ S8 h% O
  656. //        {" h- c5 d* Q" t2 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): Q1 I# s5 W# i8 ~
  658. //          {
    * K+ Y# j4 f0 P/ B/ u9 H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 p3 W1 U- w8 N0 X6 Q
  660. //            colorTemp.SetValue(color.MakeARGB(6 d& r# \1 H/ p7 T' v
  661. //              (BYTE)(255*iColumn/iWidth),
    : z% o& Z1 R# d8 v* y/ {* \4 J+ y: y
  662. //              color.GetRed(),; k1 A# y$ }  `1 {
  663. //              color.GetGreen(),! ^8 Q0 S# {1 b8 V$ H. e- ^0 p
  664. //              color.GetBlue()));# W+ J; V+ j: x% _6 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);# Q& F: J# C) @9 z. |; v- _( e+ f
  666. //          }! m- V+ `2 S5 r5 ]
  667. //        }
      Q2 }( f- M8 x- Y, n, }2 |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' S: `7 ]8 {  v4 u9 m9 ^2 {, I% j. Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # @! i9 I: g! b9 Z6 S# V- d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% _9 C' C: @; ^  E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' U2 ^+ r+ M. E$ e; v: r
  672.         for(i=0;i<240;i+=8)
    2 [! ?0 D, a2 ^# L# U. j
  673.         {% |0 T. i0 r+ z8 ^! s+ U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ J9 X7 `9 T3 Z# `/ m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& `# J2 o: a9 ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      t: [) R7 X5 }& `" x. m% B
  677.           Sleep(33);. ?1 {' O/ i) _5 ?/ J/ S6 z
  678.         }' L2 P5 |# M' F& |8 b' z
  679.         Sleep(1000);6 _: Y) L" q5 b2 K* {6 q! w
  680.         for(i=240;i>0;i-=8)
    + O6 M2 C/ {" H7 Y, ^1 @! J
  681.         {
    & S% A( H' c+ [9 w3 D
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( B4 W  |5 t9 W& H7 O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, @, ]) Y3 L) b* Q* P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      s" m" P3 G& Y( r$ b# G2 R$ `
  685.           Sleep(33);
    1 s1 X/ Y! p' \+ j
  686.         }
    ' V5 I8 C8 m, T# K) R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 U" j0 s. k9 V1 L
  688.         dlg->ReleaseDC(pCDC);) {; `/ B, c7 F( F* q
  689.         DeleteDC(hdctar);9 ^" a8 E0 A" G" e! p2 r# E: e
  690.         DeleteDC(hdcsrc);, u  p$ z1 S4 N3 ?6 e) c5 @3 @
  691.         DeleteDC(hdcorg);
    $ U3 {3 @0 J% K8 z/ l
  692.       }
    4 D: |. f! r' S: _- `5 C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 _& m/ z- T6 c2 h# _, L1 p4 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* f! M! f8 |) N/ _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 s3 J8 n' C6 v0 i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! z- i6 I! \8 \* y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + A2 z% T# Y. V# {, s
  698.       if(!Dn.Connected()). t* U# p7 R' O( j
  699.       {- d$ P/ l+ ~+ G4 C- l4 H( |
  700.         dwTotalFiles=1;
    , r, M8 M) p0 ]
  701.         dwDownLoaded=0;5 R6 J; r; i( N- g0 l( A& Z; L- j7 N
  702.         bSilentStep=TRUE;
    ; i+ O. `/ S% s5 n3 t: {
  703.         bCompressed=FALSE;
    1 f' o8 A1 m# \% @
  704.         strExtLocal.Empty();
    8 g  O5 b8 |( a
  705.         strFullName="readme.txt";
    6 Q3 g( L/ n1 c/ I4 S
  706.         dwProgramState=AP_CONNECT;
    % V0 i: ^( u; P7 f% w
  707.       }! \$ q, l. ]; }4 Y( K8 W
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! D0 |$ b5 S0 J/ R
  709.       dwStartUpSteps=2;0 V5 x# n7 r( g8 ^1 p' H' J& Q
  710.       break;
    : \8 g1 a% m; J4 a
  711.     case 2:" k; h3 q  z+ F6 U. \3 @9 y
  712.       {" C, |" ]: b/ `
  713.         int iEOF;. h+ g5 I# X. e) e% y9 J
  714.         FILE *fp;$ H7 k: [+ d8 |+ N. f* t+ _
  715.         char szString[512];% {/ K! f2 J/ s) {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) K+ h' o5 ?  Y: ~; v
  717.         if(fp)$ x7 f! y2 t6 c& ^
  718.         {
    2 |' o+ R; B0 y( C
  719.           do
    2 c9 T/ |$ c/ e
  720.           {+ s$ o6 {  B  Y$ N
  721.             iEOF=fscanf(fp,"%s",szString);, y+ @3 M. `8 j& g6 y/ |* ?( f
  722.             if(strlen(szString))9 l5 O0 Q7 e- b0 l5 |
  723.             {
    + ~  Z4 v4 e, l2 H- ~
  724.               if(bFirstChar)' u, K, M' W1 [$ Y, _+ K, `& r
  725.               {
    6 u$ \# G% i% z6 C) ^5 E  |! g% M8 s/ m
  726.                 bFirstChar=FALSE;
    9 P0 v, U2 m, F0 T2 I7 O5 s
  727.                 bConnectIsBig5=FALSE;
    6 u! B# u# I8 i6 E1 K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 t4 Z. L# W, o, T
  729.               }
    - {8 m& {3 C! ~2 u/ u* u$ i& s
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , F. B. x& _9 n& c8 w7 ^; }, J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; I# ~4 s1 C% {# v1 R3 b) b; k
  732.               dlg->m_ListText.AddString(szString);
    * w- Q- K4 l/ d* z. B) d* K) ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! l( a4 r1 R! O, M# S) B1 |; A7 c1 b4 r
  734.               *szString=0;4 {, [9 r1 ^) ~# e& r
  735.             }
    4 }% `# ?  Q, r" _$ y
  736.           } while(iEOF!=EOF);
    ' {, @" G1 s; {- f
  737.           fclose(fp);; L. X- }% A' \7 F2 e" l) d( s
  738.           unlink(".\\DownLoad\\readme.txt");
    ( G* f" U: ^" J& b( E" b
  739.           dwStartUpSteps=3;) [9 a  E% W  Q8 m5 N' S
  740.         }: ~  Y3 X. V6 O' C2 u- Q
  741.       }. e( n0 h8 w5 d9 Y7 B
  742.       break;
    8 J% }* o. H# g$ [0 F' ?. I
  743.     case 3:. `8 t7 {0 g" n
  744.       if(!Dn.Connected())
    3 n" [( [2 a" o$ q# Z+ [3 X% I
  745.       {0 G0 z, N* X1 d( D9 A: G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 j% v- x9 T% z& n. `8 P. c# C+ I
  747.         dwTotalFiles=1;; b) B2 u" a) w& X" y7 F
  748.         dwDownLoaded=0;) x( t8 r/ i& V  m( w" h; Y: s
  749.         bSilentStep=TRUE;
    9 }& G* }# s& H1 _
  750.         bCompressed=FALSE;
      G5 r- O( I7 \
  751.         strExtLocal.Empty();
    - s0 J" i' C1 M+ T+ i
  752.         strFullName="checkversion.txt";+ `4 e1 O4 u, h3 e% }$ F3 a
  753.         dwProgramState=AP_CONNECT;3 E8 O+ ?3 Q! p5 M
  754.       }
    ) k$ j" \% _' J; i& o& n
  755.       dwStartUpSteps=4;( Q9 d+ }& y3 x: P% V
  756.       break;  @' E" V+ Y* _; [
  757.     case 4:
    / _+ v3 H( l8 ]- Q
  758.       {
    ) h/ V$ J; N: `, `0 w1 h* N* R- I
  759.         FILE *fp;
    $ B3 b6 h8 A4 J. b
  760.         char szString1[128];% C* N: t! s% U
  761.         char szString2[128];1 Z- S3 \6 S4 J( [* P2 a! G7 n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, Q4 i! u- c( [. z* ~! @
  763.         if(fp)
    0 T' b/ l% D7 z7 t* J3 N
  764.         {
    ' ^' E! P0 `3 s6 Z5 t" {+ F. T
  765.           fscanf(fp,"%s",szString1);
    " u% f8 f* `4 m
  766.           fclose(fp);
    8 z, r0 A' o' h$ `+ \% x" j
  767.           fCheckVersion=atof(szString1);- M: X( |! @+ x* Q
  768.           fp=fopen(".\\checkversion.dat","r");
    ( w! Z; e8 C: B, S7 j
  769.           if(fp)) V% y5 \# N' t
  770.           {) G# J6 }/ U! c& r. l/ ^8 L  s% Z
  771.             fscanf(fp,"%s",szString2);6 a8 d7 M! ^' C- q6 w' f
  772.             fclose(fp);
    1 C* V3 b. G3 u
  773.             if(atof(szString1)!=atof(szString2))
    ' V  C' V% M. ~* k, f% t
  774.             {+ G& `4 M% W3 G( J: I! h% b4 t
  775.               if(!Dn.Connected())
    3 F; }& h' l. O
  776.               {
    ! U4 `& O& W, u5 g
  777.                 bFirstUpdate=TRUE;
    5 ~- o2 @" n6 k3 }' o7 z5 {
  778.                 dwTotalFiles=1;" q9 @8 I% p7 {4 ~( A/ I
  779.                 dwDownLoaded=0;
    2 t# R" u6 P3 ~$ w6 Z) |2 r+ I% R. X0 h
  780.                 bSilentStep=FALSE;+ @8 Y. S7 b: s$ q& ^# S8 a/ O! y
  781.                 bCompressed=TRUE;& D, T  n/ a( y8 l( o
  782.                 strExtLocal=".\\DownLoad\";
    3 f: i% {. _: R/ h' n7 W
  783.                 strFullName="update.txt";2 X3 r/ u& K% R
  784.                 dwProgramState=AP_CONNECT;
    6 Z6 T. V8 u' U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + Y- b9 g9 n2 \8 F2 R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' @! L5 X, o+ G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 |9 k4 _$ `6 {$ |
  788. ( Z7 r5 r- t3 L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! N( ]# M' x$ f4 w4 R
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 V  H9 _+ u6 ?0 @+ G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): L* F; t! K. n7 O/ A3 p
  792.                 {' P5 R. Z/ u  E! a/ s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! s* K4 r2 r% A, i. f" C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" A, \% j+ o* [$ g7 L; V0 f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( k6 U% `! m+ f: |) o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, t9 g4 {1 |; w8 }% @

  797.   ^  {7 I0 L3 m6 O+ I
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! E1 G4 V6 t2 U5 d) l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) c8 ?% }1 N( {" o1 ], V- t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 @5 P) u0 _+ o- o" b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& z9 E8 \' Y: I& s4 o, z+ y, [
  802.                 }, O! P. g; f, h, z) n6 E  T
  803.                 dwStartUpSteps=5;  r+ c3 g2 E2 G2 Z( I0 X& ]! f
  804.               }6 R0 T' u. `* [  z5 U' N
  805.             }3 m) u5 E* Z/ n( u1 j
  806.             else
    ; B' j) @2 E8 }* J, C
  807.             {
      X: o' V3 r* u4 O* F
  808.               unlink(".\\DownLoad\\checkversion.txt");6 I. t: E3 S7 u" B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # `8 f4 C. r/ a2 ~/ h  N8 U9 E8 I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' t: j( |3 t! J: d& S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 D5 W% a+ e* S, }" ]' X
  812.   N5 c1 O, B3 H& ^( N3 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 F. _* a" v- q  h
  814.               dwStartUpSteps=99;3 l* j+ r* F% Q$ e8 |7 M  J
  815.               bFinishUpdated=TRUE;3 q" U3 ?, P/ C, ]
  816.               bCanUpdate=TRUE;
    3 n! A# c: }" I5 \
  817.             }) A. U* |9 J% C8 h) Y! d( d
  818.           }
    ' L% V) F  @+ P- u
  819.           else
    8 z! o, I& z( A$ \2 r# D7 {  J8 H
  820.           {" Z: \7 Z0 z- g  {) r* \8 t! |
  821.             if(!Dn.Connected())8 H; f' X2 g: J
  822.             {
    ' N% o/ C% Y% v3 _
  823.               bFirstUpdate=TRUE;; I. ]% D6 E9 D/ g
  824.               dwTotalFiles=1;
    ! |3 ?# @) x5 }6 ~
  825.               dwDownLoaded=0;, m4 S) {; B+ A, j0 Y. Y2 h' o9 {
  826.               bSilentStep=FALSE;
    # p* c$ z# Z) U$ d9 s. P
  827.               bCompressed=TRUE;( M4 ]+ Z9 R' h$ C. ~) d! }4 n
  828.               strExtLocal=".\\DownLoad\";# w& Z" `. ]+ Q8 z" `
  829.               strFullName="update.txt";
    ' L0 O# H' h5 u* H9 S
  830.               dwProgramState=AP_CONNECT;6 ?+ l7 S" K. E  c  ]4 h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 E$ u% Y3 x8 M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 Q7 g0 y9 R2 N8 J7 p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 y. x- ?7 a, \, g: {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 S7 c% G* q4 }! ~" |
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . N5 z. n. C* l# t  y3 z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 o$ G' g+ W9 I2 q( ?7 M
  837.               {) @& Z9 F4 ?) [- x4 R. Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 w9 Q( d9 T# i3 g$ @% u/ C  s. h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) G& O6 m, y% ^5 z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 ~! @  ]! e& J5 A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ^# r# L7 x+ C: f
  842.                 ' ?) J5 p# `) \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# S. ^  C2 e$ }  g
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . h* |2 q2 d# C! r% y* \. i
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 Y5 R5 {  Y! ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # L$ m: t2 R( ]) ~2 k7 o
  847.               }
    , g" {: B6 n' }/ o% U& A$ P
  848.               dwStartUpSteps=5;
    " {4 _( d( @$ K8 i2 n5 g7 P' b; B
  849.             }
    / F& \  p1 J: Q, }
  850.           }
    , P: ]3 G) C/ `
  851.         }
    ( y2 v8 G+ Z8 `0 V' @
  852.         else3 w3 B, L/ b# ~- j5 R5 c
  853.         {
    - b! U$ M' O& }, z5 E
  854.           dwStartUpSteps=3;
    ! W7 G5 q8 v( I
  855.         }( M  q' @' D5 ?
  856.       }; M) p' N' L1 ]! |
  857.       break;; z. ^1 b+ p# j" F8 ?) X$ c
  858.     case 5:
    ! K; V2 N# c# ]; C. f/ ~! d  N
  859.       {: G7 c1 f- I# Y2 G, J+ h# y. D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ {% P- H" b8 B% H
  861.         {
    . R8 Q% ~# j7 A) a' y. ~
  862.           int opt_overwrite=1;( T2 O% A  ?: `/ o$ e: y
  863.           int opt_do_extract_withoutpath=0;: w* w; j1 _( M; X% F& G
  864.           unzFile uf=NULL;
    1 P3 p3 B! p" ~' N
  865. & \7 k% J- I- G' }$ ~
  866.           uf=unzOpen("Wsa.zip");7 R7 N9 R9 C5 U: B
  867.           if(uf)
    8 z) R$ _$ ~- w5 q& _3 _
  868.           {& g6 C) T' |$ |# k
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);$ ?- p) K, C; e& N" P/ x! \
  870.             unzClose(uf);3 Y7 c$ f% K! _, x
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");, n% n+ F, Y$ C6 R5 J8 n1 n  G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 @$ {/ C  c- O; W* A, M8 @1 m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: ?7 V' I, H) I' N/ }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 f1 g9 z( p( U; n2 `# C
  875.           }! m& c9 ?9 K! n1 M' Q5 g
  876.           DeleteFile("Wsa.zip" );% M* }' W1 k" m) z
  877.         }
    8 p0 _0 S0 @2 k' n) _, U$ {# J
  878. 6 I+ t5 m, r/ r0 M9 _/ p
  879.         if(CheckLocalVersion())
    ! z! s  D5 t3 |% d+ D
  880.         {! b3 _+ i: r7 l% J8 n7 f) y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' F" C4 p% x2 r2 A0 g6 s! C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");0 D! d" o; r% y( }) u- @
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");9 o" C0 c( ^3 h/ ^* g4 E( y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * j. h' P) H: ?' M, k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);1 C/ Q0 v8 c0 s
  886.           dwStartUpSteps=99;3 Z' U* z- t0 a. J
  887.         }1 r/ A+ Z' q  z& U! v8 o
  888.         else- J6 W1 M7 [  Q7 n
  889.         {  j. x! Q- Q' j2 H1 z1 z) ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: t! e9 Z' d+ E. S9 L! G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - R- _6 F3 {7 I( T
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( o+ o  _4 H* D4 k% O

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-27 13:36

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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