找回密碼
 立即注册

CSUpdate.exe源代码

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

0 Z' z. v( b1 d1 L9 v6 x8 C( m
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 c+ e; v* z! L$ M8 f5 B
  2. //0 G! e2 {+ ?& E7 U$ @3 Z

  3. ; O, l# Y  G+ \) k" `+ I; e4 Q' R
  4. #include "stdafx.h"+ Y6 o$ h) D8 f7 v( r

  5. ; d) Q: q+ v( _- p+ K# [# g0 j
  6. //#define UNICODE
    . P. I8 K6 l; q9 ?+ O  j
  7. //#include <gdiplus.h>  c9 q# n3 W  O/ [' J9 ~
  8. //using namespace Gdiplus;- F  w+ ], Z6 z( \

  9. # }/ x0 i$ x8 i3 B+ m
  10. #include "RevApp.h"
    7 {4 ~, }) t9 J. y  z% m& M
  11. #include "RevAppDlg.h"4 N+ V; i: {- j' C% b, L, i  C" y
  12. ( l; W2 L6 p9 B4 ]5 {; x  L( U6 _2 t
  13. #pragma warning(disable:4786)
    ) _" X  p. R4 ?5 q
  14. #include <map># T* ?# Q0 p+ t3 d: U
  15. #include <list>% _) M! l4 k7 B: t2 s: I& e# v
  16. #include <direct.h>+ w- X. [) I  ?% D: N& B
  17. 3 L; I* \0 }. V
  18. #ifdef _DEBUG/ b8 w# g& x( j3 C% l, o4 ^: x
  19. #define new DEBUG_NEW
    8 q4 B" t7 n* F, j& `  N' P' X/ X6 }
  20. #undef THIS_FILE: y' F  f. s! R. v
  21. static char THIS_FILE[] = __FILE__;2 r1 G4 R3 h. \+ p; y$ q# q( h# B
  22. #endif
    4 E/ S: O" }5 Q# A$ i! z9 D
  23. #include "SkinResDef.h"( v9 D. a( ?: m3 @
  24. #include "ChangeBG.h"
    6 Y3 y; X7 z5 ], M5 V& w# G
  25. #include "AFXINET.H"
      R/ {3 {0 f& F1 {" z

  26. 3 N7 ]4 p" {0 v9 A
  27. #define TRADITIONAL_CHINESE 0; f2 g9 n0 b) Q) g
  28. #define SIMPLIFY_CHINESE 1. W' S. G3 p4 B) h+ y* v$ L# K- l
  29. #define ENGLISH 26 c7 h& U6 U0 }. z6 o2 l6 V
  30. int m_iLanguage = ENGLISH;$ \7 ?  f7 v7 z  g% ?; s
  31. /////////////////////////////////////////////////////////////////////////////+ o: W$ C/ ^; ?
  32. // CRevAppApp  K/ Q( K3 v9 ^" _2 B0 L" N

  33. / J6 K. ]# d6 Q/ g/ Q( o0 S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' _2 _! s+ L; a( t8 A
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 U( p& i% D0 _$ p" F  d2 ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 |8 D2 z% X+ d9 f1 M8 i- @* `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. G$ T! z$ h, E- P) Y
  38.         //}}AFX_MSG; Q( D% e% t# f8 G- Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . r4 g: Y  t4 X: `: V+ f" m
  40. END_MESSAGE_MAP()4 `0 r* W7 \! F& o, f4 n( q" G

  41. 9 ^% z- i# }! {' Z3 b" P
  42. /////////////////////////////////////////////////////////////////////////////
    9 L) [- ?4 B5 Y: d, O
  43. // CRevAppApp construction
    ) i! l/ v# ^3 v
  44. 0 N, \0 n1 {& m* o
  45. CRevAppApp::CRevAppApp()
    4 G  j: B6 l, b9 g/ a5 u
  46. {& k& _* u  H4 L3 B
  47.         // TODO: add construction code here,; N4 V* ^3 H( I+ y2 `6 z% J
  48.         // Place all significant initialization in InitInstance
    , a0 U: e8 V) N4 O. d# e7 N; ]0 t
  49.   bDisplayIsBig5=FALSE;
    ( c; @  m/ `7 E$ }; L5 H9 `" r% H
  50.   bRestartUpdater=FALSE;
    3 @* i: ]& u" e& E
  51.   bFinishUpdated=FALSE;. M) W8 c9 X1 ?& O3 W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& m$ {! Q7 q: E2 I8 r
  53.   InitChangeDataBig52GBKS();
    ) ~) m* M8 B, e2 v
  54.   InitChangeDataGBKS2Big5();
    # e: Q* J) U/ v7 Q+ z
  55.         //
    - t, _& H/ m# X; u1 P: d
  56.         bClickRunExe = FALSE;; Q5 R4 u6 Q0 m7 g3 ?1 `
  57.         //8 A6 T6 E/ ]9 P2 V8 Z" _
  58. }
    4 x1 K9 [: ?" G8 N4 Q

  59. 9 c$ r5 U) y) Q
  60. CRevAppApp::~CRevAppApp()
    ; Y, Y+ A: A. x, U. f1 X
  61. {% C) w& L* E7 v% p: e2 Z3 b
  62.         // TODO: add construction code here,
    ) B( I0 t1 K- }. L, F  `
  63.         // Place all significant initialization in InitInstance  n- x- G' c4 V, u4 ]( v
  64.   EndChangeData();/ b; _$ p- }/ I' [9 U/ f
  65. }' l0 T6 u# s, d- E

  66. 6 g, e/ i  ^* Y1 O) Z
  67. /////////////////////////////////////////////////////////////////////////////1 A5 T; E5 J; D. r" I
  68. // The one and only CRevAppApp object
    0 U. ^9 o& _% R5 V" q

  69. " K" R- l, `8 K
  70. CRevAppApp theApp;
    ' t2 u, k  ?7 c' i4 H& N+ }

  71. ) U, G9 ?: w: q3 P$ h7 ?0 P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 H( K3 x7 e! d& F
  73. {
    & u& w- |( z. Q; M/ x) n  R% X
  74.   int iEOF=0;
    & n1 h' H6 f1 C+ N5 S. U
  75.   char szTempName[MAX_PATH];
    ( `* ^% y+ Y7 |" O; ~4 E( w
  76.   *szFileName=0;
    - o  O0 z- I" N6 U1 E4 l
  77.   iEOF=fscanf(fp,"%s",szTempName);) K& ~$ v, [8 x% q. t: ?8 Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- O6 I( q" d0 Y; a
  79.   {
    - T8 ~! P  R; u- ^. C. n6 m: p
  80.     strcpy(szFileName,&szTempName[1]);
    . d& F: N0 W' v7 I! q9 s' e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; @! y, |$ h3 o+ {  [
  82.     {8 P) W$ v* \( A
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' x  E4 x& P, {# }$ q
  84.       strcat(szFileName," ");; Y# I# |6 E2 w# r5 h& I2 ]
  85.       strcat(szFileName,szTempName);6 |2 N7 U+ R$ y. Y  ^5 [: m( J
  86.     }! X3 z9 B- C0 v$ C: D( i
  87.     if(strlen(szFileName)>=1)5 N/ F7 W% y  K7 v! R
  88.     {. v6 `7 S- `; y$ F& c
  89.       szFileName[strlen(szFileName)-1]=0;5 N4 V1 M8 ~" k9 {& e
  90.     }
    ; C0 I6 u8 [$ Q* [* p+ ?7 [
  91.   }
    & j( ^: m1 \: Z% B
  92.   return szFileName;
    " e2 }( K* ]5 ^, M+ i- p2 d' x
  93. }
    ' u4 h* _3 }- u7 i7 C
  94. ! L/ e+ q$ G$ I3 Y) q7 @0 B
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 B; l9 [0 b) {* D' U5 n7 K
  96. {
    . K4 \/ ]! a1 `" [/ v3 X2 P
  97.   FILE *fp;
    * d) y* w5 N/ n
  98.   char *key=NULL;3 N; n% S6 n" O4 r4 O
  99.   char version[MAX_PATH];/ c! `( j* ^6 ~- Z% H& O
  100.   LPUPDATEFILE file,olds;2 G$ K. P0 F" U$ f, Y/ R* K8 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;$ x3 I) L7 u/ Y) q  A9 u( i
  102. 0 V& l$ |& q% l3 u( D
  103.   UpdateList.clear();
    ! }/ h( O8 e( M) K# Q( y
  104.   UpdateFile.clear();2 H) M) D( c! q
  105.   if(GetFileAttributes(filename)==-1) return false;- t8 Q8 @9 n, J9 D" _
  106.   if(!(fp=fopen(filename,"r"))) return false;: @' d' e, G+ q4 C5 K: [
  107.   fscanf(fp,"%s",version);' B6 d( x. z) d, T
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 B; `, _5 V, ?) x) W
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 h  {+ k& y' y! I$ Y0 W
  110.   {
    4 o5 |6 h  E, r1 P. S& [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- E% t! ~$ r  I3 `" z& j
  112.     fscanf(fp,"%s",file->path);
    " b; X7 l0 @; D+ {# N+ }. }  ]4 |" K
  113.     ReadFileNames(fp,file->file);
    ( @7 O5 c' d8 h' b
  114.     strcpy(file->full,".");$ q3 K. e: ~5 m% [5 s6 p2 b
  115.     strcat(file->full,file->path);
    ( t, ~; i5 |8 W; t, E
  116.     strcat(file->full,file->file);
    ! n8 k6 b5 |, {! g. h0 o5 [
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - w, U) M7 P% Y, c7 k- R
  118.     {$ k2 [0 x0 I; S4 l- Z; I8 ?
  119.       file->vers=(float)atof(version);
    4 J2 b( ]/ ]  S+ a1 N& B$ L
  120.       UpdateList.push_back(file->full);
    1 I6 L( C- \8 V8 _5 U( O% c7 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! ^- f% i& m! T/ x6 T$ ^
  122.     }
    , ~. |8 m; i2 _5 B9 d) U" o
  123.     else6 T3 S! I" F% B2 b/ M2 }
  124.     {9 ?7 n( ~# }/ I1 z  T8 ?
  125.       olds=(*p).second;
    / g$ H  @0 H/ [8 X7 F4 M" n
  126.       if(olds->vers<(float)atof(version))/ w+ M3 K( x  z3 _7 k
  127.       {
    8 s% f- D1 ]9 L- {9 e$ j' S) M4 q8 a# E* M
  128.         olds->vers=(float)atof(version);& Z1 f0 o! O& d2 v" F0 q/ X
  129.       }
    $ K# r3 @; ^# @" O# b3 R  I
  130.       free(file);
    5 I  b; E, u, t: m- E; c
  131.     }" b$ W& C6 T: Y1 D& Z$ X7 ?
  132.   }: }/ I0 R9 y) w7 _3 Y! r& o
  133.   fclose(fp);9 D. N: m# L3 f: J( g7 @2 D/ w
  134.   return true;- a2 k- Z' [$ m( X0 l( d
  135. }$ R6 q& K" Z6 E0 R4 n. g& ~
  136. . T( e2 J3 U& J. _5 z, p" W* b7 ^# O
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 ]2 ~5 y9 T( z8 |0 N
  138. {0 t5 v+ a' p" {2 R/ d% ?
  139.   TCHAR  szFull[MAX_PATH];6 E4 Z' H6 G* s2 c2 c
  140.   TCHAR *token,*inter;4 F" j/ C: ?  z" U; _, M4 _9 f
  141.   *szPath=0;
    1 Z$ [9 c, M! b2 v. ~" I& f; B
  142.   strcpy(szFull,szFullPath);% C- Z4 ^6 v+ x7 P
  143.   token=strtok(szFull,"\\/");
    & _* t  D+ N  C0 O& F
  144.   inter=token;
    : y' Z3 F$ r& Y+ e' S! M$ ^
  145.   while(token=strtok(NULL,"\\/"))
    ' c' X  j, J7 N( s$ R0 G$ y: k
  146.   {; V0 j7 v0 l9 `+ U% ~$ {) b) D
  147.     strcat(szPath,inter);3 W. W& _% B, t7 `+ F! O3 }
  148.     strcat(szPath,"\");+ c& I/ r  G. r. ]1 T
  149.     inter=token;* u; f. r" N* r2 R( Q1 a
  150.   }
    / [4 N+ Q* R4 @+ j3 N  c2 ?3 `
  151.   return strlen(szPath);- A0 l1 b. ~9 E, Z2 V7 b
  152. }
      y9 }/ C' a  x5 G; Y+ e( Q/ P+ Z- H
  153. + A/ K* }% n# A5 }7 S! e8 ]! C8 X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- T: x9 O7 n8 Y
  155. {4 A/ p8 o3 a* X. b* u! a' G
  156.   DWORD attrib=GetFileAttributes(Target);
      }9 B* r/ o) G* W
  157.   if(attrib!=-1)& F1 b/ u6 ]& ?/ T, a. g  p# T
  158.   {4 m$ J( a6 K5 |5 e9 O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% V; d+ V6 }$ I' T. ^: [
  160.     {
    0 {' f) L1 F; M5 e* q- F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 ]) Z7 ^% R/ J$ n) i- w( F  o; L
  162.       SetFileAttributes(Target,attrib);9 B- x9 F' v" F+ M  C# L
  163.     }
    / s( K* y& @% a5 K# \* i2 Z1 h
  164.   }
    * i2 X2 K" [- y  A$ E
  165.   CopyFile(Source,Target,Erase);! b/ D" {; e  ~# A# D. ^% n7 P
  166. }+ C. W. Y$ R$ J2 n' {

  167. 3 p2 Y, C" W* x9 K) w, a" {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( i' l5 f' O& R* d. d
  169. {, C; d" q/ k7 A' R9 N& h- `& h
  170.      FILE *fp;' t( _* @$ v) m4 N, `
  171.      char  szBuffer[8192];: r( ?3 L3 g( k& e* l3 e5 W( E0 q. m9 t% h
  172.   va_list  argptr;
    ; N1 k, ]2 }9 h+ p$ N7 @1 Q- ^7 T

  173. : U* H+ D5 a& x* a1 W1 U
  174.         va_start(argptr,message);6 p3 |5 L  W2 k  S% C; P
  175.         vsprintf(szBuffer,message,argptr);
    : U; @9 m+ C# Z% T
  176.         va_end(argptr);) E: V. m) A7 h& a( f1 c
  177.   fp=fopen(FileName,"a");
    - N+ l! h- h' i" [4 X4 S
  178.   if(fp)
    3 p4 I$ p9 N) A; C4 T
  179.   {
    $ S1 u9 E0 Q8 o9 X
  180.     fprintf(fp,szBuffer);
    5 A3 `; {& ^; y6 ^1 [- N- m8 y5 {
  181.     fclose(fp);
    7 @3 g% S, }- Z8 W/ J
  182.           _flushall();1 L* E1 L7 M3 \; {3 ^" k8 A
  183.   }
    * @& n. }7 O! U0 ~) W7 f8 ?4 g+ P
  184. }
    $ t+ P7 x- T% J; j, K$ |

  185. ) n0 \4 L+ X# t% P" N5 w, H
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 f3 T- N# d0 o
  187. {
    4 A1 O! Y! A) f% P& L4 T8 Y
  188.      FILE *fp;
    1 F+ i1 k  O4 I8 g. j! ~0 R4 V
  189.     DWORD  attrib;
    0 g$ i5 O' [5 C8 R
  190.   attrib=GetFileAttributes(FileName);" Y4 Y9 ?2 Q0 m: A( A+ N; e# |" Q
  191.   if(attrib!=-1)$ V2 j" d; y* t4 ~* K0 q  @
  192.   {- b+ O( y+ Q1 t+ B0 Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ) U2 r+ j/ f! D/ R2 L
  194.     if(!SetFileAttributes(FileName,attrib))% ^' D- T" M8 {  d
  195.     {9 B6 D& R8 A- l8 r8 N: I
  196.       return FALSE;: x. n( G2 m, ?0 i/ z7 N
  197.     }! D+ n) `8 j* A( g3 F+ `+ ?5 S
  198.   }
    % n" |5 R* W7 b, a  ]  h
  199.   fp=fopen(FileName,"wb");
    # E: S# I$ E! a9 k: c  r
  200.   if(fp). E; A$ K3 G! M- F
  201.   {
    7 a3 Q; y" x- _6 |8 B# M1 g7 e/ B/ B3 S
  202.     fclose(fp);
    6 u2 P+ ]! l7 q
  203.   }
    " k# K* q$ W5 H6 p2 \! p" z- h' s
  204.   return TRUE;" l0 D  q& R4 h
  205. }5 \6 A" G$ \8 _) ?
  206. , ]' N) T: e/ a2 t: j
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& z* v" Q4 S7 y
  208. {4 d1 E, [( ?! v
  209.   char filename[MAX_PATH];+ z2 q+ s# ~, ?' u: e2 P0 l
  210.   LPUPDATEFILE file,olds;
    3 n) p$ b" T+ D& F
  211.   std::map<int,CString>::iterator i;( i7 |+ j& R1 _: p; {4 Y8 M4 }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 A$ z" T- u) u2 y
  213.   std::list<CString>::iterator l;4 t! Z3 \6 H6 T9 t5 T5 _" O
  214. 4 h" |4 K5 ?3 ^$ t" w8 ~! r: Y
  215.   if(bFirstUpdate)- ^8 y+ F4 `$ W8 \8 H+ s+ ?/ B
  216.   {
    3 w$ ]/ F* z3 K' ]$ r  T8 ]- N4 b* E
  217.     dwCurrFile=0;
    5 B  R: P) X3 \0 R) g' b( k
  218.     bFirstUpdate=FALSE;! ^2 F6 U7 H( @+ K& Y8 @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 i; P3 ~) M0 Y# k2 m! y! P8 e
  220.     {# N' _0 Y! J+ }% _7 r) S
  221.       dwTotalFiles=UpdateLocal.size();
    ; C( X8 S* P- k* U- ?& f
  222.       dwDownLoaded=0;1 C0 C  e# g4 k) _
  223.       bSilentStep=FALSE;* R9 n2 [( v, o: n! B
  224.       bCompressed=TRUE;
    ) s5 B4 e0 K; j, L% m3 R8 x
  225.       strExtLocal.Empty();
      Y$ G  @' \4 t9 t$ R
  226.       strFullName=(*i).second;' q1 |4 u: V$ y$ {
  227.       dwProgramState=AP_CONNECT;
    6 ]9 C* _) `1 b" K. w
  228.       return TRUE;+ p, y8 b$ c* ^# d% r
  229.     }3 x2 P& L% M* i& D% T/ w' v# t: F' P
  230.   }1 ?5 Z2 H1 q% D4 q
  231.   else if(bRestartUpdater==FALSE)
    % M3 b/ k, M# m* G
  232.   {$ s/ a/ {5 n; ?# b- @. }" u* b* w( ]
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) j6 w; k' C7 a, G
  234.     {2 t7 j9 I8 r" A- N
  235.       file=(*p).second;
      t% q5 A. |: w# Y2 y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 m( O9 K- W+ U- i" r7 w3 `
  237.       {* b: {0 ~# I: B6 y9 K
  238.         olds=(*p).second;5 O; K' v# h# D' q
  239.         olds->vers=file->vers;; |" l) ~" c# [" \
  240.       }# Q7 H' Z' |! q$ ^9 y' m+ c( I% w# }! Z3 A
  241.       else( w) x9 c4 i4 ?
  242.       {
    9 _6 R; O' Q! _7 A9 O
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& Q% s4 i% y0 M- V  R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ R9 g) s8 N4 r3 Q- j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ ?, U: i3 Q1 ^# [6 |
  246.       }
      B. a: w; K1 D! P+ A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 V$ I" ~' A% L$ z4 S5 }( j" k, z
  248.       sprintf(filename,"(%s)",file->file);
    # J* `+ E: I7 f0 J( Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; N( t7 ~4 m! K3 v$ e/ k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, K; i7 t  j, d- f3 e  @
  251.     }
    / s. A* p5 W1 d5 |5 m2 |6 ?
  252.     dwCurrFile++;
    ) t( y* i! W- N( M2 \2 B5 H* v
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * ?2 g" c; M* ~' j. u: I4 L; b
  254.     {4 ^9 c+ t% J$ C. L. ^$ w
  255.       bSilentStep=FALSE;
      ]7 N* g# y& Q: \) L) L9 t7 A0 f
  256.       bCompressed=TRUE;
    8 ]# S  o8 h+ R1 \) K% b
  257.       strExtLocal.Empty();9 y7 w; e" q0 n6 Q/ ^6 e
  258.       strFullName=(*i).second;
    2 d# O9 _- T: x4 L7 z' _5 s5 _
  259.       dwProgramState=AP_CONNECT;( O* l0 U# D" l5 J! e& A
  260.       return TRUE;
    ' m0 k& m/ u/ Y
  261.     }& Y7 y* \4 {: ]9 p- K5 @8 ^" V
  262.     if(!bRestartUpdater)
    , y+ U. r' J- k$ x
  263.     {9 m  ^  J! b0 e+ @
  264.       int iCurrSize,iFileSize;3 j  B! Y6 H9 X- N
  265.       iCurrSize=0;( ~! ?- `' _  c; w7 P, B7 D2 z
  266.       iFileSize=UpdateList2.size();
    ( {' t( ]2 M8 F' K0 n! H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  Q4 r# K+ ~1 J4 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ l9 K" d4 Y- s3 _$ i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 N* Z) n, C  I$ ?( t7 ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# r( Y  d1 B7 j% H+ O
  271.       Fclearf(".\\update.dat");# `% N7 @8 ]0 O6 n7 E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * N" a2 t. c: _: y( N: G) E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / Z& l, y1 c5 p; @
  274.       {- u: o3 h! l7 ?- P7 I) u( F7 d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 T& W5 N9 S$ Y, u+ L) I' i' u* y/ t& f
  276.         {
    ( B7 r5 m) {  \+ X1 Q1 E+ ]. s9 `
  277.           file=(*p).second;5 G4 F8 o# H2 R- X$ |$ Q% @* P6 K0 |; @
  278.           sprintf(filename,"(%s)",file->file);
    3 w; v1 N9 I  M% O
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , s+ f, d* K/ i2 q4 F7 ?! T% X$ |6 A
  280.           iCurrSize++;3 T3 \; H6 ?  M, m' t* |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' `* U' n( u( c2 w) _
  282.         }; T2 g3 m& Z  {7 N$ m! s: j. J5 b5 J1 i
  283.       }
    1 K8 y9 v! d1 q1 u) g+ H6 Z& [7 I% d
  284.       unlink(".\\update.txt");* X) i$ p( b3 X
  285.       unlink(".\\update.tmp");2 x. a* K  j, P
  286.       Fclearf(".\\checkversion.dat");" }' K8 h" X. w9 I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 ?: d2 j7 Q, }% H+ A% h2 ^4 Y" P
  288.       if(UpdateLocal.size())
    ) E/ O- u/ l( J: L
  289.       {
    6 K- e. u0 M  d( E2 Y8 ^/ K
  290.         UpdateLocal.clear();
    * @4 j6 W5 c& D5 Y+ j1 O7 e8 c" ?
  291.       }! ^: ]* D2 C; ]. i6 |) O
  292.       if(UpdateFile3.size())
    ; N# O8 Z+ u  C( K* j
  293.       {
    6 m+ L: m- a* u$ d! G$ O1 j, v/ g. D- n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; v# k1 t2 u/ a/ r1 I! S
  295.         {
    , {7 T3 J( E: F1 r* T' M4 d
  296.           file=(*p).second;
    ! U4 |2 R" P# r$ _+ ]+ I* ?* V& V
  297.           free(file);
    ! G$ \: S$ k4 l" \
  298.         }" Z5 U2 }- P: ?* J- C4 W2 Q) R- U( _
  299.         UpdateFile3.clear();
    1 C' f! N5 K" _. z' t7 V9 a
  300.         UpdateList3.clear();
    ( C: N8 S7 _8 n! o$ i8 O: v
  301.       }
    7 x, t. R& e" {" L0 M1 w( l# v
  302.       if(UpdateFile2.size())8 J* T$ y: h, b) b
  303.       {% N5 ]# H9 V- l( I& a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 ?" [) x) I. c
  305.         {
    ; x3 l4 \4 T( ]
  306.           file=(*p).second;
    7 Z8 S! \% I  G* f# M+ I. `
  307.           free(file);! |% _" H) e$ E, A3 a; [
  308.         }' o* a! Q  i& _: j
  309.         UpdateFile2.clear();
    ' @0 v4 N) @  N
  310.         UpdateList2.clear();
    ; J. |7 q# {" C- y% g: X
  311.       }2 N/ w/ e, Y1 {2 }7 f7 B$ a
  312.       if(UpdateFile1.size())3 o2 M- y- B0 v/ E9 Z
  313.       {
      z8 }& F  n1 u2 S& T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / [6 V6 n! w1 ^: p
  315.         {
    ( q) i( O, W3 P2 O1 z4 x0 G/ K' {
  316.           file=(*p).second;# K/ B4 j' k* ?' m2 C/ q
  317.           free(file);  s9 L' Y8 w& g, H0 ^) v7 e
  318.         }
    ' R8 B# P: ?3 j$ Y/ b0 K( T. H
  319.         UpdateFile1.clear();' p) i: K0 q7 E5 F- W
  320.         UpdateList1.clear();
    # U% h# d6 n9 V& p/ X; @# d! a( m
  321.       }
    8 @) ]. L: w  W. Q9 L2 j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' L. J5 a0 |& f- Y) d% ?
  323.     }
    , l! Z; G  i% {4 s& C
  324.   }) U( P! F; l( W& I# O& y+ m
  325.   return FALSE;' {0 H  g2 @; e' j; z
  326. }( A+ q: K) e! u0 {' o( {

  327. ! a6 r7 B( z5 S; S( c/ [% f  Q
  328. void CRevAppApp::ClearAll(void)
    2 {6 I! u' q1 r) J5 v/ S& _7 V
  329. {
    3 N2 B& n, C+ x, k& |' Q4 f
  330.   LPUPDATEFILE file;4 Z$ \/ @$ m" G8 I, Y, y2 _2 g: ?+ X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( j+ s/ O2 B, @# V+ F9 g
  332. 4 D% B2 M! J$ t3 y* X+ F
  333.   if(UpdateLocal.size())
    , }* n1 o  V% z9 `
  334.   {& T3 J4 c- ~/ _! I0 ]8 n
  335.     UpdateLocal.clear();/ [+ h/ K4 O7 J
  336.   }
    5 l, b7 X6 b$ }3 h/ W
  337.   if(UpdateFile3.size())
    ) M% x$ h2 t/ t  h6 a. I
  338.   {2 N( o: m! y. z' d7 ~6 ]: e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), v' M0 C' ]/ `" Y2 ]+ K
  340.     {
    2 l! t" [- v( x4 w, M+ V  _: R
  341.       file=(*p).second;+ |4 T! e* E2 N4 s
  342.       free(file);/ G( e) V4 S$ V! Y
  343.     }
    ! P+ o: M' T0 d4 N
  344.     UpdateFile3.clear();
    # q, X" i% h9 r# p* R7 S5 g
  345.     UpdateList3.clear();& W6 _  V! k3 v
  346.   }7 \9 ~2 N6 a* W6 I$ ~, z
  347.   if(UpdateFile2.size())
    $ m! L* b) l2 |5 D! X: B  N
  348.   {
    / {6 o  z8 U- c  t! F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . `% [% U  b7 [- T8 j/ O
  350.     {6 k$ H* }* [' F; {; h6 H; K& v
  351.       file=(*p).second;
    ' k  i0 @) Z3 J- R! A1 P
  352.       free(file);+ ?6 d+ m8 Y. ?( Z( k) J
  353.     }' V$ c- b' n/ r1 L9 T* h7 D
  354.     UpdateFile2.clear();
      h, e% M* j; ], @+ G
  355.     UpdateList2.clear();
    + ]' i+ \% n5 d& v7 K# T
  356.   }
    6 T& ]* Z+ p1 M# }8 j
  357.   if(UpdateFile1.size())2 D8 ~: g* }- H3 z
  358.   {- @1 M) u6 S: |: U% r, b
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * G  }0 \; n" |/ P
  360.     {1 f8 o8 D$ }: V/ H+ g
  361.       file=(*p).second;) a" U; C' J6 }. P- S
  362.       free(file);
    + F- t& b, q0 A' X5 O! H
  363.     }' Q2 q' r5 x! }0 L6 x4 Y2 W
  364.     UpdateFile1.clear();( v. v* C+ m+ r8 z4 |. S! s
  365.     UpdateList1.clear();
    & z+ d" x% V8 s
  366.   }) [2 W! d+ A$ W( P
  367. }  
    : W6 a3 O3 R! s" E: D0 G
  368.   
    % `. q: U; j5 e- H
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! B' }- F4 C  R# i" ~
  370. {- z' g1 J& v4 f4 `+ N
  371.   int c;
    % l: J. j- h- j4 N7 I! B
  372.   LPUPDATEFILE file1,file2;  F( A" S2 Y4 ?" ~6 S7 }" |- A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 q. g$ h; \9 \# Y4 A
  374.   std::list<CString>::iterator l;$ Z) p3 u  r3 n5 w
  375. 3 f) r. c/ C7 J  I
  376.   UpdateLocal.clear();
    ! ]+ E' a* q5 e" P7 A% d" D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 |" o8 B( ^) {8 a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( ?& Z3 b% ^& f( d0 {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( R5 B3 a- \# q4 d; _. G% B4 I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 A1 \; ~: E: X$ D! b
  381.   if(UpdateFile3.size())
    9 U8 S3 o3 U4 ]) i/ M0 H
  382.   {: i5 |* t1 @! G5 N. H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 R! F1 w/ C4 S% ^7 x
  384.     {# E. R1 w7 \2 q' e
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 z4 |) c; R) E+ o9 ]& h9 |/ }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : U! c# ]) @2 n/ w+ ~8 x
  387.       {
    5 k) t! k9 ^0 W; m3 h
  388.         file1=(LPUPDATEFILE)(*p).second;' R# q, a# A8 h. K' M
  389.         file1->vers=file2->vers;: `' }, s, m+ K8 n1 \
  390.       }6 N& I5 M4 n6 M; S8 h2 _
  391.       else
    ' e' K' n6 {( L8 O  a
  392.       {
    ( m5 F+ ], d7 G: ?! J/ Z" [" x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 q: f2 c( K$ m% k# c2 F# {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 b; Y! k& ^1 i- Q. m- a" L% a4 l1 r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! `0 |& P7 s/ y3 g3 i% m, U
  396.       }0 ~! Q% W% g' \: M
  397.     }6 m0 a# e  X8 M8 K
  398.   }/ Q/ t3 O# r! ^! w7 }5 _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + X3 h$ ]% i: I4 ]- i5 G
  400.   {6 t4 ]2 C7 P' q8 }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ X$ J- Y& ]; Y1 F* W+ R. h) x
  402.     {; E: a( c1 \5 L5 P* J! T+ A( Q4 ]
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; p" R" o. i9 H9 e' y  L9 c2 _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 E1 e3 R; I$ D! \, I0 ^
  405.       {
    # d, w* I# i/ t& q
  406.         file1=(LPUPDATEFILE)(*p).second;
    : P  @3 }: f8 y5 O& [# o
  407.         if(file1->vers!=file2->vers)2 m. |" w& Z1 B2 \, D
  408.         {
    5 k9 o, ?8 L$ B6 K8 I) A3 t/ X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 k  c* H4 n) p$ r6 Q
  410.           c++;, N- W" l$ a) h" w6 W
  411.         }! [0 l! H% _. I2 l0 T# [
  412.       }2 ]3 d- c& H5 i
  413.       else
    6 Y* t3 n& Z; X' G% v, {- D
  414.       {/ H$ K( l# |+ W6 I8 f' L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! T- m( M6 S- S
  416.         c++;- N5 k; b; _2 V7 F' j2 E
  417.       }
    5 A- h( E, a, c! K( D
  418.     }& m- j& s/ I  j* }2 Y8 m7 C$ ]
  419.   }2 p$ T8 @$ J& l4 q' R+ D
  420.   unlink(".\\DownLoad\\update.txt");
    . v2 L, C' [: ?1 l% ?* H! \
  421.   if(UpdateLocal.size()) return TRUE;! K' d1 }+ A& H/ f
  422.   else                   return FALSE;% j# |8 Q) {  r4 W
  423. }
    8 t5 m3 V( F* Z! M9 p. @# i* ~

  424. 7 [" i* N8 E5 f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 r# ~4 e# V" w  C  f8 ]8 X) \- T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 c, G4 |* L- g
  427. 2 }2 h! a( _  ^$ h! Z5 i
  428. - `' U6 R, s8 P9 g2 K% [

  429. ' r# V) t$ u6 U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 S# o: c) D% b0 `1 \* H. C# w
  431. {# ]; d* ^5 h6 B5 X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' Q- y5 h. B) p7 \: a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 I( T9 C( u2 {
  434.   {# ^6 J# x; h& r% _1 p3 h* G$ X
  435.     char szLanguage[50];% q8 _! A) y3 c# K8 h% T2 B( b7 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* s3 K; `" P, d# H: D, o; z2 h- e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 O0 t9 U3 |- d4 V# g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* j# b# c5 J; q  E
  439.     else                                   m_iLanguage=ENGLISH;
    8 I6 V6 `5 Q1 ]" p  I9 z' j/ O
  440.     char szRegister[100];4 A! ~' J# x' U6 S) ?6 }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % I, q" }! E& X/ l
  442.     strRegsName=szRegister;+ d8 _% T4 P( q4 f
  443.     char szPatchURL[100];2 @/ @0 S3 i  g8 R; v9 H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 a( n' l! o) _' Y$ m3 B; I6 y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! H1 K+ p' }7 i* W0 X7 o& g
  446.   }
    8 D- V* ?* {4 _5 K+ ?
  447.   else
    3 X( D7 ^* r* {; Q4 v1 X4 S
  448.   {4 Z" z: w2 I/ T0 X6 |+ R3 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # M+ T  J/ X5 L3 j6 f( X9 e7 a
  450.     strRegsName=DEFAULT_REG_URL;
    5 y  G& k  d4 A  b
  451.   }2 T* Z( H8 [' X  s5 F$ C
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 z2 q; q2 [- U) u, L$ E1 I% R
  453.   {
    8 m% d! T4 o3 z* c. {: Q7 P( {! `
  454.     char szIP[50];+ e, }6 z0 h! j4 O
  455.     char szDIR[300];6 ]) N, _' v& L# h) U1 }& W& ~# C5 t8 V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 F0 f  R! V; S/ H# U
  457.     {
    3 J  B! T7 @- [% E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + ?8 w( C' o: u( O" K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      Y& B6 C2 N$ x0 @/ }0 D4 N+ D
  460.       strHostName=szIP;. G7 e- Z. o- z& p" X& T  p6 j
  461.       strHostPath.Format("/%s",szDIR);" k% m( @7 Q) l+ }9 g3 @- i
  462.     }
    ) R7 B+ G* w! W; B5 k
  463.     else
    ; f4 y2 O& x! s9 w$ ^
  464.     {
    " K& r/ Y6 c5 b. }/ z0 H* w. s
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 B4 J0 x) h/ P& z$ @
  466.       {2 g( m$ f& _1 `" F7 \; c
  467.         char szLanguage[50];
    * @7 V6 P0 i; s$ h2 C2 ~2 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 E* m0 P( N2 |* Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 o( N' ^. [( s$ f' u* \
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 W. B9 j8 I. `# H( U: C* l
  471.         else                                   m_iLanguage=ENGLISH;
    ( y' w1 _0 d. c. p6 Q; l
  472.         char szRegister[100];
    " B& K/ Z8 V" Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  S, w( J. z1 E# @8 A/ S" p) v$ r
  474.         strRegsName=szRegister;( l& h* k0 Z& _! x& t, I& S
  475.         char szPatchURL[100];
    - s/ `3 @0 q- q6 ^+ j( ?
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ e' |7 w) W, x# N) e! C7 f/ n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . N) G- b( U; H, S1 s% X6 M# J  i! Z  b
  478.       }$ j. M" \8 i+ O
  479.       else5 w$ M1 y: h! A7 s" ^9 M; i
  480.       {
    ! [  K1 L' s  m7 f  `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # ^5 z( j& n5 l2 \% V4 ]2 A# d: B
  482.         strRegsName=DEFAULT_REG_URL;' s+ B! Q0 m( N1 M: \6 T8 w
  483.       }
    - t1 e- W3 i2 l6 E. u: [6 J
  484.     }2 v4 J; O& o/ A0 a
  485.   }
    ) q) e: E7 M% l
  486.   return true;
    2 R0 V( h# M# r8 w# m
  487. }
    ) Q: i1 r2 t$ j( N
  488. 0 L( }0 ]5 D# R, G8 r+ N
  489. #include ".\ZLib\unzip.h"! u/ }( h1 i( S% d/ x3 b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) J1 }8 n7 A& o! D* ~: G
  491. /////////////////////////////////////////////////////////////////////////////
    ) f1 `0 c; h# ]; }! w1 s
  492. // CRevAppApp initialization! ?* w! ^. M/ q, l, p& @
  493. 9 D3 `; @9 v# y1 X
  494. BOOL CRevAppApp::InitInstance()
      m) ^4 B) O3 n) C9 |7 t
  495. {2 W% r( [' z2 X- h, [
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / A' ]$ M1 t/ f7 E
  497. / z* U% s0 e. z3 N3 P! Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 v3 e, Q  e- \# |0 L' H
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    3 Y& M% s' F! b# ?! l3 B4 T: r$ J0 G# A
  500.   {
    ' M3 y! O9 ~" S. u& {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");2 M3 J. V. C/ M; u" o) u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# d& q- w7 y7 ^2 z. j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 D0 F  C3 f7 U5 F; U' `- c
  504.     {
    # [" u# a8 f& l
  505.       strcpy(szPath,szPathTarget);- _  o* A- b, E6 E7 d" m% Y
  506.       SetCurrentDirectory(szPath);5 W! H9 y! H! d! R/ a3 r
  507.     }
    ' E/ c' o3 D$ ?: O& Z: h
  508.   }7 l" G& D0 \) e/ J3 t; q
  509. #ifdef _DEBUG
    ) j* c2 V* h$ s1 v# S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& P( S8 @6 O" b3 R* ^9 v  y
  511. #else' k0 y# R+ N3 K, r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) ^  T, P& G% H+ X9 F& p
  513. #endif
    6 x3 l; F- n, W7 G
  514.   {
    2 A  h$ {' W% p! `  B# t2 Q3 Y- _
  515.     char tempFileName[MAX_PATH];
    7 x& |. }) i8 ^3 L
  516.     strcpy(tempFileName,szPathSource);
    3 [% ~# M5 m' z; j  J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % f4 i0 K) T) D$ \/ A6 b/ C+ e9 b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : t: x; e* J9 d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, K8 P3 R: f+ E/ @7 Y: H0 k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : a* N$ E- Y( k+ i8 l
  521.     return TRUE;
    3 p% r" M8 v: q+ D# U
  522.   }0 C) O6 z6 O$ D& b* ^
  523.   // Nuke 0118: Delete run.exe
    : F' U( ]$ N: S3 V/ B$ K6 m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : A* D, _7 |" W5 ~( A0 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : a+ u  j( }  i# j
  526.   if(!ReadCfgFile("Config.ini"))
    5 E9 X  f4 H9 V3 U8 I/ A, P
  527.   {
    5 ]/ N4 d# c  K5 `7 n- b8 S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 B! x! D, f( H, R* w" @# f
  529.     return TRUE;8 k# W( [# I5 L" Y$ ~4 L3 l
  530.   }
    4 Y- T$ I4 {! z1 i# Q$ a* }5 N
  531.   HANDLE mutex;6 c& H6 t: b8 I: ~& m$ ]2 i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . b+ C, y& D, h) @* ]& o  o( t4 q) [
  533.   {
    ( K; P, ^1 t1 x/ U% a9 f' W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' X4 a0 j; N+ {0 f
  535.     {
    : x* P. q( m# k4 x( [. Y/ i
  536.       CloseHandle(mutex);' x+ i% @, b% [6 J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ! \8 p: c9 O0 S- N' a5 v- N2 V
  538.       return TRUE;
    ! b+ c- J; g  A5 T3 q( p
  539.     }  L; u0 k3 W- u9 V/ W' x8 q1 ?
  540.   }  
    ! W( Q6 L- T; T& P+ I
  541.   CloseHandle(mutex);5 d, B' @: V# [5 x

  542. $ Y  ~  T: V/ G( t* E6 W  t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # W, l- C, u: _
  544. . f) {5 m$ e" {8 l! M
  545.         AfxEnableControlContainer();! d; K" a7 `, ?" j5 f; @% g3 K  N- {
  546. / U0 z" h8 [/ s! j  ~" }: q
  547.   bCanUpdate=FALSE;
    2 z  _9 R! x% O
  548.   dwStartUpSteps=1;' \5 p2 {4 p7 p6 J  }
  549.   dwProgramState=AP_NOTHING;
    6 F4 }, U& B4 v- [5 O2 s/ n

  550. 5 e7 y+ }( o) S% @) k6 I1 _) P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ B, t7 }4 B( r' r* g, \

  552. 3 l# F- j7 A! a7 T
  553.         // Standard initialization, z% d4 }! ]. I' V! g& V& M' B' X
  554.         // If you are not using these features and wish to reduce the size
    8 r* S8 m0 A! ]/ r+ J7 l6 }
  555.         //  of your final executable, you should remove from the following8 o8 z: m; Z" L' U
  556.         //  the specific initialization routines you do not need.
    6 c/ Y4 l8 T( w1 e5 b5 ^6 z2 N
  557. ' D2 p7 n2 w# [+ q6 u6 e
  558. #ifdef _AFXDLL: Y: }1 U. `* O! k
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. j9 ~+ U0 n/ Y& {1 e
  560. #else
    # |( [/ r1 ?6 r$ E3 k6 z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 B& O: E1 o- b! H
  562. #endif" {' N) y. W* Q6 H. e5 b: }, `: d

  563. 7 i+ q+ G6 k5 \8 v8 |1 }& k) w
  564.   dlg=new CRevAppDlg;
    ( c% l# n4 j1 W7 s- l8 J
  565.   dlg->Create(IDD_REVAPP_DIALOG);( T3 \" `6 f6 l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . n; n/ n3 }/ }( H8 v# v4 R' Z
  567.   m_pMainWnd=dlg;( e3 |) T0 R) {& \1 o
  568. 5 Y1 x9 \4 Z( j5 `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' K8 I7 Y; a! r; C  Z* V

  570. 0 @; v+ E8 M/ b  o6 G
  571. //  GdiplusStartupInput gdiplusStartupInput;  a! ]- u  Y5 ]0 m! `8 }
  572. //  ULONG_PTR gdiplusToken;3 l: n: ~( P" f/ c" v* d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 [  j2 w( ]0 \/ ~4 @
  574. 5 F( H/ H. @$ \2 B" S5 t5 p  ?! ]# H
  575. //        CRevAppDlg dlg;
    , H0 f6 \# M8 s& J9 n0 Z. d
  576. //        int nResponse = dlg.DoModal();, B( o: m8 h+ k8 A  C/ c" j
  577. //        if (nResponse == IDOK)$ e2 F+ v# J* b( |0 r' @+ F
  578. //        {+ ~+ O9 B' m: [! R. r6 [7 T) F' p
  579. //                // TODO: Place code here to handle when the dialog is) z% w1 Q8 [( F6 I& Q7 ?! t# W
  580. //                //  dismissed with OK+ g2 v! G, y& g! K/ ^- {
  581. //        }( W: Y: g4 ?* B4 L$ |
  582. //        else if (nResponse == IDCANCEL)
    * C# {9 W9 p" v% \' r6 ^4 ^/ ^
  583. //        {
    ) ~9 n! E' q; K! ]
  584. //                // TODO: Place code here to handle when the dialog is: e1 o) j% L7 b- z
  585. //                //  dismissed with Cancel% Q' X1 G$ C% Q" s6 v
  586. //        }. R7 Q8 S/ Z0 M1 b5 E

  587. & i7 ~+ B$ L" l, `& N$ g& i$ t. B; [
  588.         // Since the dialog has been closed, return FALSE so that we exit the! x3 `" J" d( }5 e( @$ J- Z5 ~
  589.         //  application, rather than start the application's message pump.* ~+ `7 m! g  Y
  590.         return TRUE;  K- |' \+ I0 _) [
  591. }
    " C+ Z) _9 k: |" f0 V7 U
  592. 4 K: a- w+ J7 d5 [( q; I  A( ~: n
  593. char *CRevAppApp::strtok3(char *pSource,char *token). z% {" {" @) e: I% ?
  594. {2 j! z. k, @6 i% D6 b- D
  595.   int i;
    1 F  O) @: h- g2 b$ H
  596.   char *szRet;- t' V3 y4 w$ |+ O
  597. 4 y) j. `$ S" v6 y6 ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }0 j; ^( P6 M3 l& Q& [5 q4 m
  599.   if(sztoken)
    9 \7 w* k# T) w2 |: P
  600.   {
    $ K# k/ E- N3 z4 `: V" t1 P& I
  601.     szRet=&sztoken[itoken];- T; I4 B- p1 b2 D2 E, I
  602.     while(sztoken[itoken])
      P  ~- g1 O  L1 f  x: {
  603.     {) [. F, G1 }, [) Q! u
  604.       for(i=0;i<(int)strlen(token);i++)* x( L9 L! f3 F: f; H, w- ?
  605.       {
    ' h& V/ ~4 C+ N  b. i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 [' m; s* L' m) w5 b/ j- W
  607.         {
    & U( c; O! Y$ g+ ^2 E
  608.           sztoken[itoken++]=0;5 q+ z& N, E* I4 C
  609.           sztoken[itoken++]=0;
    + z/ A3 \7 t7 O" Z1 q- t
  610.           return szRet;6 h; V( H5 F5 y3 t; `
  611.         }
    2 x) L  O  o- X- b5 ?
  612.       }* k5 y( Y3 N4 [9 Y- x& {& o) D
  613.       itoken++;
    4 a0 a' @' C! a" B
  614.     }
    ( m, @. M" p5 Q5 u! d# y/ z4 W* V
  615.   }6 y6 M5 ]1 d1 p  B
  616.   return NULL;0 l4 w7 b# p8 C- n3 D) v6 n
  617. }
      x& G/ d. z5 X2 t" k

  618. # ^# R3 A. G* Y; J; Y  Y+ G
  619. void ProcessProc(long Total,long Current)
    8 h  q; j* \9 c# n) ~/ V9 J
  620. {8 H1 _# d8 v6 w# ?
  621.         MSG msg;
    % o2 K8 Y' H1 G1 C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. q6 {' B! y1 Q, M1 G; T+ H  z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & Z6 W8 D- u+ ~5 X+ |8 w' u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; K6 }" E! b8 w+ I
  625.         {
    6 s, f2 w' X% C2 L' f! d
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 |+ g: G5 m' w9 m! @! }
  627.                 {% w! e4 \* L  ?+ |" E
  628.                         return;! k: N5 v1 m% t5 ~$ E  x2 A8 H
  629.                 }
      E/ A  `% b2 ~6 b- ~) g: C
  630.                 TranslateMessage(&msg);! W: ]' E, o' I0 q
  631.                 DispatchMessage(&msg);' g  y) z1 a+ m  j6 ?& R2 e' E
  632.         }       
    % A3 r2 t( b: q1 K" F
  633. }
    8 H" L8 a. f1 u8 x

  634. ' i9 w# r/ u) a7 x9 U
  635. BOOL bFirstChar=TRUE;4 [: c+ \% q* a' x3 l2 c7 r0 i
  636. $ d0 M; d2 W$ W. V; [% P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . {7 G1 e  f9 ^
  638. {$ e  \+ [. E2 u" u' a+ |3 D
  639.         // TODO: Add your specialized code here and/or call the base class
    5 y# P8 o$ u5 O# h4 R4 J; H
  640.   switch(dwProgramState)+ T' e  @, u) e0 N: C7 F
  641.   {
    4 _& ~5 o# M& x/ N6 ?
  642.   case AP_NOTHING:- x* Z* N* v4 q; a9 {/ @
  643.     switch(dwStartUpSteps)
    % J- Z8 C5 W7 m9 d/ L  b8 F$ k
  644.     {4 H: R; L. Z! ^3 u3 L7 X
  645.     case 1:: a6 y: p: c  f5 ~
  646.       {% _& k0 E4 E! ^/ d1 H
  647.         int i;: E  R9 J# O% H. _6 p& Z5 \! q: a+ _
  648.         CDC *pCDC=dlg->GetDC();
    # d, k3 U) ~: ?- X, z$ }
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 B" d" ^- ]( b( i
  650. //        Graphics graphics(hdcwnd);
    7 E0 k6 R3 b# P+ H4 }7 E* O5 B2 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . `8 g% r% w9 b- c! H
  652. //        INT iWidth=bitmap.GetWidth();
    & R4 {4 P: L3 O# b' Q& O
  653. //        INT iHeight=bitmap.GetHeight();
    ( _% m' S; U9 h9 v# C! `
  654. //        Color color,colorTemp;' t" Q" c+ P- ?: K: F6 C, ]7 B1 B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . X  t2 @7 h/ E- G7 Q4 A" q
  656. //        {
    " W( P5 m* z. A6 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 E) q. w. m8 B- b- W, x% F, s
  658. //          {- C% f3 D0 P6 \7 G/ _9 B4 \* ~# V' W2 k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ x9 Y* q+ _  j% j- w' B
  660. //            colorTemp.SetValue(color.MakeARGB(
    * [/ c1 i- h( \% r* |; T
  661. //              (BYTE)(255*iColumn/iWidth),% g) p# w9 n+ \) a' [6 i; e
  662. //              color.GetRed(),
    0 E1 j1 g0 l! e& `8 P, B
  663. //              color.GetGreen(),
    9 F9 K9 I4 A4 y" F
  664. //              color.GetBlue()));
      p: R; z, N5 ~+ o7 w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 V- g. ]; s( J# {, j% J/ R
  666. //          }
    + u7 W6 Z* Y' ^
  667. //        }
    ; g/ z& A: b3 ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# L4 u- I. }4 o- g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 H/ _. d4 R8 w' X# G. X' ?  S9 x" q1 Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");2 y$ X" Q4 }  L: U) n: P
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 q# L# x, ~& j* A' `+ t1 j6 ^7 s
  672.         for(i=0;i<240;i+=8)- d8 G* W9 k+ p3 u/ w. A' Q
  673.         {
    6 r: z' d/ y1 P4 m( l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( n3 z  A8 r+ N$ P6 u! R# }
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 O: R* W3 r* ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 V1 `. N* i: k
  677.           Sleep(33);
    ) C" }: q8 z, N( ~- C3 E& P+ ]
  678.         }' W( u3 c4 g2 H2 A1 s, R# x
  679.         Sleep(1000);
    8 R1 Y9 _/ E8 `  [/ `
  680.         for(i=240;i>0;i-=8)
    ! A" s  [# s* J4 g! z
  681.         {' V! h2 Z6 L/ W' W" g  p4 o9 f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; S+ r- P0 O% r% q' M& F
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( K7 d! T+ E) k8 z* X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) b4 }& f0 u: S* B5 U( X
  685.           Sleep(33);
    ! w3 z3 M. ?# q7 m4 @+ h* [! \
  686.         }! R0 L: i. z% J. v; T8 s  V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' R7 l- [5 R' g. A
  688.         dlg->ReleaseDC(pCDC);& C1 a/ \& F# L, d  z, j
  689.         DeleteDC(hdctar);" @5 c7 ^4 X6 ~5 N  c% I. C3 N
  690.         DeleteDC(hdcsrc);) \$ Q8 {" d, A% x: R0 P
  691.         DeleteDC(hdcorg);
    6 L$ V. D$ z: j3 q$ H
  692.       }2 g  F# C% T1 U/ q/ o4 e% M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 P0 T! l7 v7 k) I, X* A/ M/ S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * ~) k6 {; z+ v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 K( m$ D! J, O5 h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' Q8 q8 i) B0 S- T+ s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + J, O" R" n$ s  [- S( @2 g( }; g: {; K
  698.       if(!Dn.Connected())' [  ?. m2 t2 b2 ]# x8 j5 t
  699.       {7 E, p( B2 @: P1 @5 R1 y% U
  700.         dwTotalFiles=1;; m9 a0 Y/ D6 P  o
  701.         dwDownLoaded=0;* h- `2 E' m1 L
  702.         bSilentStep=TRUE;
    / [+ n* e; {  q" z3 a0 A! ~. u
  703.         bCompressed=FALSE;* l  m8 |9 Y7 a* }' q
  704.         strExtLocal.Empty();
    " {% j3 m1 p: x  d2 N
  705.         strFullName="readme.txt";4 P* Z, p. ~/ e. h) u/ d6 j9 N
  706.         dwProgramState=AP_CONNECT;: J- {) x1 J$ p" ]9 I, S5 z
  707.       }
    ! L% K  I1 e. P% F% L9 i1 S3 k. m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( u& |- s9 H& b% c' K! k
  709.       dwStartUpSteps=2;6 o: e& |) `9 n  T+ o5 X
  710.       break;' k1 ~. I) M  Q' n4 r+ N3 r
  711.     case 2:) P, F  B5 r7 Q. X9 b. D3 H1 B
  712.       {
    0 C0 N. F" f5 k: F. R: F* @
  713.         int iEOF;3 J+ k, j; Y4 t7 H  s( K$ h; L3 G
  714.         FILE *fp;" P% h( ]5 ]& m/ B7 K
  715.         char szString[512];. P5 ^, v  [4 F( {$ U0 ]- K
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, x% }: g/ C" f: J
  717.         if(fp)+ F6 \. C" R% @$ c( U  z' H' V% J; l% [
  718.         {7 K. N, ?( w1 Q; F9 @& D/ x
  719.           do) i% r: `5 C' v7 _2 \
  720.           {: X' r5 X& q) T- |: B+ z
  721.             iEOF=fscanf(fp,"%s",szString);
    , L8 u! ^; L" v5 e% b
  722.             if(strlen(szString))
      b8 g: q0 n1 e
  723.             {
    8 P4 ^- p0 ^+ L4 ?- B9 {
  724.               if(bFirstChar)
    % h: v6 f  x/ _6 O7 f
  725.               {
    ; D1 K& f' M& v; D% A8 u3 j
  726.                 bFirstChar=FALSE;" v2 d+ M( e) W9 O& |2 ^
  727.                 bConnectIsBig5=FALSE;
    , p+ I* s' k% H9 O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 n' I* q2 V- w
  729.               }. Z7 n% z$ K% \: ^
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % I" m/ O; e( ?$ b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; F' ~  A  l, R4 M
  732.               dlg->m_ListText.AddString(szString);+ P3 N2 l! r5 k% c2 u6 a+ [1 X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . r: I% f0 U! V3 b7 U* _
  734.               *szString=0;; E, S/ S0 P2 l" Y$ I
  735.             }& I9 }6 S# _  @8 r  {9 b- k+ |! ~
  736.           } while(iEOF!=EOF);# E" m0 t% `/ M% N
  737.           fclose(fp);( G3 a  \/ N: b% p
  738.           unlink(".\\DownLoad\\readme.txt");* ]9 E0 \' @5 _" N. ]+ I& W
  739.           dwStartUpSteps=3;4 ^. E: T" \& P* K
  740.         }
    & C7 P" |! J+ y0 B' d# |, E' S( J
  741.       }
    + T3 O* p/ o7 c1 T! O
  742.       break;
    * A# U) O$ y+ f" M7 h3 L+ I2 y& U' ^
  743.     case 3:  [+ O0 l! w2 `# [; K
  744.       if(!Dn.Connected())
    3 L- z5 O' ^- \) O$ o0 _7 M2 @
  745.       {1 t+ r8 B% j$ p( M8 h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 q( W' {9 p7 K
  747.         dwTotalFiles=1;3 B7 `; x4 n0 P
  748.         dwDownLoaded=0;6 z+ _) ~+ b! f& k0 A1 K
  749.         bSilentStep=TRUE;
    4 D8 p9 u: q$ I+ W4 b9 t3 z4 I, s
  750.         bCompressed=FALSE;
    * E! @+ ~; V* q1 ]
  751.         strExtLocal.Empty();
    ) o7 U$ d' e( G! q
  752.         strFullName="checkversion.txt";
    0 e& u+ h4 G% K
  753.         dwProgramState=AP_CONNECT;2 @6 t6 A' r3 ^5 u8 {% f! i
  754.       }/ Y% T; e8 L. F! i- l& N
  755.       dwStartUpSteps=4;
    ( F3 G6 z3 v# }, X! z% F: U! v
  756.       break;
    " I4 `  P4 A7 {
  757.     case 4:4 m* n; X& M! P, }6 D1 A
  758.       {
    ( n7 ^- C, I; j4 t! |0 S
  759.         FILE *fp;
    1 O8 k! I* D6 H! P* D. R
  760.         char szString1[128];
    9 _% V. t2 Q8 a9 C
  761.         char szString2[128];+ V% q% B. B' S# X( l1 ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 D  R, S( l* U
  763.         if(fp)
    + y* H: Z% l/ A
  764.         {( t# u- d; h& p/ G* z
  765.           fscanf(fp,"%s",szString1);7 s! q. _+ |" G% u, J
  766.           fclose(fp);
    ; C0 F/ g' W  f% y
  767.           fCheckVersion=atof(szString1);
    4 u5 P% t- F" m* ^
  768.           fp=fopen(".\\checkversion.dat","r");
    6 R/ i/ G; b* \5 u4 K0 d$ f( v
  769.           if(fp)
    # v8 P4 E& ~9 l) W
  770.           {
    + H! g6 ]; L# |6 L+ p
  771.             fscanf(fp,"%s",szString2);
    2 a. I2 S8 W& \4 x) e3 ]
  772.             fclose(fp);
    ( L  A% C! V. y1 k# q9 `/ h
  773.             if(atof(szString1)!=atof(szString2))& H6 }7 B% C5 O; Q) x
  774.             {" j% G* P3 _  c% b) [
  775.               if(!Dn.Connected())
    ' y+ g6 a6 r+ h( K, A7 m* s* ?
  776.               {
    3 ]2 M* M4 g5 c& q0 X! i
  777.                 bFirstUpdate=TRUE;
    7 [% F. ^7 K7 [4 V, }' a
  778.                 dwTotalFiles=1;
    0 L) X; q& A& b, c6 Q
  779.                 dwDownLoaded=0;
    2 h: i( ^" P& @+ z: o4 w
  780.                 bSilentStep=FALSE;
    ) x8 L" o5 `' z  |+ F/ |4 o+ E
  781.                 bCompressed=TRUE;. n+ o8 T2 L( k, m- |7 @( X
  782.                 strExtLocal=".\\DownLoad\";
    2 A. z3 n/ K/ R6 X. R3 }& @1 {( v
  783.                 strFullName="update.txt";. K% _( ^! I( A1 s1 h4 D) q
  784.                 dwProgramState=AP_CONNECT;
    ( x3 r  \! K3 k+ _  ^$ C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 {- ~/ ?: x4 d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& c; e) l8 @! F0 Y, m6 z- ]! ?* O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + K. f" a* Z3 o& b# `) M3 u5 y! s
  788. : c# E4 F/ x1 @4 j7 D" Y% z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 T* [1 R# U& h& x
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 ^2 s7 K7 d3 B0 q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# G4 I* N' \2 P& l7 {# i
  792.                 {
    ! {" c/ n. b1 I3 D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    9 h% P9 A4 b4 h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' Y  N0 h- a" V( X' R. c, z) Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 t7 O) Z9 _+ K5 z! q: y% p3 F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 K/ @" H7 r1 F& j, W4 i$ y- ^

  797. : `. b( @' G9 _! K2 Z- r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 a5 c0 G5 ^6 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % {5 }" K2 ?2 U0 B
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 t  L) h" p* a& i/ J9 z- K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 O/ T/ w8 P& L* d, S7 v
  802.                 }0 Q8 Y; t' Q" G6 m' z  r9 r
  803.                 dwStartUpSteps=5;0 U6 m; V0 A7 e8 g" ~8 |
  804.               }$ w- W% B) r  ~2 ~
  805.             }1 M9 a; q" t, X$ J! b$ w4 Y
  806.             else/ }( x5 Y7 i/ P' f$ h6 m% h6 N9 [* l
  807.             {8 K% r6 P2 K' k' w0 ~
  808.               unlink(".\\DownLoad\\checkversion.txt");4 D: H* R: G1 z- W. ?" M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 v7 v& d' A$ `; t, U9 d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) `6 q) ]* v1 G0 ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- \2 C) @4 D& ]7 K0 B5 R" p

  812. % {- u' k7 z6 R4 Z, _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . p4 H( P' [( m" z; l5 }8 g2 _
  814.               dwStartUpSteps=99;
      J5 ]9 _3 E3 v+ A
  815.               bFinishUpdated=TRUE;8 a$ V9 j: \# b; D) Y9 L1 U
  816.               bCanUpdate=TRUE;% F. P4 w: K6 g+ F8 Z* e+ X* r
  817.             }
    2 g. l' {4 O/ j; k3 L
  818.           }8 ^6 J7 N0 {. s; `! a  i
  819.           else9 E0 `- i- k) p* V
  820.           {  E7 e/ L4 P; Q4 w
  821.             if(!Dn.Connected())
    5 A( F. D; b( Z- h& g- t0 {: j! {
  822.             {
    - e) l0 E2 V' i1 d) {* X+ x1 C
  823.               bFirstUpdate=TRUE;
    $ q. }$ u  h. t2 A8 Y: h, }2 ]
  824.               dwTotalFiles=1;
    , T0 I% \  Z% L: ?& ]. I
  825.               dwDownLoaded=0;9 p# M9 \- y) t$ ^
  826.               bSilentStep=FALSE;. }4 {, I) f. k. f: k3 Q. o
  827.               bCompressed=TRUE;
    % `% l& x( [! P' b' }8 a+ Z
  828.               strExtLocal=".\\DownLoad\";1 v; P2 {, O2 R' k# W+ B# O1 P
  829.               strFullName="update.txt";
    0 e2 Q) S/ O0 h4 A& Z1 U
  830.               dwProgramState=AP_CONNECT;5 c8 b# V& Y: S" l3 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! r3 ^& Z: T7 u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* O0 n; C. U  L6 d9 `1 q( v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" z( C, b0 H) u$ b
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* p2 N6 T$ _/ f& E
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 S; w- q1 F% U* v% ~2 e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ s4 o: G* Y8 x% H# n& A* R1 c
  837.               {
    - B  n0 D5 ]/ W2 N  S) Z" T; ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; z* b. S8 H- _  w& R7 D4 ~; r& E1 }3 g
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 n- ?* D, }1 _: D) {+ ?# ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( a$ n; d. U- \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Z, r0 h, c( n. B  F8 [
  842.                
    0 I7 Y' S# g* a
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 I- F; O6 w4 J: y: {2 \; k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ r! r- g% N! O! R( T* \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ m( p' @9 r7 H) a, }  f7 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % A, f* {6 B: H! X4 W/ i
  847.               }
    / }9 w( s6 C7 r( ?: J0 t
  848.               dwStartUpSteps=5;
    ( e5 y/ G" u7 a; A% r
  849.             }
    " h3 [) ]! m" {* z# P+ I
  850.           }
    : E$ y- e0 N7 B$ v9 C. _9 J
  851.         }
    ; \# ~* t$ D: t: u8 y2 S0 S
  852.         else
    3 D3 Z. g$ M, J: X$ {+ c2 v  o: q6 [
  853.         {: ]5 o3 F  \1 P3 _/ m: F8 v
  854.           dwStartUpSteps=3;+ ]! B4 P' ]9 K' d" N6 \7 I
  855.         }7 w# F- y$ q; v# ]2 y6 v/ A: m
  856.       }+ Z$ ]! m. m/ ?5 d6 x( K
  857.       break;
    : h% a/ T' R2 g. W$ ]' w
  858.     case 5:
    . v% F  r* k# U
  859.       {
    $ ]7 C6 ^" ^1 K- P. @8 j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % B0 X; A( m/ L7 @
  861.         {
    - |" i7 a3 I- e* o% {0 q: {7 N( l
  862.           int opt_overwrite=1;
    ) G) G& H, ~4 _. M0 U
  863.           int opt_do_extract_withoutpath=0;
    4 c. U% Q( m0 T0 ?* g/ L
  864.           unzFile uf=NULL;
    1 r6 ]9 [% S1 W& B8 _

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

/ y! ^! \/ a' h# V  R) k( S7 l( j; N5 U

評分

參與人數 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, 2025-11-22 11:01

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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