找回密碼
 立即注册

CSUpdate.exe源代码

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

  U/ s5 d  C  p" s' ~6 E/ w$ o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , G. Q) z$ B) p( K( e
  2. //, ?# D) I4 L0 W
  3. . z+ n. U' C& }; L# ]1 `; M" ~
  4. #include "stdafx.h"
    1 A' H& O. W: E9 B' h7 t- _# U% u

  5. % x$ }2 B0 m7 f$ C" v) `+ d" a
  6. //#define UNICODE
    ( S2 P" u$ F& [7 q
  7. //#include <gdiplus.h>
    3 N8 X9 V# o, f  T& t
  8. //using namespace Gdiplus;* d2 {1 U- P( Y8 m& v5 u
  9. - x+ c* G' n; l5 x. }  H* {) I
  10. #include "RevApp.h"9 S8 U# ?0 ]! b3 }8 R/ O
  11. #include "RevAppDlg.h"
    . H+ }2 D5 \6 M* y3 @" Q$ |
  12. ( e( r+ v9 ^( x" z! Q: z! J5 \7 g
  13. #pragma warning(disable:4786)
    0 g: D4 i  g& Y+ b7 D
  14. #include <map>0 [4 K% r4 k1 ]+ ^+ a5 u9 h0 L7 P7 U
  15. #include <list>7 h& M5 @8 Q0 R) F
  16. #include <direct.h>+ Y0 G: ]# s0 `; q% ^  g! g. C

  17. ( @" I3 }0 i. g1 h7 \* x
  18. #ifdef _DEBUG% @) H1 Y5 _6 O% l
  19. #define new DEBUG_NEW
    - ^2 K! X" A7 t! `+ S2 b
  20. #undef THIS_FILE
    3 Y9 _$ E9 t4 E+ q7 q2 n# G
  21. static char THIS_FILE[] = __FILE__;& Y" l2 `+ k: p$ w+ t
  22. #endif2 k% `' t) D) u8 l
  23. #include "SkinResDef.h"
      v7 C+ a: p/ z* J( W. A
  24. #include "ChangeBG.h"" N$ n, L  k9 z
  25. #include "AFXINET.H". A; w+ v. h6 ~

  26. & W% x8 W* f  L; m7 a, Z: K
  27. #define TRADITIONAL_CHINESE 0$ M3 W7 z/ t! l- |
  28. #define SIMPLIFY_CHINESE 1
    ' ?& U3 C2 m1 e; q5 O
  29. #define ENGLISH 2; Q% P0 G# I& M) L
  30. int m_iLanguage = ENGLISH;
    9 e, g) B. e- ?! L' y. [+ {% \
  31. /////////////////////////////////////////////////////////////////////////////6 s+ D/ i" x8 u; [2 ]( |
  32. // CRevAppApp
    . W+ A. c8 W9 D$ z( b+ M, }# Z' ]
  33. ; g+ m) K% c2 r2 T2 ~& [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 p( K1 K6 l$ ^  Y5 j5 V# K+ Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ G+ ^' p) f4 U+ t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  Z' O3 `% ^0 c" V& F* O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 m+ Z- @: X4 F& v  I
  38.         //}}AFX_MSG+ ]% f% H  D* j7 n* G$ G% D* O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 }1 w& M5 w* ^4 r8 L) b
  40. END_MESSAGE_MAP()0 I% F3 t" P! x# U/ m

  41. : \% k6 ?2 o0 Z+ F  }) |: a
  42. /////////////////////////////////////////////////////////////////////////////
    + l& e1 a' S0 K% t
  43. // CRevAppApp construction
    ; p* {' O6 N3 ^9 L" R( C
  44. ! Y0 j& Y5 B2 o( @/ q# X' t
  45. CRevAppApp::CRevAppApp(); W3 ]; @4 `( p) M# ^' o! T* Q' H
  46. {
    " Y+ ?0 a; k3 x. t
  47.         // TODO: add construction code here,
    ; B+ l( ~: X. l1 F0 D# N
  48.         // Place all significant initialization in InitInstance# n( b2 F  N2 W! B$ D* O7 F0 m
  49.   bDisplayIsBig5=FALSE;
    & b7 g$ G3 N8 q/ ]0 n
  50.   bRestartUpdater=FALSE;
    + w2 f6 A/ }2 Z% o7 h8 A1 }; m
  51.   bFinishUpdated=FALSE;; C/ m! ?  ~2 d# K* k6 B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( D+ h3 ?. y" m5 x* f# T! v
  53.   InitChangeDataBig52GBKS();" {% K' u( r! D8 ?. N2 K  I
  54.   InitChangeDataGBKS2Big5();
    6 F- Z, R: w, ?1 l/ q; c& I6 U8 p
  55.         //7 b' p+ C1 Q5 }
  56.         bClickRunExe = FALSE;
    0 H/ W& n. N7 i; Z( K
  57.         //* q6 }5 D& q# I" N7 Z4 X
  58. }
    7 g" v  `5 V- g2 P0 R2 K& Y2 e

  59. 4 J7 d  [+ k  R* X3 l8 R
  60. CRevAppApp::~CRevAppApp(). Q& V. B9 e+ U+ T5 Y& v3 m' y5 U. Q
  61. {
    . N" R0 [. @% h; G, ]5 N
  62.         // TODO: add construction code here,- Z3 O# N6 b8 Q$ k# b1 g3 k$ D
  63.         // Place all significant initialization in InitInstance  Z' K& l1 v$ x  H
  64.   EndChangeData();
    ; y# ^9 Q4 u; @
  65. }/ J" E& l* o9 x  ]; ?

  66. " s3 D3 j2 E2 w" ^
  67. /////////////////////////////////////////////////////////////////////////////% P) c5 g/ B( T1 K
  68. // The one and only CRevAppApp object: X! Z5 S: E6 D4 ^  X; W

  69. : g/ N& H. F# X" g  t/ n7 u
  70. CRevAppApp theApp;/ s$ b; G4 _; a! y! b" ~

  71. . X. p0 T& ~0 D" X: n& K; K+ u+ v- J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 S7 c& w1 S# y* `( A2 K: }
  73. {
    ! k% o( r; `5 ?1 P" r
  74.   int iEOF=0;6 k, }) x7 `2 {  o% V
  75.   char szTempName[MAX_PATH];& G& T7 [" P! _
  76.   *szFileName=0;
    4 l% g( x6 |; n: V2 w
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 q( y" V2 s6 x" J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); I: l  Y0 b" V, B2 W
  79.   {
    : I; ~1 R' z9 `3 R. `
  80.     strcpy(szFileName,&szTempName[1]);. ]- H7 G: f9 x2 Q' y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) Z- a; Z* o6 _: c# ?
  82.     {
    9 F9 Y- }2 t. c" b$ @, k. J: p
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / Y" E4 ^: t, c( X. U5 ^
  84.       strcat(szFileName," ");
    - c0 q- y, l& e, U
  85.       strcat(szFileName,szTempName);# z( i, Q9 F) l0 P8 t/ W, p
  86.     }
    6 j2 n, u% o+ M6 G/ [
  87.     if(strlen(szFileName)>=1)# t' G" `& |7 O" g+ A
  88.     {
    - }" m2 N, t4 d; A  O
  89.       szFileName[strlen(szFileName)-1]=0;
    ( G2 q& X( _4 z& f& F7 E
  90.     }2 ^  Q6 x. f$ e& w4 x& c7 h3 N
  91.   }6 d8 T. K- K% E$ f6 s. C
  92.   return szFileName;
    4 S" {* ^2 m0 l* k$ M# F
  93. }% k- W* B% I. m# d; ~9 c8 W2 o
  94. ! e7 V6 |& c) v9 G0 U8 F# H# P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- f; i$ l$ \1 p. M% r5 {. ^
  96. {
    ; i0 [# |! r3 x' Y
  97.   FILE *fp;% N8 ^  }; k$ p4 G3 O+ z
  98.   char *key=NULL;" U8 v9 M# d# G1 O2 I4 m
  99.   char version[MAX_PATH];
    3 j/ R7 B9 F9 L4 D
  100.   LPUPDATEFILE file,olds;
    ) H" x$ ]$ F, g' ~9 e$ N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ g4 @3 K% a; ]5 D8 F

  102. - V' Q5 B) G) h0 f+ Y' z# k
  103.   UpdateList.clear();
    / o6 e) |# L$ G  O$ G+ _
  104.   UpdateFile.clear();
    3 ^2 E7 ?7 a# ]5 K: J" T
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 Z' `4 \4 V4 Q1 J1 ?5 c, Z& e$ p
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 R& L& Q. ~  F4 r+ o& `9 p& m) k
  107.   fscanf(fp,"%s",version);$ G5 C& \7 J9 W+ }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- P1 `0 j2 D& C7 q/ G/ d
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) T% e3 Z( v- M+ J
  110.   {
    $ N' D( y. }3 `: |& B+ E& a# N- U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 n+ L- z, p# y8 @; b& @
  112.     fscanf(fp,"%s",file->path);
    8 t9 L' X9 e$ ^' i
  113.     ReadFileNames(fp,file->file);
    * F. r7 k2 T4 b+ M
  114.     strcpy(file->full,".");8 F3 Q$ ^: m& J! L$ R
  115.     strcat(file->full,file->path);' L: y" d$ Q  i
  116.     strcat(file->full,file->file);7 i! o, d/ z1 s" f0 N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& n8 e6 G5 L! [
  118.     {3 {- y) J+ Q$ Z, S0 `( Y* x
  119.       file->vers=(float)atof(version);1 h: u1 x( ?4 c! F( v
  120.       UpdateList.push_back(file->full);
    . R$ e2 v( Q8 Z! }" E) @! ?; H0 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 w0 ?7 ]! r" P/ b
  122.     }
      z4 C% R# z: j* y& [% l2 e
  123.     else
    " i5 k0 R% b7 ~9 z
  124.     {: o( z9 K1 s4 x2 [9 q/ K  d
  125.       olds=(*p).second;
    1 |: X7 @& y4 e# |3 V+ W9 {6 }1 C3 z" k
  126.       if(olds->vers<(float)atof(version)). x. l3 C; Z( x: m+ U. }! F
  127.       {2 E0 W0 Q2 t: g* U
  128.         olds->vers=(float)atof(version);1 k" n. i3 I: A1 }
  129.       }
      g0 l/ ^# {' l" w  d" f3 L
  130.       free(file);
    ; \4 @5 Y. t5 s) A6 k( P8 `1 T
  131.     }3 C6 F2 ?2 z2 x$ |1 u3 p/ C' t% G
  132.   }
    9 [# y1 y0 z* A9 I
  133.   fclose(fp);
    ; v# \4 T9 r- q
  134.   return true;
    4 A' L8 B; r1 C" Q) G- [+ v: `- s% I
  135. }
    $ I* w: n# Y1 W1 T6 p

  136. 9 V3 @7 ^% u3 d8 r
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 J" E# {' J6 }$ J! w
  138. {
    & ^( O2 i5 W+ t7 D0 p) P
  139.   TCHAR  szFull[MAX_PATH];
    7 }/ y( V2 u% |6 G. u) Z
  140.   TCHAR *token,*inter;# Y3 G- `6 Q3 [8 _+ G; R% N: x0 T% b2 i
  141.   *szPath=0;7 b: @' n) K5 J6 m
  142.   strcpy(szFull,szFullPath);
    * z$ W1 s$ B3 @4 j$ Z
  143.   token=strtok(szFull,"\\/");
    + k) b( r1 l, M. L* q/ D2 J
  144.   inter=token;
    $ f& q" y. C6 ]) x9 t
  145.   while(token=strtok(NULL,"\\/"))
    , w7 D* z. c$ V/ d: O
  146.   {
    ) y! V9 ~1 I( z/ Y6 A% s( E
  147.     strcat(szPath,inter);/ R7 r3 U3 h1 F( L% I
  148.     strcat(szPath,"\");  p5 _5 r$ n, U1 o' a- g0 d
  149.     inter=token;
    5 M( y1 ~  S6 A4 k2 _5 o
  150.   }3 S1 _/ Z6 o: Q0 Z- Q
  151.   return strlen(szPath);
    6 Z9 v$ V# ?9 S% X! w5 A
  152. }
    ( s$ t( h5 x6 @- q- n: F% `/ s7 ~

  153. " E7 y5 V7 B) ?8 P. q' j- x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      M* W# [9 a4 g; A) s& _
  155. {1 F! N- k9 `6 Q
  156.   DWORD attrib=GetFileAttributes(Target);
    % Y: W6 P  ^1 `2 y7 h
  157.   if(attrib!=-1)
    2 |7 \& M/ }* t
  158.   {; g+ x- K1 P: L1 y- d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ i! ], j, m& H
  160.     {4 x) {* d3 V; S3 c6 U0 u  a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 `& i0 I& b/ @# r- X2 O
  162.       SetFileAttributes(Target,attrib);
    * S: L: z# B% U- j) x7 {2 H
  163.     }
    # p5 J+ }) \" B+ o* {6 s2 K$ ~
  164.   }
    , k+ {& s8 l9 i/ v8 k' i: `
  165.   CopyFile(Source,Target,Erase);
    ) Y; A; K! I* a9 z# m
  166. }
    , I/ l; k% o. J' P

  167. & m" R  s/ w. r. G) f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)) q3 p5 V7 P5 [5 J( o5 f. z
  169. {
    - b; J# P  [" [
  170.      FILE *fp;
    * R6 w7 h6 y" q
  171.      char  szBuffer[8192];
    + c( ~/ s1 B, Q1 e/ E0 g- e4 ?4 e
  172.   va_list  argptr;
    9 [) w8 I8 J1 B8 W

  173. ( E5 w# B# L5 g
  174.         va_start(argptr,message);
    $ N- V) W" N  B5 O5 o$ y
  175.         vsprintf(szBuffer,message,argptr);
    . U- F5 s8 q) m9 F& c8 G
  176.         va_end(argptr);" A+ \4 a/ y5 R. C0 D. v: I
  177.   fp=fopen(FileName,"a");# W! @9 \: x, T# R+ |
  178.   if(fp)
    6 d. q' E6 o0 m/ W) h0 j' X
  179.   {3 r* k5 {2 r- f& v6 D, k
  180.     fprintf(fp,szBuffer);* B8 h( N( }8 H7 K/ d  p- a; C; `
  181.     fclose(fp);* o1 X; l1 W/ p4 j
  182.           _flushall();
    6 k3 x3 t& _8 g9 g: }5 P4 c
  183.   }
    # `  ~& }7 ^) C' E$ U
  184. }4 `8 ~' x( ~/ S3 ^& X
  185. 7 \( t# i6 v7 f% k7 N
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , j/ [* j, s3 W0 j1 p5 N$ Y" t! w
  187. {
    - [9 m2 u: O& K7 |* W
  188.      FILE *fp;
    ' ~1 b0 m# j: Y7 r" a
  189.     DWORD  attrib;
      i. n% `0 j) P! w( e2 W
  190.   attrib=GetFileAttributes(FileName);
    0 a' \4 k9 p! u4 \
  191.   if(attrib!=-1)
    ! Y4 j3 _. |" F5 d
  192.   {
    , U4 t6 u  h: F. o% o- A7 L. f2 ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 ^& y1 r9 T4 a
  194.     if(!SetFileAttributes(FileName,attrib))6 g! e) W3 ?# c! R1 R3 |8 v
  195.     {$ K/ P0 W& l0 r6 V
  196.       return FALSE;4 R0 l+ t- U, r  ~& u5 i' Y6 m
  197.     }8 ^5 W3 F) q& i4 V4 x- j4 Y  F! O
  198.   }
    % ^& w' r4 D# G& A- d5 W( a
  199.   fp=fopen(FileName,"wb");
    6 R" w) N, j2 Q% g; Y% K
  200.   if(fp)$ C' b! R; x+ O6 ~4 V- Z# ~4 j" r
  201.   {
    % c* c6 i2 @/ x8 O, z  D+ p
  202.     fclose(fp);
    ' V' s9 R3 k3 _- [+ k
  203.   }
    * A$ E4 R+ W% T7 e. C
  204.   return TRUE;
    , S" H) i% n# X: E- T5 f  L; g
  205. }
    ! k/ z& D5 C" I2 r2 U+ O8 L+ Y+ D

  206. # D: r$ A1 m. T& q$ Y/ x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# u0 A5 P; [' O9 w
  208. {7 j0 W( J1 e1 ]
  209.   char filename[MAX_PATH];+ r; ]( G) k7 P' \% G3 d8 {
  210.   LPUPDATEFILE file,olds;
    1 P5 [3 I: Y+ T6 [
  211.   std::map<int,CString>::iterator i;" M7 [$ n7 T/ I+ d2 |1 w( b$ W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    & {" D' n5 i1 H( d
  213.   std::list<CString>::iterator l;
    $ X, d6 {- k$ W

  214. ! x- t" j# Z3 D4 [5 F- z. R1 F/ k
  215.   if(bFirstUpdate)
    8 r5 `7 T3 \, z& K" v0 D0 I
  216.   {! F7 C* i1 V/ R" p! ]
  217.     dwCurrFile=0;
    6 Y! T- c$ W1 V; z6 v
  218.     bFirstUpdate=FALSE;1 ?$ M6 Z9 G7 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( r2 n, Z  {; b. f1 ~& D
  220.     {
    & X& c9 R  Q: K' f1 a: `# ~
  221.       dwTotalFiles=UpdateLocal.size();! A+ P* @" Q  C0 x* F* G
  222.       dwDownLoaded=0;
    , h1 G$ F+ ], c
  223.       bSilentStep=FALSE;
    # B2 o0 T7 y! `" I
  224.       bCompressed=TRUE;
    ! {3 T3 C+ v$ j# F0 _$ j
  225.       strExtLocal.Empty();" |6 m' r# j( Z
  226.       strFullName=(*i).second;
    0 M7 M' |; k1 J
  227.       dwProgramState=AP_CONNECT;
    6 O4 |# {+ c5 d3 F4 l4 L9 a
  228.       return TRUE;
    " m  F7 q: ~5 J6 R
  229.     }% b: G1 z) o. v4 {/ E+ O% o
  230.   }5 S% n$ W' w3 c) Y
  231.   else if(bRestartUpdater==FALSE)$ {; q( z. ]  Q1 `: o$ b
  232.   {8 r3 c" K$ @2 t+ F5 T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * N1 \$ b4 Z: E. H2 h
  234.     {
    , b* @# u: p/ n+ z' l
  235.       file=(*p).second;* Z6 w  v' E* o: u. n0 N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). s+ {) Y3 ]% M, G. C) v9 ~
  237.       {
    4 n# A. a6 D( O. N, {& }
  238.         olds=(*p).second;
    . w$ v  k. F3 Y3 @# Z
  239.         olds->vers=file->vers;, x: `; d& J" d% \
  240.       }
    7 c& U4 g. _$ A* ]% O9 {/ C
  241.       else: V' A" L# _( |
  242.       {
    $ q; `8 N, o* G+ }
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * F5 W& ]' j+ t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 S( [8 s- B! `
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    $ k  Z! l" v2 _; `
  246.       }3 X! S9 a4 _$ ~
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: r, ~' m! H4 @- B; E6 |( a
  248.       sprintf(filename,"(%s)",file->file);  e7 E  {* b" x/ G5 V; [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( w5 e5 J! H7 r! ~2 f2 Y. ?9 b
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; |" C$ g: i6 i( J6 O! @
  251.     }
    ' i) J/ s: b3 f4 n8 Q( g1 _
  252.     dwCurrFile++;
    , p7 f- r/ R& a
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % X) y; R8 d8 Y, Z# M0 f
  254.     {3 N/ _4 h2 U4 b
  255.       bSilentStep=FALSE;
    % y3 S. @) [$ N; A; j
  256.       bCompressed=TRUE;
    5 @* r& _) t4 |1 h9 Q
  257.       strExtLocal.Empty();
    ' f- n  {  P" r2 K
  258.       strFullName=(*i).second;
    / C2 l& C  j; C) |/ q) G  i& u+ ^
  259.       dwProgramState=AP_CONNECT;$ g" n, E, Z  @% j. L( r
  260.       return TRUE;
    0 r1 Z* [5 ?# U" E
  261.     }
    , s1 Q- Z9 W& U9 f
  262.     if(!bRestartUpdater)
    : q. Z# U! X" t8 h
  263.     {
    ; `: G8 g: ^7 {
  264.       int iCurrSize,iFileSize;; }3 J3 M+ v& x9 d$ O( Q" ]
  265.       iCurrSize=0;" ?1 i4 P) k9 U: h4 Z7 M# E" _
  266.       iFileSize=UpdateList2.size();. |+ S+ B0 J! n. w7 N# E7 b, B8 _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" x- h$ }) J0 s" o- a% Z& @+ D) N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% N+ n8 D! b: F& u) l
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ h+ d" [6 m5 @/ k7 ^- G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) A8 p; H& P+ m. L; {
  271.       Fclearf(".\\update.dat");
    ' E: b& }/ _7 r3 s. w
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( ?( I0 w5 c/ M3 j# U' r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % w; g' a( q/ U# r' L. O  K8 X
  274.       {& k9 Y, t+ z; B
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * n- U/ L# t8 b6 M
  276.         {
    * a9 z8 e  ?# @, ~+ o5 ^/ q, r2 ^
  277.           file=(*p).second;' W( O* E6 U+ _* P
  278.           sprintf(filename,"(%s)",file->file);! c4 ?- A  l& Y8 I& z. h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; x. H& N, H' j2 M* U& |" {
  280.           iCurrSize++;. v. x' x& E1 x( ^* C3 G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ z4 A' k% N6 e( x. M+ e  J
  282.         }( B, v4 T6 E9 F0 w& |% N
  283.       }
    ; n5 G- ]( H8 q! @( V
  284.       unlink(".\\update.txt");
    / Z( d! C9 c7 f7 p! \1 b2 ^# i7 r) g
  285.       unlink(".\\update.tmp");+ m6 t" ?# d/ y5 ~6 ^3 c/ N
  286.       Fclearf(".\\checkversion.dat");9 i5 a' f: v. f- }0 C0 Z0 r' \$ v* {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + _  d0 o6 h7 w% Q1 [, a6 S9 I! H
  288.       if(UpdateLocal.size())- U) A+ C% W3 o, s" i
  289.       {( @5 ~* B* y1 k( A& \( \) t
  290.         UpdateLocal.clear();& J1 S% F* F0 b( N
  291.       }
    , ?/ g1 Y  R; n: l) H8 H8 s
  292.       if(UpdateFile3.size())" K  ~6 x1 q2 l$ J- D
  293.       {
    / U- k* O! @0 y( o  n% D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 F; O7 s3 _1 a" h; S
  295.         {# Y9 P- E# S9 n- f( R1 ]: g
  296.           file=(*p).second;3 U) f9 v8 M. n) \$ z
  297.           free(file);
    3 P2 R" ^, F1 L$ Q2 t1 e' J1 {4 {
  298.         }
    - K! I, @1 a5 B' A0 G- }
  299.         UpdateFile3.clear();
    . v6 f* K) U7 R" p. M% D# a
  300.         UpdateList3.clear();
    7 V  v0 S# O8 D% ?5 \
  301.       }# v- a4 x1 X9 y
  302.       if(UpdateFile2.size())
    % n: j9 Q: m% F4 P
  303.       {
    9 y  @: v/ {# N' x' i- e2 t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / V' G7 ?' a0 ]- m* M) i0 g! b
  305.         {4 ~/ v4 B" o% Y8 E% l5 {
  306.           file=(*p).second;6 V, T$ m8 \% V2 x9 L
  307.           free(file);
    3 z/ F2 a9 G/ _' s9 ]
  308.         }
    3 G" }" H+ y: H$ x; `. d6 w
  309.         UpdateFile2.clear();
      c. [# t- p- l% w
  310.         UpdateList2.clear();
    1 j+ n' T8 y9 {7 h
  311.       }
    ( G! {/ W3 B+ u% D
  312.       if(UpdateFile1.size())% U% k/ l( `2 m: u. n  l
  313.       {
    3 k, x: v5 Q/ c) m8 T& _! g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) H6 A: w3 A2 ^0 `
  315.         {- j/ o8 e; i! F5 K( Q* `' M
  316.           file=(*p).second;
    9 D/ L$ j# }5 Q2 L1 h: ^
  317.           free(file);/ y  u' ^) q1 k, C7 }
  318.         }2 ~8 n+ q" A7 Q; `, N' T" j
  319.         UpdateFile1.clear();  \, u& v- [9 B. X2 s( e
  320.         UpdateList1.clear();4 h; G* V! P8 B# v9 T0 w
  321.       }4 J2 x0 h$ c& D* w) P$ x: W3 `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 L; }; b1 N9 y5 ]3 M
  323.     }! B" G0 `: x7 f: f& E
  324.   }# n' j+ j3 b- ?
  325.   return FALSE;
    ) t' a1 G' Y( F
  326. }
    # [  u% z: [$ q/ c5 f- _/ I

  327. " |: ]# w/ E" T
  328. void CRevAppApp::ClearAll(void)" s' t3 b9 T  e: |6 C* d
  329. {! h2 o& Y% |/ x  J# [$ a' Z
  330.   LPUPDATEFILE file;) f" C8 k& R7 ~0 a9 H8 I2 R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) K; z" Z4 D4 [' b

  332. 7 t# k! A8 m' b2 O- T% z: o
  333.   if(UpdateLocal.size())
    8 Q& o) \- U1 r: Y
  334.   {. S% k- [$ D6 e  _
  335.     UpdateLocal.clear();
    1 ^) O1 i' y6 I. d$ y
  336.   }
    . z' a8 \# W4 G2 b. E& j! a7 S
  337.   if(UpdateFile3.size())
    ( ~7 m6 i! U' E
  338.   {# Q* K9 b8 f) D# P& N
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" [  @/ u" i+ a' g9 I
  340.     {
    ; T. a, ]/ b! f
  341.       file=(*p).second;. d3 ~( G4 f/ S, c6 S
  342.       free(file);
    % U! X6 l' ]; k. c$ y
  343.     }
    # v$ h* w# ?! l8 v2 @7 F
  344.     UpdateFile3.clear();7 I0 j* M0 A" j# r. O7 y. h
  345.     UpdateList3.clear();
    + N9 U3 G! y- I3 K7 f7 z# C/ i" Y
  346.   }
    ) a( c" m- t: P
  347.   if(UpdateFile2.size())/ n1 h2 B1 }1 G3 k  k- V0 U8 _
  348.   {: g! I. G- m( |7 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 ?  N# k9 L# h+ a" P
  350.     {- r' k+ Q% b+ l, M9 i
  351.       file=(*p).second;
    ; g; U+ k0 a* o/ v. G
  352.       free(file);
    ( H0 N, C3 H0 S( J
  353.     }
    ) i% f, P! D, I. a# s" M
  354.     UpdateFile2.clear();/ e* |9 ^$ a$ F# h* ^2 M1 J8 ~
  355.     UpdateList2.clear();, v& \# B5 z5 ~5 X
  356.   }
    # L# V9 F3 m4 z, g- j/ E
  357.   if(UpdateFile1.size())  m( N( Z% K- |& @( S3 e% a
  358.   {
    / z5 }3 @$ C8 r# l& o' _
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ Z) F9 p+ f6 v# m5 r
  360.     {8 T( z* E* a9 l
  361.       file=(*p).second;) ~( Z2 N6 w$ F& C. W6 O- y  n
  362.       free(file);
    5 B9 E' F9 C$ a/ ?: F
  363.     }; ]; L; O, W4 \9 H% H
  364.     UpdateFile1.clear();' f) m* T3 r: ]; P: X
  365.     UpdateList1.clear();
    . Y9 D! z- W, J5 J4 X+ l. g
  366.   }
    3 K$ }' p5 B+ l% y
  367. }  
    2 q( @7 N6 x, Q, B7 o- {+ D; F
  368.   5 X0 z: k+ r0 S7 P' f( [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! V9 o: M$ G) e9 W* N% I
  370. {
    3 ^  G4 T7 s8 f4 R- a+ y
  371.   int c;
    ( I8 j/ i9 c' J# E% V5 w( T
  372.   LPUPDATEFILE file1,file2;3 k* w( k" ~( Q3 k) u1 C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: C6 f, L2 k0 A' c
  374.   std::list<CString>::iterator l;
    2 h3 L5 F3 M) G, F( T; d

  375. # T4 ~4 B4 E  L
  376.   UpdateLocal.clear();, p. x! M, h1 ^7 S& J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) h2 {4 f9 Q5 A' v, ~. s7 b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 x' R: C8 X, e8 ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    6 G0 t# U& U% [' M, a/ {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & {9 O" x5 q* ?! t7 q9 g% x
  381.   if(UpdateFile3.size())) K- [2 u4 c! U6 H* h9 O
  382.   {
    % u' S! C: U3 Z, F5 S1 b/ w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 _5 D6 `$ B" _5 ]" n7 S
  384.     {# H! b: o/ [( f% ^+ \
  385.       file2=(LPUPDATEFILE)(*i).second;
    , k& c& d* e0 {" n, I+ m* s$ v; D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 R( k6 ~- _6 j
  387.       {) s6 T% \7 |4 o, d/ @
  388.         file1=(LPUPDATEFILE)(*p).second;" q" g) R, \: h
  389.         file1->vers=file2->vers;
    ) @1 T; P' m9 g$ d
  390.       }2 A! Q; X0 I, B5 E, a+ {8 z  z
  391.       else, I0 D! ?3 o& |0 |
  392.       {
    4 b2 H2 g- e; L  T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ f+ Q+ E+ L% w& c' Q% P- z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! A" H9 X) B7 t% w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; k7 D. ^5 i' _' M3 A8 l6 i
  396.       }) t; b( P( g3 j% [
  397.     }/ o" I8 A+ S2 U# K" b" N. B
  398.   }
    . T! D2 q: k! |! N7 O2 j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 W! g* Q* o# A2 x5 l% s
  400.   {' L# E9 v4 n  q/ s, e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 t) j  \# y  t# X0 d6 }$ ?
  402.     {
    # w+ h0 B7 Z0 z0 Q! E* [
  403.       file2=(LPUPDATEFILE)(*i).second;
      l: Q, F7 Q  b: `5 x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& Q% D8 b* b) u8 b7 C% H
  405.       {
    9 Z. r* {$ H( \* e6 x
  406.         file1=(LPUPDATEFILE)(*p).second;2 D9 L7 Y) O" @# g6 B
  407.         if(file1->vers!=file2->vers)
    " t: T. @: A/ H/ c  {, O- x2 E
  408.         {
    " f' b% j8 G1 M8 R2 W  p7 E7 l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# |( c" z4 H  d( C( p; b7 s
  410.           c++;
    : J: Z) |" j6 J) _
  411.         }
    & S7 X8 X  u9 Y  O# B
  412.       }, z" I8 L& b5 S/ ?1 ?
  413.       else
    7 p3 c% T, z' {. {
  414.       {
      Y% }( {# O6 b7 P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * U1 u" U# D0 V! o. t
  416.         c++;( E- ~% U0 Z0 b
  417.       }! I) R2 |: E* r* S; q. I7 i
  418.     }5 d/ f( R6 p; Y/ n/ D' v! J& H8 y
  419.   }
    8 J2 G$ \9 t3 S+ Y3 j2 R5 N
  420.   unlink(".\\DownLoad\\update.txt");1 ^1 Y1 K' I; h1 J2 D
  421.   if(UpdateLocal.size()) return TRUE;
    4 j1 Y6 ~2 N9 Y' ~
  422.   else                   return FALSE;
    / C. H4 N; c) A) A
  423. }
    " K) e3 l$ X" l) J( w
  424. 4 d, a2 f- b0 L) ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + q5 |: k* G" P4 ]: }1 s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # t: [! t0 d# c0 x# z

  427. 6 N5 b- d, {7 A" o9 q' `

  428. + {/ A4 g+ Z4 R5 B8 m5 p) ^
  429. + [& l' R- f# Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ z. s8 ~1 T/ c( }* R" e
  431. {
    2 U4 g' y3 A& q* |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 W: l! b6 ?' k9 G2 c! |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 T% x" h1 b. n( ?+ |# g
  434.   {; D# ~" ?4 U/ ?3 r1 }' J6 G0 j
  435.     char szLanguage[50];
    * C/ [) x5 B1 A2 n8 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 O* [" l3 U. z0 o: B5 z; R- J; p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . H$ u! M. q. c! w, d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( I9 x7 P, |* j1 N, X- ~
  439.     else                                   m_iLanguage=ENGLISH;, x0 `: C# l* l1 K3 Z2 A3 P% E2 q
  440.     char szRegister[100];, f2 b- j! ?6 h5 ]2 j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) Y& [; H' h4 R; r) P# ?' l
  442.     strRegsName=szRegister;/ C3 A  @7 C4 T5 K; B5 r
  443.     char szPatchURL[100];
    / _2 v0 {3 C% F% B8 }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 V- k# `. r3 m$ D* R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 h+ q  j: P* _6 N
  446.   }
    ; M8 w0 _8 q# p* a; s, B& z8 n4 ~
  447.   else/ T7 ~% z* A' L/ E( t
  448.   {
    , Q& G0 T( l6 q% c! ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& `6 B$ R2 w( K
  450.     strRegsName=DEFAULT_REG_URL;
    ! W& f# A  q) r& w  ?/ Q5 a
  451.   }
    6 f3 d1 s9 |: ]  q& A0 j, c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 @* ?& I1 N3 w
  453.   {
    # \) \: k3 [  O4 u, @  J
  454.     char szIP[50];
    - D4 t0 P1 p1 T7 [
  455.     char szDIR[300];
    : h/ w! X2 z& a: ?2 d9 D
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 `' U) i4 m% E* M$ D5 ?# ?
  457.     {% g% Q$ n$ f1 o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' C0 ~4 A% ~: t# Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / |+ d1 t0 C% w
  460.       strHostName=szIP;
      R) Y. ^4 }0 ~( t% N  n
  461.       strHostPath.Format("/%s",szDIR);  i: C  y" z, X( y3 t+ {. I( B
  462.     }
    - q2 p/ w0 U; Z& m; R
  463.     else
    ; m; ]! w1 @9 e7 h! b& v
  464.     {7 |' e2 R' s6 e. a4 @; ^0 n0 H3 r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , e! j& `/ z: k7 r6 j
  466.       {3 K1 G6 t, b& u5 f& s
  467.         char szLanguage[50];
    - a1 L* G3 C: O. a' x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / |! X/ o, i9 p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 x1 }! O1 b2 W4 a! ], J% V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 B: [/ s( e; h5 x2 B  E
  471.         else                                   m_iLanguage=ENGLISH;, a# j  w# W% |8 B" c2 M, d
  472.         char szRegister[100];
    * q- {( n3 C; z- J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( r* E) t$ ^1 f- p0 a9 m
  474.         strRegsName=szRegister;
    ; U" @  U1 v6 }3 K+ Y( e/ e3 q
  475.         char szPatchURL[100];; n( ?$ ^5 p9 @; m- M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. b  \; ?) b3 m) ]& s; P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 D9 G+ g3 H0 b) [# d  L8 {
  478.       }3 [6 k5 b: h' I" O
  479.       else  S( Q, w% T" s* d
  480.       {& F: {* d0 ?) ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 \  f) b4 ^; Q6 r# i
  482.         strRegsName=DEFAULT_REG_URL;1 Q! u* d/ d1 H, O! [5 I
  483.       }! [$ k9 g0 `: a( X
  484.     }8 k, d5 X$ b* e
  485.   }# {- y8 F* Z* p( U$ t0 x' W
  486.   return true;" \# q+ R. W* C! W  U
  487. }
    8 j: Q3 F" b8 z4 o/ j7 o1 ~  V

  488. $ b8 T% _9 _: E
  489. #include ".\ZLib\unzip.h"5 b, P% n' t" F; S
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      t0 R6 z9 j& E" F( y
  491. /////////////////////////////////////////////////////////////////////////////
    ' h5 P. u( a% E* }" e7 t0 B9 i0 D- H
  492. // CRevAppApp initialization7 ^/ C3 R) L7 c6 K0 b
  493. ) T7 J" o2 L6 d7 `* g2 M! Z3 `
  494. BOOL CRevAppApp::InitInstance()
    / h" \- ~0 X& v% g& k- P# M2 R
  495. {; [8 i' r' N. y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% @% T! }) V0 B- o

  497. 1 y- @! h# E: t) b4 Y) B8 u* j! x9 r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( c. S' c$ d% G& |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ `0 j) _' ~9 z, H3 E
  500.   {
    " k, ?) |4 k" Y* r, A& e
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 u, q, ?) ]# i) U9 k# F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; k+ b7 U  Y$ }: Z, c
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    , s3 @: E$ s! C7 W; N
  504.     {
    7 M9 X. }& A. N
  505.       strcpy(szPath,szPathTarget);( J) Z* S# B- B3 P  z
  506.       SetCurrentDirectory(szPath);
    % W7 S: Z4 ^' P" }
  507.     }
    1 q4 H) ]* ~  }
  508.   }
    : M+ W! z0 q$ t9 l! q& ]' d
  509. #ifdef _DEBUG2 Q* q. C4 b4 E6 ^- [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 K) u$ R6 v& ~+ A2 U- {! b
  511. #else- g: F7 ^2 b7 Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / L* E9 }5 [4 t7 l
  513. #endif
    / t% V) a7 k4 p5 {
  514.   {9 M1 `$ g, s8 H6 P: o
  515.     char tempFileName[MAX_PATH];; [2 s4 J2 Z& ?# q' k5 y  u
  516.     strcpy(tempFileName,szPathSource);
    7 v1 X6 I0 b# ]" H0 @# V
  517.     tempFileName[strlen(szPathSource)-12]=0;$ s+ v( L* `" z' i) Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  v0 Z: _- K' d' R( f7 S! i1 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. v  T  {; O( A/ x% h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% a) Y- _: P) |: b. R
  521.     return TRUE;  b: {; f; }2 L$ s% G7 @
  522.   }
    8 ~0 A( p8 k4 X$ z2 ~
  523.   // Nuke 0118: Delete run.exe
    , n/ u. K; q: |! n; d1 S+ y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( m2 G9 Q, p/ a; Q) ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" Q+ ]' x/ @2 {( t; a
  526.   if(!ReadCfgFile("Config.ini"))& x. r! J4 f" z! [; m8 y
  527.   {
    , ^: @( ?+ b) P0 _2 K& D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; o% Q! P( s  _1 {7 v
  529.     return TRUE;
    6 F. _5 Y0 K( H) D! w
  530.   }2 V6 h" X  L) {  V
  531.   HANDLE mutex;& d: P2 {( a2 o- @6 {, F. S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% \0 u8 D1 {4 m! i# ~9 F" c
  533.   {, R# C/ g" X' A3 G0 C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - T9 T) d' G7 j/ a1 Z# |
  535.     {* q: e9 p% j  l- O$ y* O! n
  536.       CloseHandle(mutex);
      Q; V8 s: L$ c5 r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ' i2 l+ V' j/ e, E1 ?
  538.       return TRUE;
    ; e& L$ I0 n- |' N
  539.     }
    * I9 J& }6 i; P, Y: J
  540.   }  
    , y7 c/ ~+ v/ }
  541.   CloseHandle(mutex);* t/ ^8 f- b; ~$ g! u& U, I+ k

  542. 1 Q5 ?  h( K1 p- D: G4 a& \
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: a7 o% n. q, N

  544. # Z+ j. R( \* T  h7 A
  545.         AfxEnableControlContainer();7 y5 B6 ^( _, \. Q6 D

  546. + u8 H3 B1 G( x: ^0 P5 M6 y
  547.   bCanUpdate=FALSE;
    + \9 n0 {+ R5 G0 F3 f; J
  548.   dwStartUpSteps=1;# L" ?& v3 ?: r
  549.   dwProgramState=AP_NOTHING;
    5 w+ c& `! {( K5 j6 x

  550. + x# I' y4 y% \, G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 I9 _7 k% n6 K4 b* f" }1 i
  552. ! J2 r7 |) b' P0 e! l  e
  553.         // Standard initialization
    * E4 V. `- ]. v3 S/ Y  ]2 w% ?: ]7 ^( X
  554.         // If you are not using these features and wish to reduce the size/ v0 J: t1 c9 W1 `
  555.         //  of your final executable, you should remove from the following3 Q9 x) d7 H  ?+ z5 y
  556.         //  the specific initialization routines you do not need.2 z+ C8 N, e7 b/ g7 i  d" ?

  557. 3 A) p, X& `/ j. V' Y( x
  558. #ifdef _AFXDLL( g# R2 X& ~! a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : G1 N  {! Z  u
  560. #else
    & ?* d$ }1 R- s! X+ h" }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! \, N5 Z1 D6 l$ v
  562. #endif2 E2 {9 N5 f- ?9 [# W
  563. ! p' x& F$ e( r' N1 Y2 S
  564.   dlg=new CRevAppDlg;
    2 F, y/ v. W+ w
  565.   dlg->Create(IDD_REVAPP_DIALOG);) ^9 y; ~) B2 W4 p# p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. G# v, h) f( r
  567.   m_pMainWnd=dlg;
    ) G" u' K1 V* m
  568. ; ]$ s- L3 w1 I* A6 S" c1 G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 V* e5 S# ?. U9 E6 d5 L' s
  570. ) c) R. f' @! M6 n! K& n. m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 }) A' k7 j/ G0 Q% `
  572. //  ULONG_PTR gdiplusToken;- l9 b* U1 }# p7 @5 t, [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  }; `1 A1 z5 C' p, r# Y" z! h
  574. + k" u, o6 ?. _# o
  575. //        CRevAppDlg dlg;' c9 T$ k) N9 a3 B( b$ u* H# n
  576. //        int nResponse = dlg.DoModal();6 t- w4 H  o: `- B" ]% ]9 l
  577. //        if (nResponse == IDOK)8 `% u! J& h! c, }( @* i- B
  578. //        {* N4 k3 R( W3 _/ l# N! q
  579. //                // TODO: Place code here to handle when the dialog is
    7 m5 s3 @* `+ }
  580. //                //  dismissed with OK
    ' i# k+ ~. \; C- J: j
  581. //        }- p* M+ C$ F% Q
  582. //        else if (nResponse == IDCANCEL), Q) T/ w0 h7 z! A. r
  583. //        {0 E, d, M6 M! Y+ e1 Q4 r
  584. //                // TODO: Place code here to handle when the dialog is! [) m4 V1 ^# U4 D
  585. //                //  dismissed with Cancel
    5 |$ r! J$ }& p8 I) G" ]* c% t, M! R
  586. //        }: ?* X( o% d9 {/ D+ C, `

  587. 5 L4 v8 K2 Z& c9 ]5 {
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 H' R6 N5 {7 t3 R
  589.         //  application, rather than start the application's message pump.
    7 {# a$ l' B4 Y5 c- t
  590.         return TRUE;
    * z+ A, q1 m# c6 O
  591. }
    3 ?# T8 U1 g! _: Z( x) q
  592. , r# O+ T* ]5 t& I/ X9 w7 i
  593. char *CRevAppApp::strtok3(char *pSource,char *token). J* R6 G% C: d2 O* f+ g, I) i/ ~
  594. {
    ! W8 N5 }" z3 s
  595.   int i;
    . u7 M, I$ q) A7 I7 W* j
  596.   char *szRet;
    2 U& v. `: o, e$ W9 t  E4 f9 ^

  597. : p! a' @" T2 ^6 s3 ^0 G6 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 Q) W- @. I9 H1 r
  599.   if(sztoken)# j+ n5 D. M. s/ ^5 G3 Y- ~( j
  600.   {  I9 P: {/ j; J: e& h9 w0 p- J
  601.     szRet=&sztoken[itoken];
    ! o+ z- w, O! h/ j3 L2 u
  602.     while(sztoken[itoken])  k/ V4 @% P7 `2 ^+ i0 a
  603.     {& i8 d: B' [. m3 N1 G" N6 f* ?9 q
  604.       for(i=0;i<(int)strlen(token);i++)
    3 C% c3 [+ |! c$ s: n
  605.       {
    % z3 K! A9 Y4 L+ N) z! y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])( P0 j6 }& D: Q  K- M% Q' q
  607.         {1 \/ |3 [, J9 [- ^6 b
  608.           sztoken[itoken++]=0;( H# n/ A2 w! U# X
  609.           sztoken[itoken++]=0;
    1 n! j+ @* W! Q
  610.           return szRet;
    * N" P1 Z& ]6 j  a
  611.         }
    8 |7 o2 h+ L+ b
  612.       }/ l& g+ t) b$ ^) `
  613.       itoken++;
    1 f4 b5 J' I1 m* K6 ]
  614.     }& j' `8 N2 P. ?1 m1 _
  615.   }
    $ y0 S, @- @* R, m  x
  616.   return NULL;
    4 F; O" Z( t# n, |( Y, ^
  617. }
    4 \- F" m6 ?, E- k
  618. ( `1 B, j4 C7 C
  619. void ProcessProc(long Total,long Current)
    3 L1 e: y# M) }- U+ i! f. U
  620. {. i- I% Y5 e. _: ~7 f$ q
  621.         MSG msg;" |8 |8 M0 H$ B" f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) Z$ b6 Y$ C  e  Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& _! k. ^/ U5 [' ~! i" _- B" w* V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 ^: x2 `7 n1 D# W8 j
  625.         {
    7 ~4 N5 v' M* t# l5 E/ }* ]6 T" R( G
  626.                 if(!GetMessage(&msg,NULL,0,0))4 i4 g, L3 c3 Y/ M- k7 Q
  627.                 {7 x0 l$ P. o" R& v
  628.                         return;% H, P) W6 r! U; N, g5 {
  629.                 }
    : ~# u( Y; e: A1 F7 K
  630.                 TranslateMessage(&msg);$ J: y5 I7 Q# F- P. Z4 O9 g/ f* }
  631.                 DispatchMessage(&msg);6 g5 P1 C* x8 e* s* Y
  632.         }       
    $ g) _, z9 z: T' r  w9 t+ s
  633. }
    . }1 w# k3 a1 f% S9 m
  634. ) m: c" ^; j, @) I9 {
  635. BOOL bFirstChar=TRUE;
    1 s4 X9 m: I# u; M

  636. $ W+ A0 R' n8 J( S. g$ J2 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' `& O0 q6 O$ N/ D
  638. {5 d. ~# I& R- Y3 M: a; v( q1 y
  639.         // TODO: Add your specialized code here and/or call the base class
    % J7 E0 E* L8 C; Z; r7 f9 B
  640.   switch(dwProgramState): n7 J, _8 W# ?" C& j' q: F. V
  641.   {% E% b5 L; M4 f  y( J6 d, \
  642.   case AP_NOTHING:
    / b" k3 U$ N  N: r; w' E
  643.     switch(dwStartUpSteps)5 `6 Y; |: Z+ l: E
  644.     {# x7 }+ ]/ k3 U8 r
  645.     case 1:
    9 R. K: T3 x( D. s5 E# K( {
  646.       {
    8 }8 k" e$ D* K% Z: }7 b' k  t0 N
  647.         int i;( \# S: b, D/ I( L: Y
  648.         CDC *pCDC=dlg->GetDC();
    3 b3 z) Y$ `$ `0 o4 Z. E  `" e3 j& M
  649.         HDC hdcwnd=pCDC->m_hDC;( X& _; f* _9 \  @2 H4 [# y. A3 q# K
  650. //        Graphics graphics(hdcwnd);: A0 z2 i0 g2 B/ i" g/ M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! O% g: X+ i: Z6 s, q
  652. //        INT iWidth=bitmap.GetWidth();
    8 O* D* j6 n+ k0 Z/ ~; V
  653. //        INT iHeight=bitmap.GetHeight();
    ; m6 O; F6 _6 l
  654. //        Color color,colorTemp;
    1 }4 o: }; x4 }( H( N- C! }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); ]/ @9 J9 o! J  T6 x
  656. //        {9 i8 |9 O/ s$ z# D; k# I9 F; Z2 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / j/ _* ~( }! w" V% @
  658. //          {! o- N4 \5 u) |. `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 ]  p- x) y, C0 f" T$ t
  660. //            colorTemp.SetValue(color.MakeARGB(0 S. P1 B0 Z( x! }; V' V; S* k9 ?
  661. //              (BYTE)(255*iColumn/iWidth),+ S  a. L0 Z. l; K+ V
  662. //              color.GetRed(),
    4 l0 K7 @! i1 H5 n% ~
  663. //              color.GetGreen(),
      y3 F; \3 _7 D. N
  664. //              color.GetBlue()));& ^0 p( D# m2 c+ F. S0 U
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 y/ h7 i( f6 }2 M( Y& z% t2 {
  666. //          }' {: d; [; `' i4 z# [1 c) {
  667. //        }
    5 \) c% [4 x2 {3 S  }( E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 d& h: G& a+ e6 _) h! Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & t" L9 m# W# J( ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / a9 T5 [7 E( P1 H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# V% ~6 D8 Z% T& ~. |
  672.         for(i=0;i<240;i+=8)
    1 Z) E% e+ Y  w8 k+ E) t! C# @
  673.         {
    % Z- {1 v2 w4 K% K0 B7 v! g0 C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 }1 D) {" Y/ t, l" F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! Z$ f2 O, v$ F1 Y1 u' f  d* {5 Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 p0 D  s/ k3 g$ C( I' [+ K5 E
  677.           Sleep(33);
    ! c2 v0 o% [4 E+ V2 g7 y+ X
  678.         }
    . o8 C. F9 w" S- l5 o4 J7 R) E
  679.         Sleep(1000);
    ) l' w  M' b9 U
  680.         for(i=240;i>0;i-=8)0 g) }, `4 ]: ^! z# ]) b# \4 M( s
  681.         {
    9 }& g( q7 M& b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 q- f* L! _  ?) v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 L* O0 P, E$ B& I- Z. P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  w1 w" D% B! A; H
  685.           Sleep(33);! f' N- w' c/ o: C
  686.         }
    0 T' o5 p% [! b8 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) ~; _$ ^$ o& H6 M8 @" }. i8 O
  688.         dlg->ReleaseDC(pCDC);
    1 x6 X5 W- {' u4 T% L, B0 h
  689.         DeleteDC(hdctar);
    ) U) H$ i" ~2 I* {) _* ?7 a& ?' u
  690.         DeleteDC(hdcsrc);
    0 Z0 X- S0 t6 P- O  x
  691.         DeleteDC(hdcorg);! G# C7 l2 D1 w$ K' C; k# S
  692.       }! t0 K7 @, Q6 O' K" h: e" [/ J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " b& C2 I/ x3 [! }
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% N0 X+ a" t* r% S
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, a, f) n1 h; T1 y6 |
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + i/ ]2 {4 Z9 `8 u, P; y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 |; {! o* D1 R3 b
  698.       if(!Dn.Connected()), l; z* P3 f6 y' h
  699.       {+ R2 B6 h. g% l- B+ ]0 d7 Z( d
  700.         dwTotalFiles=1;1 i. b( I2 T+ Z& G! {# t, {* w
  701.         dwDownLoaded=0;' b5 S" A2 C* M5 H
  702.         bSilentStep=TRUE;# E8 l- f4 m' o/ X2 Y6 L; B- r1 W! M
  703.         bCompressed=FALSE;
    , p6 _. D/ C+ A8 T* N
  704.         strExtLocal.Empty();$ ?4 S" p4 q' p6 w5 A
  705.         strFullName="readme.txt";' S6 o& s1 v  }: n9 q) B
  706.         dwProgramState=AP_CONNECT;
    ( {7 g( `/ N$ t9 i3 C
  707.       }, v# S" q" W+ r& a, W, S
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 |7 X4 b# _* _+ U: e# Z
  709.       dwStartUpSteps=2;2 d$ d0 ^# W  [
  710.       break;1 e0 r% g  D! q# w* z9 F. Z
  711.     case 2:' ?1 m% y  f: ~# G; P# ?
  712.       {
    6 d( H5 w) B* D2 B0 A7 v: S
  713.         int iEOF;$ a# @% Z" U8 l- L7 Q5 |; b7 \4 y
  714.         FILE *fp;
    8 N' P4 X" ]6 c& S$ J
  715.         char szString[512];9 z/ G( W: }( u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 ?/ ~5 }3 k* k  o: a) L+ a  V
  717.         if(fp). r/ B7 x6 |( {* o# T7 b
  718.         {) A6 K- V6 o" K1 N- k; s9 _- [- Y
  719.           do
      M7 i4 J- D( g) x6 h
  720.           {) o7 _$ A* I! h* G  J  Z
  721.             iEOF=fscanf(fp,"%s",szString);
    . Z; I) B+ F& e
  722.             if(strlen(szString))
    * J. v* N9 R( E  @: M
  723.             {
    ( b5 T/ j) H* _+ w3 v) [9 W1 _
  724.               if(bFirstChar)
    3 N2 x0 O# Y: \. i0 O: G& _; W; y
  725.               {6 i7 L1 q1 t% t' x# N
  726.                 bFirstChar=FALSE;
    5 E( b: D6 ~. q
  727.                 bConnectIsBig5=FALSE;3 a' S) ^* J' u" V" V' D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 o1 e% V4 A' T- S9 q
  729.               }* Y" O: T! u7 W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " r( j6 m5 \# U7 C/ R8 |
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# V/ R  h; r) ?" }- q5 `# D
  732.               dlg->m_ListText.AddString(szString);
    8 y  j: ?' [1 ]# t, x
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) S2 m* F/ d7 ~2 h
  734.               *szString=0;
    7 N# I, U! B: z5 k! \- _) H
  735.             }7 `; q4 b& ]- i
  736.           } while(iEOF!=EOF);$ p) P" |  q* z
  737.           fclose(fp);3 O* J$ h/ S2 w0 [3 s* z
  738.           unlink(".\\DownLoad\\readme.txt");
    1 {- e/ {5 p7 m) q* C
  739.           dwStartUpSteps=3;# h" i8 g& `; z# C* ~4 s; [
  740.         }
    ( ~4 m" l1 e; C5 v' c0 b
  741.       }, {" Y! I* r) k: P
  742.       break;
    9 v7 G4 R, ?; C& c" ?: X
  743.     case 3:
    1 w. j5 d5 q' f  W1 |- \
  744.       if(!Dn.Connected())
    0 j  a  g4 a6 c
  745.       {
    * M  ^  [9 g* U2 z# j% s5 n/ B7 m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! R+ @- J7 @( o- [( [* n3 D
  747.         dwTotalFiles=1;
    & x. ?' F. v* O* ~0 R6 q9 l
  748.         dwDownLoaded=0;
    8 y$ F+ U3 S# W/ U, Y& C' @3 H# C
  749.         bSilentStep=TRUE;
    2 Q# y1 }/ W$ Z. T. m# P9 \3 t
  750.         bCompressed=FALSE;7 H, I  Z$ l1 b5 b
  751.         strExtLocal.Empty();
    : |$ f, p5 h; M5 e! Q( r' p
  752.         strFullName="checkversion.txt";5 V3 E* }3 D3 C! \" D
  753.         dwProgramState=AP_CONNECT;; X+ d1 L' D$ O# n
  754.       }
    # L5 n% h0 Z. F
  755.       dwStartUpSteps=4;
    / Q7 V$ x$ Q; h1 G
  756.       break;. ~: D8 p3 m$ N( a. F, B5 Z6 {
  757.     case 4:
    ) J% e) n. O+ o/ v
  758.       {) k4 Z; v+ l7 Y4 R1 o
  759.         FILE *fp;' m, H5 b) T$ Y6 s' w; \- w
  760.         char szString1[128];; k# r8 s, n1 j* j3 M
  761.         char szString2[128];5 z. S( W9 R/ X2 ~0 `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 k- V8 z$ M6 j1 _( R! ~
  763.         if(fp)5 `& C# [: ]8 @
  764.         {
    7 f/ s6 r9 r8 v# S) U- f
  765.           fscanf(fp,"%s",szString1);# q: w( M# f7 g7 y9 k! t
  766.           fclose(fp);# {/ H& L. H7 J# \7 W7 w
  767.           fCheckVersion=atof(szString1);
    7 W3 B- i3 K9 g2 i: r4 x* ~  _, X2 Q
  768.           fp=fopen(".\\checkversion.dat","r");
    6 W& U% f- o# q1 A
  769.           if(fp)
    ; A- `2 I+ k# A) k
  770.           {1 ?- y. v0 o5 e' e% N4 z1 T
  771.             fscanf(fp,"%s",szString2);
    6 P: @3 d2 m# i) k
  772.             fclose(fp);
    2 D9 C. |. r, c0 X& ~! |
  773.             if(atof(szString1)!=atof(szString2))7 p" b6 u* q5 J3 h$ M
  774.             {% x- z/ v, _4 {" C  k. S
  775.               if(!Dn.Connected())$ [7 H3 U! S6 M. O
  776.               {
    9 Y4 b+ A3 g6 K$ R
  777.                 bFirstUpdate=TRUE;! Y' f. M3 }3 I4 G, U$ K
  778.                 dwTotalFiles=1;* @/ U8 y% L: s+ a
  779.                 dwDownLoaded=0;! X: y. E! e9 G0 i" c
  780.                 bSilentStep=FALSE;1 X2 c8 l/ v8 X$ M5 w3 l$ q' G
  781.                 bCompressed=TRUE;
    # |. B. Q( I+ Q. M' t  e1 A$ P, k
  782.                 strExtLocal=".\\DownLoad\";0 a& f* C  q; n
  783.                 strFullName="update.txt";! H) N8 f# a3 d& g8 O2 t$ H1 b
  784.                 dwProgramState=AP_CONNECT;
    ( g/ b0 H. N' d1 Y8 E) H9 p" O9 d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" K. J% s2 }- Z3 d* z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. O8 S' W  W' m( `1 V5 Z+ w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 o0 \8 [, |# M
  788. # `9 b7 |8 M* I6 @1 j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , H, r0 J4 K+ Q& Y# L0 X- C
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 W6 v; t- t0 e5 r( T. |8 T6 p5 J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % b, G" ]% Q6 C$ S
  792.                 {. \0 \8 ]9 ~4 @! q6 S6 z$ Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 v! u% R2 Y% R8 k# d( _$ D$ o
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* i5 j7 V+ J' u+ p1 p8 V! d  [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; ^( `: Z4 g/ }# ]3 Z3 t9 c# l! N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Q0 k/ b0 l- f0 @

  797. 4 Y% z) S4 C% s7 w" e) s0 n6 n5 ^$ B( h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # h! [: C* ~2 g
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. @4 S& T0 I7 a
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) P5 E! G& \2 t7 W( f/ [/ w
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 i7 o& {8 x9 C0 l/ b) m
  802.                 }
    ' j$ g, O7 }8 c3 Q6 A
  803.                 dwStartUpSteps=5;6 O/ }& b+ M  H
  804.               }0 |! f* c# V9 j6 s6 {1 W1 a* R
  805.             }
    0 \! s- J" q( A9 o0 w- D4 `
  806.             else$ i) n0 v' a4 \  {4 y
  807.             {! m! J. O3 ?# ~% r
  808.               unlink(".\\DownLoad\\checkversion.txt");% e8 |+ P3 K. ~( D$ U% l1 v  c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " Z  b0 e1 v0 |2 D' x# i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 R7 v& _% E" a5 \- {* \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % Q* V7 k! ]- l& _2 L7 {7 D" E

  812. 9 V. m) f% n, R7 h% n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 R) v( {; V. T
  814.               dwStartUpSteps=99;
    # n3 B) t! h5 A1 a! ?2 }- r
  815.               bFinishUpdated=TRUE;# {5 u0 E6 }$ W& G
  816.               bCanUpdate=TRUE;
    0 \! O( c$ _# E0 p6 e( t3 m: h
  817.             }
    0 x2 Z1 i" v$ o9 k7 o
  818.           }% Z+ G+ i: I  u: ~- N! K, l
  819.           else- Z! }4 A; Q3 [
  820.           {' s' V. {# f0 d3 O" \
  821.             if(!Dn.Connected())
    % l* x7 v6 Z0 S. s8 [
  822.             {
    : ^! c" w& D8 W0 w& H$ |* ^+ A
  823.               bFirstUpdate=TRUE;
    & E; ?: S3 h# {& N. f' ?
  824.               dwTotalFiles=1;+ I) R1 `2 t  R# g4 N2 X
  825.               dwDownLoaded=0;! Z+ Y9 ~/ J% K$ |
  826.               bSilentStep=FALSE;
    : U, |' D8 s$ i. i0 N! d
  827.               bCompressed=TRUE;
    ; B1 ~! Y% h8 p9 u! V! ^; J" z0 ~) C
  828.               strExtLocal=".\\DownLoad\";
    , Z- h6 R- G; @' h* M
  829.               strFullName="update.txt";
    7 A& N( e# p: H5 z
  830.               dwProgramState=AP_CONNECT;
    ( R% Q4 A6 W0 k% Q2 f, S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 z" k' r+ |1 J% C6 F/ F/ @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      }, @$ |" L8 O; J, r* K/ i3 W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 c* w+ B4 J2 M! ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Z" ]+ }0 D; u& q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - T! `- N1 `# Q8 d0 Q- `3 Y: c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" X$ B& x# t  L7 ~
  837.               {8 c2 v9 w8 I5 D" I( r" n+ t! d5 p( I5 ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");4 }# V# I9 H7 a/ R$ j. e: k' n$ @$ [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ) Q$ S* Q" ^' Y( v& N' ~* \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / ~0 N1 |: K" }& l' Z: z" H5 _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( ~% ~9 c# `* c. ?( _
  842.                
    ! Y- S  r3 P# a3 K: t8 P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # J+ {- K7 ~$ }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 y" c/ N2 V- t- S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / f/ a# w; B' u  a, L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K$ Q9 ~- z: z& K/ B) d4 X# i
  847.               }. z% J7 N- ?# t' c. \. |8 m; I+ D
  848.               dwStartUpSteps=5;
    3 Y  r9 X7 B$ G- r- E
  849.             }% @$ i! y3 V0 q" ^$ E9 H, ?
  850.           }9 N. ~1 i1 t/ h0 G) P
  851.         }! o' B' [1 f: U/ L& ]7 \
  852.         else
    ; n+ u) ~/ h+ @" T
  853.         {9 s6 ]1 [) e, ]
  854.           dwStartUpSteps=3;8 D) v) P4 o! Q) ]6 Y0 o
  855.         }4 E# `3 t  T7 G" }% m2 @3 j" X' y
  856.       }
    7 K+ W0 @( V% G4 c( u9 E& _7 l
  857.       break;) S& e2 F& y' n- o' z
  858.     case 5:
    1 Z+ S0 P( K* o: T4 K" g1 c! @* ~
  859.       {
    6 F) a  u. s$ t" N% O. Y( S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 l6 i9 H1 b0 V' C' m
  861.         {
    $ S7 C6 N2 |; y+ m4 i
  862.           int opt_overwrite=1;
    5 i1 J6 A& u8 W* U2 ^
  863.           int opt_do_extract_withoutpath=0;
    0 V* [$ |1 I* m- |
  864.           unzFile uf=NULL;, k. w9 y4 d) e5 U4 r- s) I; v7 A
  865. 6 I2 ?! f# o! b6 V3 l8 S, E
  866.           uf=unzOpen("Wsa.zip");) q/ [- y8 X9 r& D
  867.           if(uf)( D0 `+ q3 m0 R* C; U1 z1 z
  868.           {7 N! t. A9 @3 i$ D5 W' ~+ j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 W- x9 }" k" ?, Q7 ]
  870.             unzClose(uf);. [/ e( K& k1 U9 i6 x
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 Y8 s9 r6 [" E" _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) \: ]- K3 ^; @1 n, U% T' @3 ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");" i5 `, `: g4 c! k( f
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + F' J* T% u7 V% j& I- C
  875.           }
    # N, C  e& G* G0 u$ B$ A
  876.           DeleteFile("Wsa.zip" );/ J. `6 _. U0 h1 @! g" I
  877.         }
    & J' }: |& T% t3 R- q

  878. , F+ H5 t4 C5 Q: @. V6 A. N$ Z
  879.         if(CheckLocalVersion())
    3 Y- X5 i: r- y" _
  880.         {0 Z- U2 Q# ~: W0 z1 |3 H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    + ~  @8 _: s4 M4 f& q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! c# w; @2 I5 N8 \, t) o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
      K. z# n/ [$ H0 h
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / L1 ]5 W1 N! J* ?+ A; H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);5 b" G2 ~! S6 X0 r
  886.           dwStartUpSteps=99;$ @# n- p. J3 V
  887.         }/ d+ l* c9 W# J: Q) g
  888.         else
    0 H. f4 I$ c0 _5 J
  889.         {
    * J3 L! H. Q, ?* v
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * O& l  z) S! v
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 z' |# H3 ]- @6 _3 {% U" ~
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");! C, n6 w* @5 {+ T0 y. w

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-21 11:41

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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