CSUpdate.exe源代码

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

- U, D6 ^: p  ~0 {' j3 o  A
  1. / RevApp.cpp : Defines the class behaviors for the application.! {7 i7 ?9 B1 d8 Z8 _! d
  2. //
    , l1 }4 h1 p3 J1 T+ `+ |/ m
  3. # Z& K# M2 C- N/ K
  4. #include "stdafx.h"
      W  h* A* A9 q! d5 h8 b) k

  5. 2 t4 Y0 `: x9 o% k
  6. //#define UNICODE
    % X9 ^4 @' B- u9 n/ R; q
  7. //#include <gdiplus.h>
      E) C& n, g$ @1 v
  8. //using namespace Gdiplus;- e# y3 ?( }% l( s3 m# q1 P

  9. ; _+ a9 Q# J! Q4 f8 {
  10. #include "RevApp.h"9 h3 E3 z1 W" n
  11. #include "RevAppDlg.h"# B6 y; V0 e& m& T

  12. 7 s3 y' b, h+ M# q! y5 D; ]
  13. #pragma warning(disable:4786)$ |* o3 h$ m# V, `3 s+ H* o, Y$ x
  14. #include <map>! D7 [0 ^4 s7 a, v' l' k/ x; A
  15. #include <list>1 f0 Y+ y4 t5 F$ [: O" A6 w/ _
  16. #include <direct.h>
      n9 ]5 o! I7 l7 a9 P
  17. - U0 F! S& }3 i
  18. #ifdef _DEBUG) v" N9 S1 ~6 g* q5 e# |
  19. #define new DEBUG_NEW) y6 Q# ^1 }; L( H: o
  20. #undef THIS_FILE
      `5 ~) H2 u, P) V2 [' E* H2 X
  21. static char THIS_FILE[] = __FILE__;
    - g* r; t5 K3 q( t2 C
  22. #endif5 V4 J+ [* X8 s: m
  23. #include "SkinResDef.h"  y" m" b& y7 K
  24. #include "ChangeBG.h"0 B5 y8 R) [9 E$ c5 [
  25. #include "AFXINET.H"
      U1 J/ Y! J" a( j5 u6 X4 |

  26. 9 n% b1 s  d( @5 m+ `1 s4 K
  27. #define TRADITIONAL_CHINESE 0
    " h; r3 }2 d9 |( E
  28. #define SIMPLIFY_CHINESE 1
    # ~! G( ~- v0 a9 p
  29. #define ENGLISH 2% n5 A: T9 E) N7 K% e% L
  30. int m_iLanguage = ENGLISH;
    : E! l2 p, F: M7 J4 u* a( A5 a
  31. /////////////////////////////////////////////////////////////////////////////
    * l  D  D/ {% v) v. ?2 Y
  32. // CRevAppApp* [  R" u0 @5 B$ H( A7 P; n
  33. ) ~# s' y  F4 ?8 l% v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* Q  U7 A- ?! W3 n$ q
  35.         //{{AFX_MSG_MAP(CRevAppApp)& k' d# a* P& v* e1 ]! X
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. n0 F1 `- V5 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& b" p% g5 |2 v/ V$ j3 i3 }
  38.         //}}AFX_MSG8 }. U4 |3 V5 u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 f7 E3 }4 A9 G* M+ K& r, ~$ B
  40. END_MESSAGE_MAP()
    6 g: {2 L/ R5 ~4 Y. [; V
  41. - g8 I* `$ K  q" W" Q# q; E
  42. /////////////////////////////////////////////////////////////////////////////% N* W; @$ J# m9 C( l# I% T
  43. // CRevAppApp construction
    - n% c1 K& e5 [' q, ~
  44. ' Q/ }2 O8 K' ~* T
  45. CRevAppApp::CRevAppApp()) @$ c% Q8 M- a6 \1 V$ [5 S
  46. {
    : O- k" e* w: R
  47.         // TODO: add construction code here,% r/ \+ n( X9 }  X8 k) r
  48.         // Place all significant initialization in InitInstance6 q5 }; R7 R6 U3 B4 `
  49.   bDisplayIsBig5=FALSE;
    5 K  j6 U7 u. g% C# m
  50.   bRestartUpdater=FALSE;8 [# Q6 x7 M$ d0 y+ e# }7 R0 L" i: Q
  51.   bFinishUpdated=FALSE;
    5 j, G7 g& U" a! A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 R, p0 Y! U8 d# N: Y9 e
  53.   InitChangeDataBig52GBKS();
    / ~  q! G( [* D; W% B$ N& K8 @
  54.   InitChangeDataGBKS2Big5();) u# e" {8 H% w; K! L: y1 K6 s
  55.         //
    $ u2 K* \4 ]* a3 k: H# K" |
  56.         bClickRunExe = FALSE;
    1 b2 t$ L( v4 J1 m0 k6 J& p- @
  57.         //
    8 G3 j8 }  G* f# h# I& ?6 l" Q
  58. }: z7 B, Z5 \6 s! l

  59. 8 S+ I8 B6 M% A3 h+ K& M
  60. CRevAppApp::~CRevAppApp()
    : u+ t- m) H3 x- v' X
  61. {
    ! A. q: w1 O7 k* h( O
  62.         // TODO: add construction code here,
    # W5 x/ E. Q( Y5 p/ V9 A
  63.         // Place all significant initialization in InitInstance6 `+ N  e( q7 ]4 f
  64.   EndChangeData();
    2 i( i5 ~) W( f% B
  65. }! z: }+ L' s& `3 }% w. d
  66. 7 y. x, a; c: F, J
  67. /////////////////////////////////////////////////////////////////////////////
    6 O* g8 C& d) L  u6 S6 Z: s8 x
  68. // The one and only CRevAppApp object
    , g% W+ r' ~1 n& y9 x8 D4 j, @

  69. / y. [) |0 y8 }: Q, d
  70. CRevAppApp theApp;" J- t, Z/ `$ D" F0 e
  71. 8 F/ \2 I9 t0 {0 V4 y- U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; M& k) u( s2 w( \7 N5 V" `
  73. {! K- B: s# n) n( \& M1 {
  74.   int iEOF=0;# v  P+ q  A7 \# [
  75.   char szTempName[MAX_PATH];
    ; y( w$ y9 Y9 n3 u, Y
  76.   *szFileName=0;7 Y/ l4 [2 b- l9 {( I4 Y4 s
  77.   iEOF=fscanf(fp,"%s",szTempName);8 K2 Q+ }* L6 a: @6 B2 b4 g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 Q1 [! K" W! @5 @0 ~. y3 c9 i
  79.   {
    2 x2 d2 C9 R  F; C6 a
  80.     strcpy(szFileName,&szTempName[1]);" m! f: R) Z2 l- {& A3 P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 A4 M: g- Q6 c' ^4 m
  82.     {
    $ }# F9 D( B% f: f2 M9 }
  83.       iEOF=fscanf(fp,"%s",szTempName);( n* b  G! W& Q0 p4 x
  84.       strcat(szFileName," ");  o, v* Z- q. m: i  b
  85.       strcat(szFileName,szTempName);. w% ~6 A/ `0 k1 N
  86.     }
    3 T& Q( _8 S0 m' A$ `- b, L# L
  87.     if(strlen(szFileName)>=1)
    2 _9 U9 H% E! s8 t3 F
  88.     {3 d4 ^7 s, ^3 G1 H
  89.       szFileName[strlen(szFileName)-1]=0;0 f& @$ ^. M3 E) y4 U' C
  90.     }
    - C3 n2 K+ Q5 f' Y. V
  91.   }, e* V% ]! i5 F! b" r0 M/ c2 l; ?
  92.   return szFileName;% n1 X* w, v+ X4 d# B
  93. }
    2 C2 j1 J3 E8 T

  94. 2 |  h3 V3 W; X. z9 Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      o# {! Z3 Z# \0 q; y5 b
  96. {
    & w6 P4 p) n3 J, n# J% O" P
  97.   FILE *fp;2 E0 ]- }8 Z" a' c$ G
  98.   char *key=NULL;6 f0 J! ]) O  M0 v6 z, h2 u
  99.   char version[MAX_PATH];
    " V9 }7 K. [. p  ?: K
  100.   LPUPDATEFILE file,olds;: a8 V; ?9 B8 x8 w. Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 {- S) A3 g+ e5 \) t9 }
  102. % e0 L& K' F. I
  103.   UpdateList.clear();
    ( z) Q+ \( L; k# ?6 |+ W
  104.   UpdateFile.clear();
    " d: i( O8 b- ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    * K' q0 W# A. R% A
  106.   if(!(fp=fopen(filename,"r"))) return false;' |% J9 c( `& U
  107.   fscanf(fp,"%s",version);
    + C9 m& K$ S6 |& X$ Z% g0 Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }; B7 G, u- i- M: @$ Y; s& ~
  109.   while(fscanf(fp,"%s",version)!=EOF)! t: S+ M+ E, H7 i4 r, M
  110.   {; \# F0 P) b! V8 H$ ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- X9 `$ k; I7 ?: v+ q8 b" _
  112.     fscanf(fp,"%s",file->path);
    + V4 J, [& B. C8 _2 z
  113.     ReadFileNames(fp,file->file);* d# h' V2 U4 z- p9 G
  114.     strcpy(file->full,".");6 r- j' S1 ^1 M: _" I* r- E) I
  115.     strcat(file->full,file->path);
    6 R, w3 C' F6 \3 X+ R1 M
  116.     strcat(file->full,file->file);
    ' {: {' z. T7 G6 l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); Q# \2 ]4 E$ p0 j; X1 J& l8 p
  118.     {
    7 A4 |7 F5 y" A0 e7 F' I
  119.       file->vers=(float)atof(version);* t5 w& T4 O% M7 c0 _2 @
  120.       UpdateList.push_back(file->full);. P# y4 p! h* O  B8 C# ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) H5 B. J8 K! d" m8 }/ P! S
  122.     }
    2 A" `7 H! E, s) a2 s
  123.     else
    ( I* S) l4 k8 C: p0 B# |. {
  124.     {3 n. {2 d% ~. ^: w) y8 C
  125.       olds=(*p).second;
    0 \; w& Y1 d) y7 y* s
  126.       if(olds->vers<(float)atof(version)); Y# {/ n: W6 p3 `" ]
  127.       {
    & T& Y8 y+ k0 T" H5 D
  128.         olds->vers=(float)atof(version);
    * Z$ X0 q; I& v7 Z" Z
  129.       }, E$ W' ~3 z5 p' M9 G
  130.       free(file);# A! v8 k( A; W
  131.     }1 q, a1 q) G4 ?
  132.   }8 m+ k! ]2 z& U" C3 P
  133.   fclose(fp);. v, ?. Q+ F1 \4 k2 o5 o+ c; C( i
  134.   return true;
      N% {. X+ x/ ^8 Y* }; Z& D0 ^
  135. }
    4 h$ u$ r  S7 p/ ~

  136. $ Z" H3 ~" |/ l6 R" p: D' s1 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( }2 l) [* L- ?; S- A- E! _- d
  138. {
    . ^( p5 j1 o2 z! q9 I
  139.   TCHAR  szFull[MAX_PATH];- t$ Q5 u: [! k& t+ D6 d. ]% l) s
  140.   TCHAR *token,*inter;
    1 K7 }5 H! K, t+ D
  141.   *szPath=0;0 M( q1 r, u( K- E  h3 y- c5 [
  142.   strcpy(szFull,szFullPath);! W: P# U8 w% f# L5 i/ `6 n. F
  143.   token=strtok(szFull,"\\/");) Q: F4 z% k: J) w' q4 T% e5 E/ p
  144.   inter=token;) y& _4 J' ?9 o0 o+ ]7 [
  145.   while(token=strtok(NULL,"\\/"))/ z& }- A, C& |( y
  146.   {
    " c3 d0 i+ }8 e6 w* m& L
  147.     strcat(szPath,inter);% g9 [" Z: g. s' {8 ]
  148.     strcat(szPath,"\");
    & P( @+ \! E( S- j% o% q0 q
  149.     inter=token;
    1 r6 r* F4 @) T0 B: G( {% b
  150.   }; }9 `/ F1 y3 ~4 ~. y
  151.   return strlen(szPath);
    9 V* a7 H& s/ P& ]1 Q) Q2 S6 a/ }
  152. }
    9 t0 h' R2 q; K' p; d0 b" i! T
  153. ' i) g, u( m0 k" f! `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); M- Q, G8 m! S5 j5 e$ q
  155. {0 a  r4 P) h( h4 U1 d- i/ H; Y
  156.   DWORD attrib=GetFileAttributes(Target);. b- i0 R) F  h6 Z: u
  157.   if(attrib!=-1)
    ) T- A9 S5 \* y% @5 i; X
  158.   {
    * D7 c0 l" |8 D+ J' s+ ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " y2 H) u$ {9 c# }+ q; ~
  160.     {
    0 W/ c  c: S6 }9 ~' L, g4 P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / `/ C$ B" R! k! x* [- g( C
  162.       SetFileAttributes(Target,attrib);
    % h. G" \" ~9 j+ R: `& F' C
  163.     }, {8 h  C+ G/ H4 y4 U
  164.   }% @+ c1 w* S+ P( v, b' g+ w
  165.   CopyFile(Source,Target,Erase);, K8 x3 S- B2 i9 Z5 w2 B
  166. }" F9 M; a& V) _6 r% Q! C- Z# {
  167. . M  ]- I$ t: t
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . G$ A* Y$ D2 N2 ~4 l% ~
  169. {
    . [6 J3 ~: x" \. G- M8 o0 O3 |' N! r2 H+ |
  170.      FILE *fp;
    8 a) h- o) h# E: L
  171.      char  szBuffer[8192];; R) @: X; V$ N. }1 Z$ j+ r, G
  172.   va_list  argptr;
    ; n( Y3 v4 W, c0 }# P
  173. 1 M0 N  \. m* ?" D" z
  174.         va_start(argptr,message);1 q7 Q& U2 O* L( ?
  175.         vsprintf(szBuffer,message,argptr);
    ( F8 v5 Y) L& Q! T8 g
  176.         va_end(argptr);, {1 t5 |4 F; K0 N6 p$ f. r
  177.   fp=fopen(FileName,"a");
    - c5 }% y$ N. l6 R6 |9 A# x
  178.   if(fp)
    ; w7 q/ o9 e5 l% V( n  W
  179.   {
    - [( y7 t! z8 `1 A' h* M
  180.     fprintf(fp,szBuffer);
    8 D+ E6 g) j7 p. z+ {* Z' m
  181.     fclose(fp);
    0 t. B1 _/ W5 u
  182.           _flushall();8 H8 M/ C% x  x) _& R& R6 E, _
  183.   }
    4 u# p& w5 e5 Q2 a9 L- R& F
  184. }! P0 z% s' h" i+ F
  185. " V6 v+ j3 }0 b& W& r
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " y- X! n' J- ^. ~- R/ n
  187. {. }7 o, L$ y) N& i; b
  188.      FILE *fp;
    8 b8 ^% Y1 P' w0 \
  189.     DWORD  attrib;
    8 ]- W8 c7 M+ g$ N1 L9 \
  190.   attrib=GetFileAttributes(FileName);4 S, i6 j( @$ |) t2 [! ?; U5 p9 {
  191.   if(attrib!=-1)
    . C" D; o" j: V5 Y, L
  192.   {" i: {. d3 c; _5 Y4 k- p, p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 N/ X+ M' q% f' X
  194.     if(!SetFileAttributes(FileName,attrib))0 s3 s, [# y! G# |) T
  195.     {! A% {% x& i, Q7 I1 q
  196.       return FALSE;
    1 W0 ]% K$ g* V$ i6 V
  197.     }
    4 U( q! ?1 W$ z3 ~; C
  198.   }: w3 f2 g; K" N( w  `' e
  199.   fp=fopen(FileName,"wb");
    ( S: l  X! h6 {% [$ K
  200.   if(fp)( V3 A' V* x9 ^* {5 i
  201.   {/ \. Z* h8 ~: C5 w
  202.     fclose(fp);2 }0 C5 q! y$ W" @0 X1 H$ d
  203.   }8 c* R( H6 U' _3 m# |+ v
  204.   return TRUE;
    / \- D5 G- V; T+ X! q  ~
  205. }
    5 p0 A2 Q6 V$ v3 m/ ^

  206. ' _3 Y9 c& V4 d4 M. D( I
  207. BOOL CRevAppApp::UpdateLocalVersion(void); N5 r* ]5 X1 a
  208. {( D$ r. m, i2 ], R; k
  209.   char filename[MAX_PATH];
    6 V9 F0 j: T. s/ p3 u
  210.   LPUPDATEFILE file,olds;
    5 {  f* r- ]0 P, D1 E* p
  211.   std::map<int,CString>::iterator i;
    8 M+ `' s% q4 E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # V( O$ l0 Z6 b: |  e
  213.   std::list<CString>::iterator l;
    6 R4 c) s9 \4 g2 v, S$ }  q) y

  214. ! G* |+ o2 U$ b$ x, T. q1 L3 G
  215.   if(bFirstUpdate)! M5 h: _5 f: f' V3 C6 k
  216.   {; o5 Y7 ~. ]; e: T6 q  @3 i4 j
  217.     dwCurrFile=0;  {, L+ a) x* ?+ A% U
  218.     bFirstUpdate=FALSE;4 x  c/ K+ `$ H( K  b
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). O8 z9 G8 s5 w# N( w. |- @
  220.     {
    7 H2 C7 a% O$ O, z# \8 V
  221.       dwTotalFiles=UpdateLocal.size();
    # C3 Z6 B7 D+ q0 G' D* L( Y
  222.       dwDownLoaded=0;
    . V( }7 s6 u; P" @! X# a' ^7 G
  223.       bSilentStep=FALSE;6 Z; v2 Z! m  l; `9 X( f5 w8 E+ x8 E
  224.       bCompressed=TRUE;8 V) R7 |7 i: D6 y& x
  225.       strExtLocal.Empty();
    $ E" p0 b6 p. B) K0 q2 p' t, L
  226.       strFullName=(*i).second;
    # R3 |& z( j. |7 d5 I
  227.       dwProgramState=AP_CONNECT;
    8 ~; u! C( W9 S2 s
  228.       return TRUE;
    . M5 R! I3 b  y  R" ?: U  A
  229.     }
    " H/ a( b) |  w* J+ ]' d2 g" R
  230.   }
    + B- a, y2 H7 R$ W. ~/ D% E
  231.   else if(bRestartUpdater==FALSE)) Q3 W% {: P; C% g
  232.   {
    1 i# `9 ^: {' E: v% D; x' ^6 F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " J9 E- p) D. O7 X, r) `! e
  234.     {
    : ?, s% a' O4 D1 T4 \) \) k* N
  235.       file=(*p).second;
    6 ?2 g0 |( {6 {, z* ]: R/ u7 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 b0 [7 A# G0 D1 H6 N
  237.       {
    / \1 ~& ^; h- l6 q9 A! w7 Y* z
  238.         olds=(*p).second;: ?% Z6 _' h  i4 I2 O7 a, c& Q: l
  239.         olds->vers=file->vers;5 M8 W3 j& `5 h- V3 x( e
  240.       }: r1 K5 {+ [: j" j
  241.       else
    2 O  \# M, Y9 t. c& D
  242.       {  J: R) n2 }2 V5 L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: m. U! Z: v8 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; }$ M. t. W3 ^$ m
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 p8 x+ W1 C* z' N! `5 z1 b
  246.       }( d) o, }' V; _8 S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 \( S) t/ q, ~& @/ j
  248.       sprintf(filename,"(%s)",file->file);
    9 [2 T; p( B3 W0 t- B0 [2 ?% F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 q: T& t8 n% ^! \0 i, s
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : ^. K, D1 b' n! [& f; @
  251.     }
      W5 d1 E5 q1 F- v" X( Q7 h
  252.     dwCurrFile++;. N, p' b# |1 \' W8 Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* z$ E8 K' _& V2 h; o) c* r
  254.     {
    7 y: C- P( L1 R, o! f8 e- ]/ o
  255.       bSilentStep=FALSE;2 C: s% E& s. {4 m( V
  256.       bCompressed=TRUE;/ ?' O; g: {% ?! B" r" {
  257.       strExtLocal.Empty();
    4 Q. _  z1 |6 k- s9 `: ~
  258.       strFullName=(*i).second;
    ; d6 g& t# d# `% \7 q( q
  259.       dwProgramState=AP_CONNECT;
    3 ^8 D. ^; \% z0 p# |+ V7 N
  260.       return TRUE;
    3 X# _2 R# `2 P% Q
  261.     }  _) I7 b( B& p. X3 T" \5 z
  262.     if(!bRestartUpdater)& y1 D' n+ i, H, I
  263.     {
    7 m: M, Y) n2 w
  264.       int iCurrSize,iFileSize;
    6 O; |/ Z: T  |4 g! E
  265.       iCurrSize=0;
    # I, _: J: s* q9 p/ M5 y
  266.       iFileSize=UpdateList2.size();
    2 r( B+ L. w" ?+ [, y/ n0 n! W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ) k) U) y1 f* w' x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' G9 B  [9 e3 y9 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : {' d5 V& W# K6 ]) H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ E1 }6 ^6 U# {9 X, l
  271.       Fclearf(".\\update.dat");
    : T# q& ?; g% o. G6 k7 k! s
  272.       Fprintf(".\\update.dat","Bloodyf\n");% o# Q- e- m+ p; X9 Z8 k+ g' Y1 t, t) S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ I7 Y& Q9 [9 T( O$ P8 K4 B
  274.       {/ S, G& D& S# c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % A6 H! u, I4 X+ ]
  276.         {( ]7 \# X0 i; _: o9 m/ `
  277.           file=(*p).second;* `- M* `" J. Z8 {! e7 T
  278.           sprintf(filename,"(%s)",file->file);$ f) _0 [2 e) }" p2 I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 ~& b1 ~  W0 b5 k: _, {
  280.           iCurrSize++;: z! Q# z; N) P7 \$ j
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 u& s* y! t. A0 M
  282.         }' n8 @8 I% {3 W0 I
  283.       }/ y7 T5 A- k. S  b. f" S, D/ Q
  284.       unlink(".\\update.txt");" R% H: S+ _& @4 G8 e
  285.       unlink(".\\update.tmp");7 U( f5 s, Q8 m9 C9 i+ [
  286.       Fclearf(".\\checkversion.dat");- g  P7 @- }( ^# v3 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 r- Q5 ?' M$ I7 Q. E
  288.       if(UpdateLocal.size())7 K7 w/ {" V+ q  Q7 t
  289.       {
    & A( b3 o- u: k( R2 {
  290.         UpdateLocal.clear();+ V/ q9 T- b! C0 g2 x) ]
  291.       }
    8 B1 q" [0 K4 w6 i  q
  292.       if(UpdateFile3.size())
    ! l5 ]9 k1 b' c$ }7 U3 V
  293.       {4 W! w2 \' G+ U, ^$ Y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " T1 ~4 A+ x$ m0 o9 ~6 v# p
  295.         {
    ( T+ [* X% U( ~5 l  o. @3 v0 q# _
  296.           file=(*p).second;  K3 Y  r& k! R+ }
  297.           free(file);
    ' M4 ]- I( d- w2 e( E' ]+ W
  298.         }
      L' A- V+ O! E0 r( ^3 |2 Y) |
  299.         UpdateFile3.clear();% \3 m" P" q% a$ y- a( J! [
  300.         UpdateList3.clear();
    " _, q4 U) i" b
  301.       }
    % Z2 r# j5 o, J/ ~7 x
  302.       if(UpdateFile2.size())4 r- s# U2 {6 L
  303.       {
    * @9 m+ ?( H' ~- y# w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ H, d! A8 ^' n+ V  c: Q
  305.         {
    & ?8 O% f9 y; s% Y6 p# t+ L
  306.           file=(*p).second;
    ' g/ M4 `7 M7 I6 C  g* W# j, s! _
  307.           free(file);; s6 ?3 y- x2 d
  308.         }
    4 S- N# r* _! L# L  h- n
  309.         UpdateFile2.clear();4 q, \, O, ]4 F) W* x
  310.         UpdateList2.clear();
    , |4 X5 P& u2 [9 [1 v
  311.       }# u, J- b  Q1 ], {) b6 U  l1 d
  312.       if(UpdateFile1.size())
    0 c" }7 s) M, v# l: \- k! l3 a
  313.       {; J1 }1 Z5 Y% g2 n0 Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : V' F. \% p, {& X# I9 X
  315.         {
    ) J6 Y# e- t/ e& I+ x! s
  316.           file=(*p).second;- \+ `: l% [/ F9 q% H8 h8 T+ ?; p6 L
  317.           free(file);
    & T& x8 d" y8 ^% M1 z8 Y! C
  318.         }6 N7 [1 o1 B" B' U" K
  319.         UpdateFile1.clear();
    / T  l( Z% e  `( \5 L7 y
  320.         UpdateList1.clear();2 O/ ~4 B# q0 _
  321.       }
    2 I! X2 J, C, n* q6 y2 ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & U1 j3 G3 A+ P5 ^  s; S' F
  323.     }* v& W% K3 f4 n8 ?
  324.   }9 ]: n7 m+ Z- [7 a, T. R
  325.   return FALSE;
    ' @" h6 Z4 A8 V2 t+ `
  326. }* W6 ^: [4 [5 V! w
  327. ) _4 u4 P# k) Q
  328. void CRevAppApp::ClearAll(void)
    ) d/ T+ c" w7 y* h: R1 K! R
  329. {
    5 z. i- K5 h+ A2 t6 r1 h
  330.   LPUPDATEFILE file;* W/ d! j0 z% c, d1 L% B9 O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 B3 D, `2 F4 I  |/ @
  332. : L2 A( X7 H4 F
  333.   if(UpdateLocal.size())
    6 ~7 [+ F8 M% S: U) o: n! ?
  334.   {, t4 o6 i5 [  x: V) W6 o0 G& M
  335.     UpdateLocal.clear();( t4 X  M0 e! R  {  I) h0 W9 j
  336.   }0 Y+ `9 e% x9 r' t! M& x
  337.   if(UpdateFile3.size())
    ' F! L- V' Z3 F& X) k) z
  338.   {
    % i6 N" X5 G; I/ V" j* t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). ]3 ]$ Q+ T+ N* a: v/ L9 u
  340.     {5 r) ?" T0 X# @' F1 l
  341.       file=(*p).second;
    7 \5 A  }& ?7 [* n
  342.       free(file);
    9 |; H: ?1 }" I9 }* t) \- J
  343.     }+ I0 A+ x; Z  D# o9 D4 S0 m
  344.     UpdateFile3.clear();3 K( `: z# s" ~( v. u
  345.     UpdateList3.clear();
    5 y" @' q% U& S! |# n
  346.   }- `9 g; A0 M& t7 f+ O' A" x
  347.   if(UpdateFile2.size())4 P& x9 Y4 D) a) X7 L( ~5 G
  348.   {
    ' k+ M3 @  x; b9 Y) j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 X5 p- U1 N% U' k6 C. I, g- s1 p
  350.     {
    1 s& M; K/ E4 K4 c& d' u! f$ h
  351.       file=(*p).second;. \- U9 y. F: c  [/ K
  352.       free(file);' ?& Q: |0 b: f* C- K# L9 ^  F
  353.     }% x$ W8 |  ^( p0 _( {( @# S
  354.     UpdateFile2.clear();
    1 X+ l% J+ v: E% _
  355.     UpdateList2.clear();- `9 ~% u  m9 j3 o. M1 }5 w/ U9 a3 O
  356.   }
    " K+ M+ v. ~+ ^
  357.   if(UpdateFile1.size())
    ! D5 j0 J8 A# J6 J  f3 R( o
  358.   {
    2 y! ~" l; q' `$ ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) M- _' k' N0 S9 j& X
  360.     {
    3 {! L1 m9 Z; i) c/ j7 A% W5 f7 l
  361.       file=(*p).second;
    % `9 e% p' d9 u& b, A
  362.       free(file);
    ' p% D2 W* r" R- W4 }
  363.     }) \; E- T  U- e( F: X
  364.     UpdateFile1.clear();
    3 e6 `4 n9 T2 s8 h$ _* Y2 s
  365.     UpdateList1.clear();4 k: R+ t/ j, q& t/ {6 _" a( s
  366.   }; L! @6 }. b) I
  367. }  
    ; J3 i9 A* }4 V$ z! t; H& {
  368.   
    0 q! W) {7 F' A0 }, ?2 b5 z1 I
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 `( i, J9 o: K  t# Z- l) |0 \
  370. {' `; ~% Y: G! j1 e. G% }" e/ C
  371.   int c;
    1 F  ~+ f& z. M( f
  372.   LPUPDATEFILE file1,file2;( K8 I  W  `7 R) x
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ ]6 q; G# ], g1 X3 i
  374.   std::list<CString>::iterator l;
    6 v) n6 ?: e8 c$ Y% ?

  375. 1 Z: z5 W1 a% Q2 B  N6 \
  376.   UpdateLocal.clear();! t* F' x, y! v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + m# V+ K9 D# \0 [6 K$ r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; T7 p4 ?  l. F0 H& P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ W$ M+ ^/ x, J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 |6 t4 j1 K' L7 c
  381.   if(UpdateFile3.size())
      F; T9 g2 l3 O7 W- s$ ?
  382.   {
    6 {: {: i$ R, m, C" v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 N" m4 F. Z4 F6 W
  384.     {
    4 v( Y3 E( D" K7 E
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 t: f; S( v4 S: p' t& F4 y' ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), Q  F! `0 Z7 r  _  @1 F0 m
  387.       {
    3 A" T  ?4 ~% b6 h: R+ P
  388.         file1=(LPUPDATEFILE)(*p).second;+ B% Q1 ^- p0 q9 H
  389.         file1->vers=file2->vers;
    + X7 ]! l) ~  q0 T
  390.       }( }$ i! k) q3 N8 D( O
  391.       else- v+ G. A+ L% n
  392.       {
    # U4 D; k# I/ y1 q) T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* m4 {$ S2 D  d# _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));5 j( E! D$ `; u1 n8 f6 f2 o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" y3 z4 u% U. H2 o0 _  K; I7 E
  396.       }9 B4 }  d+ }8 B6 t" K$ A( O
  397.     }
    2 j% H8 X% Q4 R8 }$ A& g' X
  398.   }" g0 T  E3 [4 o3 ^: {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& a6 E& G# n% i$ d( k$ b0 E
  400.   {
    . U  d6 Q7 q* m1 M( q# v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / t8 V1 Z) I6 I" F$ Y: Q
  402.     {" q  v: |6 N6 @% f" h
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) m7 B* S" h1 U4 `( o3 f4 j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / P" j, O7 t% O2 z8 H- ?5 E
  405.       {& {% y5 z% q2 W& _. K- w! y9 e
  406.         file1=(LPUPDATEFILE)(*p).second;+ e* @( B( y! T. n8 _, R) n
  407.         if(file1->vers!=file2->vers)7 u0 i! {) o7 T4 E% X
  408.         {
    6 ]4 M" V  p7 h* `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  q9 q5 @* J0 q, L9 q
  410.           c++;
    3 B' `) c" g1 V/ x8 F
  411.         }
    , N  T9 O: U3 {7 `" C
  412.       }
    8 i3 S% r- i# o! o" @; G% n2 ]
  413.       else' L9 K% @5 J. L# ]* w# F
  414.       {
    * G; i$ U: \) R$ l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ w( F9 s& K5 x5 p6 i, i& a" T
  416.         c++;
    ! M/ o" j1 p5 D7 L) v- j2 N
  417.       }9 L4 X% r2 N% C/ @7 B- \% a; B
  418.     }
    ! F4 Q  W3 M  h
  419.   }/ F+ o7 ^( c' k' h
  420.   unlink(".\\DownLoad\\update.txt");
    : Q  _5 f; I0 a1 @
  421.   if(UpdateLocal.size()) return TRUE;
    9 e2 a9 m  ~& ~
  422.   else                   return FALSE;' z2 _+ n4 \( l& W
  423. }7 p* ^+ ]" k# f# l1 t1 e

  424. ( M- I7 L5 {* Z- D) h& E; q8 C
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' C% [: a  x+ D  {* \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 ?4 j! V1 J# i
  427. 8 j7 K5 Q+ Z/ o* j

  428. 1 l- I% _& X5 V- r

  429. 8 z  B9 Y, S3 l1 ?! n4 _  {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 b0 T% ]6 P- h0 ~7 F
  431. {
    $ t& L7 V4 X8 ?' u- Z9 e3 M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    - x/ m1 G0 l% I4 t6 c" ?
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      w; e! n9 G  T6 @7 _! k! ~
  434.   {
    9 z' C$ m& a- p3 a+ _& D1 X6 x
  435.     char szLanguage[50];
    $ M* v3 Y6 J+ S- h, ~0 R0 Q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- b) j. t0 y9 q0 E2 v$ c; ?: {( G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; U7 q6 x$ c0 i- V+ t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 }! E- x; n$ e' {, j9 r; N
  439.     else                                   m_iLanguage=ENGLISH;/ H8 Y$ [+ R$ Q  m" T3 J
  440.     char szRegister[100];
    # \9 g% x3 d7 N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 r5 T$ |5 c+ {$ [3 b
  442.     strRegsName=szRegister;
    " y  F! E6 h& \! a6 v! Z$ B2 @3 t* o
  443.     char szPatchURL[100];. d, G0 w" ]1 D2 b" R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + f1 s7 G; F7 B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# o! h5 O9 Q2 Z$ _
  446.   }; r4 Z8 w2 @7 n7 w
  447.   else2 z8 J0 F9 t3 A9 f9 w% P7 F" e
  448.   {- p5 U1 _1 U5 u: l, X3 b+ u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' z; j, F1 u0 t8 z0 N8 s, A
  450.     strRegsName=DEFAULT_REG_URL;
    1 c" i1 r. }( U3 d2 D3 Q* F
  451.   }
    4 i4 }2 ]9 r$ M
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; ^% p, _# p; s& K. F- U
  453.   {
    3 ?* I1 I* x+ b* y0 P7 p
  454.     char szIP[50];0 V6 W/ a$ i% J3 {3 `. ]
  455.     char szDIR[300];' [( C' h3 X6 [7 P
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 y1 D/ C$ K7 Y" ]: Y) L
  457.     {
    - u% F$ |; U: V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 h! q/ j" j0 D" q1 y3 T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + a# Z0 J5 K: e+ o4 Q$ e
  460.       strHostName=szIP;0 F+ ]: Z% `/ n, I8 S+ K5 r2 m
  461.       strHostPath.Format("/%s",szDIR);# J* H' w8 K8 G. q& j1 s4 w1 s
  462.     }* c+ U) m) y' {  J/ g. U  V
  463.     else) f* t$ M6 P5 V3 q- L; ^- a; Z
  464.     {
    % W7 d: D# j) Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 N/ m% W" E" i0 P% R* J3 M8 q5 D0 G
  466.       {
    % ^( t, F( F& A3 `) p& Z+ {5 v
  467.         char szLanguage[50];
    7 u4 K" W* d: A$ l( c* n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 J! e2 ~1 y1 D3 Q' S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& [5 e$ q6 R$ K* x" f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ Y/ V: g3 Q1 b- t
  471.         else                                   m_iLanguage=ENGLISH;
    $ A2 G0 y0 G# s$ X) ]) I
  472.         char szRegister[100];+ P6 i+ d; ?! W" e: i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 s5 F( F8 x$ c; l
  474.         strRegsName=szRegister;
    * f# [, F$ v3 }8 D$ t
  475.         char szPatchURL[100];
    7 I) F+ j% [& B5 I5 K; T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( g4 G. m2 a+ W- b7 u+ o- s9 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 z) ], G& Z! O' f1 }. d* d: G& x
  478.       }
    , z- V5 J! C! b4 u$ J8 L
  479.       else
    1 H! y$ b$ m2 d$ }
  480.       {, P7 S8 ^8 G: I0 u$ H: y- B2 c9 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 g+ `( P  S% Z& Z7 a
  482.         strRegsName=DEFAULT_REG_URL;+ C4 ~  s6 N" h: v7 ^% J, X
  483.       }
    + H$ l2 @2 h* J3 ~" S3 z
  484.     }  z2 _9 {3 d! o# B: ]
  485.   }
    3 f8 q- t+ _+ A* v
  486.   return true;
    ! d/ e: k$ G( l5 w$ }5 _/ u; C
  487. }
    / f4 l8 o" u0 J+ E" @" m" w0 W
  488. # ^5 {2 ~( P" B  [" J7 m/ K
  489. #include ".\ZLib\unzip.h"
    / `# u/ f% ~. e7 o! \+ M# E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);* y+ |" }. E4 W
  491. /////////////////////////////////////////////////////////////////////////////$ [3 |5 Z1 V5 p
  492. // CRevAppApp initialization7 R8 z- p- l( g9 k( w
  493. . m( D$ q& ?: v! ^$ ]' T
  494. BOOL CRevAppApp::InitInstance()+ X( O  B( Q4 v6 z7 ]7 `
  495. {
    ( L5 a  x4 Y* c  b/ R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) B5 _0 G: a* a/ u5 e# L# ^+ m/ u
  497. # y. I: M! p  Y% U0 ]  k5 o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: C0 H2 M2 \7 U) G1 b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 u) z. ~/ }8 m* g
  500.   {* k0 T3 ^8 U4 @! q: j. @  v; H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 A. e* S" S% U" f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ C  H- K9 i  K) Y1 ]# ?6 p* t! R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) D0 i2 o9 ]4 k" l
  504.     {
    8 _' X: l$ d$ F7 @2 ~# \" O( I
  505.       strcpy(szPath,szPathTarget);
    ' ?. z$ E4 }  c& e6 o
  506.       SetCurrentDirectory(szPath);
    % V0 o6 @! g$ Z4 Z$ i
  507.     }6 v3 H& X) z* s. z" E1 ~
  508.   }
    ! [& i% d' T/ O. K. R) V3 i' H
  509. #ifdef _DEBUG
    5 t% e. B; n: V# u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ ?% }0 f( l4 _8 f8 R, _. z
  511. #else  a; g5 Q' r; s4 x$ Y5 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 Y0 d  q5 p7 t) O& _- J; T
  513. #endif
    % j& z! g3 ^  {- j; L
  514.   {
    + B" y/ M, s+ O" R8 }
  515.     char tempFileName[MAX_PATH];
      T! y, k; Q4 f3 z' n2 s9 z
  516.     strcpy(tempFileName,szPathSource);
    % g2 S! C3 z5 b- a9 a, t
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # Q7 Y" x- U' n) |' l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% I8 V1 h- l' m6 S& u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! G7 R) W2 m# g2 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 f4 r, H( P" N: j9 q) q8 f
  521.     return TRUE;
    5 i$ f. f+ B8 u
  522.   }/ `3 {1 a8 Z/ i0 q6 h
  523.   // Nuke 0118: Delete run.exe$ \0 i. l6 ?! o( _0 _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 F3 }/ S% _6 I$ ]2 ^5 _" U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " t/ ?" E  w% o9 N- W3 l! l
  526.   if(!ReadCfgFile("Config.ini"))
    . F4 T5 n: r& l1 H$ o, H4 k# a
  527.   {
    . Z+ S8 j* q5 U9 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - k! S7 `; U; Z9 H9 c5 V
  529.     return TRUE;* a, R, y- I# \, C, ]
  530.   }' _9 @  U8 P* r$ K4 C% {
  531.   HANDLE mutex;
    0 U* X' B4 |, z) l0 h" Z6 p4 Z! G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 c0 F; m5 G' w: d$ N( {
  533.   {
    $ @( T/ R; e. |/ E" U% |$ V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 q! J$ t. g( N2 U9 |) Q
  535.     {
    ; i! w& a; r: X% [) T5 n6 v$ x
  536.       CloseHandle(mutex);* [+ Z6 j& o) O( w( c3 X" P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. K% ^# f* i; r" z, h' O. E, ~
  538.       return TRUE;2 T9 j) O8 N- e% [
  539.     }
    5 K+ H  A# a! i2 Y' |* K
  540.   }  . N. @# V: W) o* a1 D( n! P
  541.   CloseHandle(mutex);( W* N  b- }( H# s6 ?) Z3 k# z

  542. 5 \7 P$ i  I- Y- @/ j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) c0 d$ M. v1 J

  544. 4 [0 j* e6 b0 \
  545.         AfxEnableControlContainer();. z, i1 W& @6 Z( _) n

  546. ! P, e; k' W% W- Q$ u( l( ?3 y
  547.   bCanUpdate=FALSE;# X) W' Z. g; h- w  Q) z
  548.   dwStartUpSteps=1;
    " j  h' A7 Z/ f
  549.   dwProgramState=AP_NOTHING;! F* i8 |1 U5 ~$ P' I& y! ^
  550. / {4 T0 l; p0 C8 S! n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ [3 Y' m6 p1 U
  552. & [; i5 f: j) x, {3 X# s
  553.         // Standard initialization1 f- s3 c- W0 _9 u  K: F/ a. |, N2 E* P
  554.         // If you are not using these features and wish to reduce the size  V6 G6 V7 u3 R+ V5 @- g3 u
  555.         //  of your final executable, you should remove from the following
    $ q0 \8 j! C0 @" ]$ I( _! |2 d
  556.         //  the specific initialization routines you do not need.: g5 w2 X1 Y# K0 C6 U  u

  557. 9 W1 G9 F2 {# F. k/ r
  558. #ifdef _AFXDLL/ J7 _& z; E* a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! N# S* H" d5 V7 w; X; F, b
  560. #else
    ' Y% Q- T( N- h& L2 R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 N! g. q2 s% k2 v
  562. #endif
    ; G; t' a1 K, f% ^3 p9 e

  563. 9 i* N- Q  ~2 U! }8 R9 O, K7 I
  564.   dlg=new CRevAppDlg;
    / \; S! v( O$ C9 H
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; l, n* P8 ]: a; e  W6 T* n- {
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) c7 a; y4 I4 m5 B. M: d
  567.   m_pMainWnd=dlg;# }) {; c( z  R) Q/ b
  568. 5 @/ x, U" `+ B3 i) c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 t' h7 A: e* ?. K7 l* _3 k; g
  570. ; H  \  ^7 G2 {& K! H3 G
  571. //  GdiplusStartupInput gdiplusStartupInput;) k( `- G) ]# Z4 @& |8 K/ x
  572. //  ULONG_PTR gdiplusToken;) e/ R% \; u& B. V
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' t8 X/ I- A+ H4 L% A
  574. 1 C4 c( k# v5 ^7 ~, y  L
  575. //        CRevAppDlg dlg;+ F: n2 y: y8 S2 ?: H
  576. //        int nResponse = dlg.DoModal();3 r0 I; L# O4 j  T8 C* I. M. B3 \
  577. //        if (nResponse == IDOK)6 b* U6 W. p6 `1 g
  578. //        {- c8 B( \5 k1 C! s8 r! u' h
  579. //                // TODO: Place code here to handle when the dialog is
    / s" b% E+ A( q3 B* ^" f: S! c
  580. //                //  dismissed with OK7 h" K; K9 H4 ?* U/ K, p8 g, u- {
  581. //        }
    1 [0 h  X* S  O1 |# Q3 g/ P7 K
  582. //        else if (nResponse == IDCANCEL); a& t% M! K: k9 t
  583. //        {3 I7 Q& K6 F' L) h$ n3 |" S
  584. //                // TODO: Place code here to handle when the dialog is
    3 y& ~" D0 i6 C
  585. //                //  dismissed with Cancel7 ?: |9 s3 g' {# R2 R
  586. //        }8 u0 |2 }( V# ]7 Z2 f3 X
  587. ; S+ d; V  G: ]& {/ R
  588.         // Since the dialog has been closed, return FALSE so that we exit the) G4 e5 c3 Q# m0 C
  589.         //  application, rather than start the application's message pump.
    4 r5 P) Z$ v1 V! {' i
  590.         return TRUE;7 i1 o; C; k1 a
  591. }
    3 K7 F, H4 r5 g/ z; k
  592. 1 e/ |+ L1 T4 p7 J. v! `
  593. char *CRevAppApp::strtok3(char *pSource,char *token), d8 G1 k+ w: e" ?( F
  594. {
    5 d* l) e3 y' f. B$ \, Q, G
  595.   int i;, {6 D) ?) O9 V* b4 W& L
  596.   char *szRet;# Z. h; I6 |. [( l5 h3 r
  597. 2 R; V: G( W0 y9 ~1 T9 s, k
  598.   if(pSource) { itoken=0; sztoken=pSource; }" M- E3 _7 N( g  `/ `* Z0 U( s
  599.   if(sztoken)) p  F. N0 ^8 H' _7 A
  600.   {
    . c0 u6 U3 O9 v2 R
  601.     szRet=&sztoken[itoken];
    4 g+ q) c* E  g4 U. C' Q% E
  602.     while(sztoken[itoken])
    1 \! O% O/ s6 Q; \1 B! y
  603.     {
    # C0 _6 D% M! b. }; }, |. {
  604.       for(i=0;i<(int)strlen(token);i++)
    7 B/ R5 \! E+ A3 X; i, D
  605.       {
    8 ~  V+ R$ p1 H1 I, E: j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ f5 c4 N; P) N, B, U6 S6 h
  607.         {
    ; U2 w6 h* ?, H8 ~% f  b
  608.           sztoken[itoken++]=0;; k7 `3 i8 w  x8 I" s6 e4 Q" J
  609.           sztoken[itoken++]=0;
    5 U/ ~( L1 \+ B9 ~
  610.           return szRet;% u  ?+ J3 D' q* n/ g6 a
  611.         }
    ! e6 ]8 i5 `4 X
  612.       }/ T6 n) q& w+ N4 p. S
  613.       itoken++;
    % z% ]( t+ T! Z2 e# g
  614.     }+ n' B2 [5 e; l+ _. E5 ]" W- H3 V
  615.   }! f9 ?4 g# d7 x) t4 t$ w
  616.   return NULL;
    * A# ~9 f1 T, F/ |8 E& j
  617. }. F6 a& l8 g3 D% m; u/ q( Y

  618. 6 Z2 T! i: D8 b7 n0 @+ @
  619. void ProcessProc(long Total,long Current)7 {; w2 e0 `4 V# p) q
  620. {- B0 k8 u5 \2 _8 g9 a" Q. g0 |
  621.         MSG msg;
    5 A! T) ^# B3 n- j$ a1 B2 ], d0 ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 G0 \! q, L2 Y1 m" n9 B7 @8 t* K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; k2 n! i& A% ?7 ^4 ?6 W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # Y  F, P2 N: e1 ?! D
  625.         {
    ; `* [6 t1 `# u# ^, O
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 f8 `  }9 o' F3 L
  627.                 {+ P2 t- h4 U/ Q. h: u
  628.                         return;+ O# Y9 z- T! M" j3 M
  629.                 }' K( H5 J% K" N) v
  630.                 TranslateMessage(&msg);: @: w# ]8 b4 o2 C0 C
  631.                 DispatchMessage(&msg);. Q& D+ s+ G7 i- O  D8 A& t4 h: }
  632.         }       
    - n( X; W% M  B$ S! y) a! m
  633. }. ^  L' F: w8 M6 j
  634. $ Y' H7 {; C, M1 e
  635. BOOL bFirstChar=TRUE;8 u: h% ~) k6 q7 [- p! q2 I

  636. " }5 m* E: y0 Y, y! |
  637. BOOL CRevAppApp::OnIdle(LONG lCount); b" G/ ]' D- q$ f- J0 \. V; }
  638. {
    ( v4 R1 f9 w' H  W& I- B1 m( }" Q
  639.         // TODO: Add your specialized code here and/or call the base class- t3 M. F4 \: T1 l) P1 W
  640.   switch(dwProgramState)$ U2 W* h6 k3 ~  \/ y& N& t
  641.   {) L- t$ V  {# H: B& D: X0 r
  642.   case AP_NOTHING:! J' o* p) Y; J4 M
  643.     switch(dwStartUpSteps)
    ( [# B/ c9 Y: \( d* U& @
  644.     {5 S0 h2 P; a/ q0 N( H7 Y
  645.     case 1:
    . t* x" j3 ~  Y+ a! H5 t
  646.       {: r- I8 N9 E( K$ {* @
  647.         int i;
    1 g! {. M" u, o* E
  648.         CDC *pCDC=dlg->GetDC();
    ' ?$ i& Q7 z* J) j, b# g, d9 [. s
  649.         HDC hdcwnd=pCDC->m_hDC;7 k! z- b5 ]* X
  650. //        Graphics graphics(hdcwnd);  m/ f. L, Q! ?! h! v
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( T* \! Z1 s1 b+ j6 g! Z
  652. //        INT iWidth=bitmap.GetWidth();
    0 `" N, @' g" y8 r' A( T3 d+ B1 U
  653. //        INT iHeight=bitmap.GetHeight();5 Z6 C$ m% Q) Y7 n) a& y7 I. n
  654. //        Color color,colorTemp;) }$ g/ V4 |' O2 y, V( ?) E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 J' p- G" m7 h; d, V4 \
  656. //        {
    ( T: X  p  B% S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ N) H. T1 f" J$ _
  658. //          {5 q" j' T" i! n) _+ f6 b+ G; B% K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 C2 t! e' P' m( r) d! }: H* K
  660. //            colorTemp.SetValue(color.MakeARGB(
    " I. C. M, \& m  a
  661. //              (BYTE)(255*iColumn/iWidth),
    : S# f( g( [  z4 S( }* e' s
  662. //              color.GetRed(),
    + ], S% N" x9 a) d8 p- ]" d  S
  663. //              color.GetGreen()," e* b# Z. L. G/ K5 i+ s& z7 S
  664. //              color.GetBlue()));
    & g2 p6 W& L% _/ F) `( X/ S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* E5 M! v2 Q, W- J  V( }: w0 C  h! J
  666. //          }+ e8 p* b. }! R& E; N. z
  667. //        }
    & l2 I$ _- u' M* h1 r2 B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! n. h! }' p8 l+ C& }% P  Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' x1 j0 J& d% w3 `( Y9 W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & N0 H0 R+ m6 L( t% _" U
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 ?# V$ T; u2 W1 W
  672.         for(i=0;i<240;i+=8)" S5 z7 j3 a5 x* o. b
  673.         {
    ' @0 B! ^/ P) l4 Y2 @' k; d  `* \
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! ^/ q; c8 i0 f( P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- ~. r6 _- {! R1 i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 [% `$ y% j- S2 ^! M7 Y: R
  677.           Sleep(33);) I: ]6 L+ s) `( A; ?
  678.         }  o1 K; S8 d0 i' Z# N
  679.         Sleep(1000);3 ?: J: P: e* [" Q5 \* z
  680.         for(i=240;i>0;i-=8)
    2 |, @/ }$ I7 ]4 _- ~" M
  681.         {
    8 T! m% C' W) n: q7 \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % g2 @. I/ X( |) |; @+ `
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: O; C, R! y" O, M' R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; h+ j1 l/ w: I* U# s/ p* w6 J6 |
  685.           Sleep(33);0 Q6 }  u% P( T* F2 X% J
  686.         }  `8 D1 v$ G: l2 i+ u% x
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + ?& L5 s) S  o) J0 s& M
  688.         dlg->ReleaseDC(pCDC);
    : u9 f! x  h) A; h+ P/ V
  689.         DeleteDC(hdctar);$ f- P; ?9 i5 Q/ Y7 t! D
  690.         DeleteDC(hdcsrc);
    - Z9 Y% ^" g5 T) q; o4 R! I
  691.         DeleteDC(hdcorg);
    9 J2 c% W9 Y3 ]$ B
  692.       }
    ; c, @7 f! u  Q* {# a1 v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 ~3 n  S' F4 J8 r2 d# V, T% f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & C+ N$ u7 R% n7 |8 _/ T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- ^& R/ X/ S- r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 c; b" e8 O1 b3 w1 S1 G6 C( D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! C2 i4 v; W& D: N9 V; U
  698.       if(!Dn.Connected())# `- k( l- ^; T& ]1 q& N, |5 R
  699.       {+ ~7 t! `' V1 }- s) h
  700.         dwTotalFiles=1;
    3 f; `+ X4 P. Z5 a
  701.         dwDownLoaded=0;- J7 V3 b% j$ U$ N1 G% S" y
  702.         bSilentStep=TRUE;
    ' b4 G! ~4 H! H* @: A
  703.         bCompressed=FALSE;3 n3 A  |/ ], P1 V  T8 p8 J+ q
  704.         strExtLocal.Empty();
    % t( R+ R8 i2 j$ m+ M
  705.         strFullName="readme.txt";
    : z# J9 Y; L. e5 E0 u
  706.         dwProgramState=AP_CONNECT;
    5 K* W" T5 h, b
  707.       }. |1 Z. `6 a5 r0 g4 ~
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 X% |' F; }1 C6 Y# i( g
  709.       dwStartUpSteps=2;
    : g7 E4 I% r9 S' k) S6 r
  710.       break;+ Q! q/ l# w: [
  711.     case 2:
    - @5 e- L/ o2 O; |3 {
  712.       {7 x) J  I8 k, U  q
  713.         int iEOF;
    + p2 S0 Y* X! I+ q& A0 H
  714.         FILE *fp;
    ) U# I- d3 P8 L+ r) D& ]) b
  715.         char szString[512];
      x6 [1 O$ W: ^$ g6 y) N3 n
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & s( a$ F- ^) Q# _- s$ x# S
  717.         if(fp)
    4 m+ m. l0 F/ D5 q$ Q( [) [
  718.         {: [% ]2 {! J3 r
  719.           do9 y* I/ J% c9 ?* L( C
  720.           {
    9 `6 c# t/ v1 I4 d4 B$ u5 H
  721.             iEOF=fscanf(fp,"%s",szString);* G4 J0 U# @0 i% d$ i  Q
  722.             if(strlen(szString))6 c  N6 r( A8 N4 ]3 f( ~% V
  723.             {5 ^: b8 Y! |: y) S
  724.               if(bFirstChar)3 Y4 }# m, h1 h& ~
  725.               {
    + U) `' X& M) ?5 O* [
  726.                 bFirstChar=FALSE;+ f8 X$ a4 |8 U! G6 [
  727.                 bConnectIsBig5=FALSE;9 n0 f1 U3 z1 h( _8 u& e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) Y0 [: l' e* i
  729.               }
    8 M. \( q  _9 n% ^* }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 y' [6 W0 B) G2 `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% N, S( `1 \: A+ N; i
  732.               dlg->m_ListText.AddString(szString);8 j( G2 l8 u- ~7 e% @! Z$ J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, R9 g  T/ p. f9 V, z
  734.               *szString=0;
    " E4 D" M3 M8 l1 I
  735.             }
    # f2 [1 G' r$ _
  736.           } while(iEOF!=EOF);
    + p$ N9 j2 Q  K5 u$ a# h% p
  737.           fclose(fp);
    ) ~0 y. a( u3 P5 Q" ^
  738.           unlink(".\\DownLoad\\readme.txt");
    0 @& ?1 D/ z! N4 M, B1 r# S) I6 I
  739.           dwStartUpSteps=3;
    1 A9 n  F9 \' o$ a; Y3 P/ J
  740.         }: r6 R* j. N$ u% Y
  741.       }
    . X/ X6 }! R2 y7 F* W1 r) u% r: T0 d
  742.       break;/ o/ O  R! Z5 |5 L0 i- w
  743.     case 3:) J* k" t' f5 |3 O8 W
  744.       if(!Dn.Connected())) k7 U; Y+ E1 J4 Q
  745.       {
    % O- P- R* s: F8 z# j& H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 Q' b* E3 e. ?" l+ B1 d
  747.         dwTotalFiles=1;
    6 r5 W2 L; X3 d. t" m% r- r
  748.         dwDownLoaded=0;  U: L. G1 C: ^
  749.         bSilentStep=TRUE;0 l9 \3 c0 t- T
  750.         bCompressed=FALSE;
    5 o! e. _/ ?2 Q
  751.         strExtLocal.Empty();% W( s7 Y( U9 v. k. X
  752.         strFullName="checkversion.txt";0 ~2 g7 v; \) p* \8 G
  753.         dwProgramState=AP_CONNECT;
    ' P& e7 S+ q$ o5 f8 F& f/ o) }
  754.       }
    6 [  z! t% q& j
  755.       dwStartUpSteps=4;3 Z9 `7 d. o/ l2 q
  756.       break;
    ) G8 v! l5 S$ T1 v* l
  757.     case 4:1 E' {9 ]5 f; S, Y
  758.       {9 a! R" |! ]! g; H
  759.         FILE *fp;
    ' F, O. A; O) {$ q. \: C& }3 z
  760.         char szString1[128];/ _* s  ?7 \) l% c: x
  761.         char szString2[128];
    % R/ v$ M" {- ]+ `+ f  B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' f) w8 n; H6 E, [) Q
  763.         if(fp)
    % X3 `" y0 V' K- l% K8 A' T
  764.         {3 ?, G7 I$ Z7 ~( H5 H4 `8 A
  765.           fscanf(fp,"%s",szString1);, ~7 U( o7 b7 z
  766.           fclose(fp);
    ) |# Y- L: u& m8 H. }
  767.           fCheckVersion=atof(szString1);
    / @0 g, G7 }! z% _
  768.           fp=fopen(".\\checkversion.dat","r");5 D& I2 ?- s1 _; i( F
  769.           if(fp)6 c- O+ K  \- W. Q; @8 v5 a* w& G7 n
  770.           {; g: p$ {3 ?6 y6 k$ a
  771.             fscanf(fp,"%s",szString2);. o* |9 z* [1 l- G
  772.             fclose(fp);1 @" H# U7 P  V4 A
  773.             if(atof(szString1)!=atof(szString2))
    : n2 Q9 }  e" m3 w) U; n) N% H
  774.             {
      E0 }/ E1 I- h7 N
  775.               if(!Dn.Connected())3 N/ z4 R. l$ M0 M2 Y/ B9 U
  776.               {
    1 R& _0 w# a! l7 ~: A# S
  777.                 bFirstUpdate=TRUE;; f2 M: d6 l( Y; Q
  778.                 dwTotalFiles=1;
    ' f3 P4 j3 x6 o, j* g2 Q
  779.                 dwDownLoaded=0;
    & w" I- x" s5 s2 z& [, c
  780.                 bSilentStep=FALSE;
    4 c( W0 p; [1 o
  781.                 bCompressed=TRUE;
    3 }/ [% _* w$ M7 k4 r- J
  782.                 strExtLocal=".\\DownLoad\";
    , k* Q" B' `! _
  783.                 strFullName="update.txt";! w" o0 T6 O+ E
  784.                 dwProgramState=AP_CONNECT;) }; s& [/ a" \  U" [: L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 S0 {! e: b3 ]( |
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 \" _% e1 M$ G5 B- u: f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 E8 K4 b" X  f, G

  788. 2 c9 T+ Q+ j! c0 U6 E) h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ W9 a, H! {8 h0 |1 t; Y5 M1 E# q& p
  790.                 unlink(".\\DownLoad\\checkversion.txt");' L$ u# {0 S+ I0 t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , Y: R* N1 W6 r# i+ Y
  792.                 {1 T; \3 x) O# a7 N& c/ K* s" y  P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 A! ^( x7 K) B; q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: l$ y4 c3 o( a. o$ A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 L; d6 i5 K0 [) z3 x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & p+ s0 i  ~( e2 w4 I( m. ^
  797. 5 \9 v) Z1 h3 d  s; _: e! \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; u! R, t' _3 Q8 l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 O/ @' R5 L, H6 [9 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . [* U, k9 k" [; ]$ j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' S! W0 _9 t, C+ B9 S/ q( [8 [
  802.                 }
    ! P/ F* {3 t9 }
  803.                 dwStartUpSteps=5;9 s* A" \+ J) W8 U$ X
  804.               }
    : {( D. B2 D+ y! c2 B5 V
  805.             }
    5 A8 \3 k0 b! w6 e- |
  806.             else
    8 M2 a& C: h! ?0 w
  807.             {
    0 ~0 z. j& \( n& |  x
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # g, s! n, S% V. {5 ~* r" j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 {; _0 P9 j. r7 S) s
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( K) L3 C3 p& F( f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' W( u! w  d4 X* j& F. y
  812. 2 k$ Q, [& ~4 a% \' j5 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : _" l& t4 p" C! Q7 \
  814.               dwStartUpSteps=99;
    & h, H7 U3 \3 S4 Q; m5 P) c
  815.               bFinishUpdated=TRUE;: Q& m( g0 w" C+ q: w
  816.               bCanUpdate=TRUE;
    ( ^' K8 L9 P# l8 D7 \  ~
  817.             }! N: r  S/ `: \% F
  818.           }) G' g) M& q+ m- |- I! S" i  G) z% a
  819.           else
    9 o' x0 W2 F, @* i& E
  820.           {+ o0 S9 q3 w$ E
  821.             if(!Dn.Connected()). v5 a$ ?7 O. ?* Y6 B- o
  822.             {
    6 M: A/ s( e; Z( u" l0 |1 j
  823.               bFirstUpdate=TRUE;8 M5 _4 }  [3 v/ L# c% [$ T5 z
  824.               dwTotalFiles=1;( S8 u3 F7 n5 h& g  `% P
  825.               dwDownLoaded=0;
    ( Y$ V$ b0 o6 w9 ]) ~. }' @1 l; ^6 S
  826.               bSilentStep=FALSE;2 H2 ~% p. r' C5 }
  827.               bCompressed=TRUE;
    9 L( w3 N9 H2 ?* I1 ~! f9 B1 K, z
  828.               strExtLocal=".\\DownLoad\";
    9 P6 H! P& d8 Q3 Q) G9 M5 d
  829.               strFullName="update.txt";
    7 k3 A4 G5 [; M& f
  830.               dwProgramState=AP_CONNECT;
    ( a& z1 |% H8 j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ ~7 ]+ m' m9 o5 o: Z6 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) m. B* F2 b$ e  d. |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " a' ]2 H" p* I% s
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 ?9 l2 [9 P; J9 Q& T
  835.               unlink(".\\DownLoad\\checkversion.txt");: U2 R$ O0 |- A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; f+ G. v8 Q& |# \
  837.               {
    ) h  ?' Q% x$ e9 _. s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + w6 R& Z  b( w9 w! S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 ^* v1 I5 Y3 d, A# s) _. ]; w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 ~) t- A* \, R( p, c% W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C2 ]# a% O0 b/ x4 g
  842.                
    , z, i; r! y8 @8 _, o% m, s. n
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * r: c6 f1 `5 V. G, P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 a, _# ^$ |3 I$ ~9 ^; Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ O6 x, R% l; ^6 `4 P1 ]6 `6 H% n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 }3 ]& a4 C8 ?/ l3 h8 ?
  847.               }
    + G: P. |- M$ F. A# |+ r  ~. x
  848.               dwStartUpSteps=5;
    ! N3 Y3 I3 [/ _$ l9 f4 e
  849.             }
    & d& H% o8 J7 |  I( m
  850.           }/ K: ~4 T, L: m5 h1 I! o" ]
  851.         }# I; g. r' A: P; h' N& O7 s
  852.         else
    * D0 ^  c1 D7 [  Q3 N+ L/ `
  853.         {
    . ]0 ~1 I$ m4 @: n0 t5 v' e
  854.           dwStartUpSteps=3;" x. G9 t: K, v/ Y- |6 r
  855.         }$ J3 e) d7 |: `1 D2 Z  S
  856.       }
    ( E. U3 X7 T1 {$ l
  857.       break;
    ( _9 w9 e  [* B' o3 u+ u% ]. M
  858.     case 5:" R2 n( y8 P: j% B  n8 t9 d
  859.       {, k' F9 `4 Y& M( m, E; [; j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 N; Z1 A& F# r3 A
  861.         {
    ! [. z) L- @" a
  862.           int opt_overwrite=1;
    1 I5 K& K% O3 A8 Q. {
  863.           int opt_do_extract_withoutpath=0;) Z! ^1 U8 m8 P" \. g
  864.           unzFile uf=NULL;
    " [9 ?4 ?; _2 T" O) a0 t  z4 ^

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

3 x6 U( ]# u# G0 i; o; A9 r' L: l& n' b6 j3 T. w, Y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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