找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- N+ V. U) @6 _) F" ^, E6 p! G
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! N$ ~) I8 B& [) t
  2. //
    ( C, D* d8 m' G. ^! x% a
  3. ( x8 n+ Z  ?7 O$ f
  4. #include "stdafx.h"+ `9 H2 s) _* q: ]
  5. : O+ H3 ]3 q8 L; o" t
  6. //#define UNICODE
    # t0 Q  J8 v9 d6 F2 d& f+ c1 l- o0 [' O
  7. //#include <gdiplus.h>: ^0 r# Y0 `+ k, X: }" N" [
  8. //using namespace Gdiplus;) h% ?9 d! h2 I0 U% h7 ]

  9. # E% T# c# H9 S0 K3 J- u
  10. #include "RevApp.h"5 c' P1 q$ i& q3 x! Q% \! x3 f/ I/ [
  11. #include "RevAppDlg.h") A" H+ q& R- d. x6 m

  12. # G% v1 {0 v' Z* W- e
  13. #pragma warning(disable:4786)- k6 ^4 B& y$ S# m8 v7 f( Q
  14. #include <map>
    6 R0 v. O% T1 \: G/ Y  A5 i
  15. #include <list>
    + o0 }  w8 t5 J6 F/ h+ ^" q7 H+ G
  16. #include <direct.h>
    5 k' d. W7 Q3 a( ]- S, W% o
  17. 9 @" n: o, @) ~- K* u3 f
  18. #ifdef _DEBUG. t6 b( f$ x5 |
  19. #define new DEBUG_NEW
    & V8 a. c6 @' E/ b8 L
  20. #undef THIS_FILE
    ! ?+ X1 k% m( \) u3 w1 S" a
  21. static char THIS_FILE[] = __FILE__;5 P; `6 Y  K0 ]8 T! ?6 q9 `& M
  22. #endif% c% r- z5 }( }# {0 Q
  23. #include "SkinResDef.h"; Z- i, V- a  o- m. i
  24. #include "ChangeBG.h"
    % U' Z3 \2 N( Z' x0 Z  Z/ Y2 _
  25. #include "AFXINET.H"
    1 a. N7 o* @+ M" D
  26. 4 C1 ?4 p) m' ^' A* Z5 K+ c
  27. #define TRADITIONAL_CHINESE 0
    * [! y4 w  v' d
  28. #define SIMPLIFY_CHINESE 1/ B1 i! c* K3 @5 D3 y5 ?) p3 r
  29. #define ENGLISH 2
    ( V5 C! u, ]- M2 @: a% Z
  30. int m_iLanguage = ENGLISH;' q# Q: h# {* W& u6 j* N! r
  31. /////////////////////////////////////////////////////////////////////////////
    , y( }. ^, l* m7 n7 l4 W. r( \
  32. // CRevAppApp
    7 S: b5 t) P" N# O# _4 u
  33. " P$ C- Q# u9 M; d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , Y9 ~& x3 ~3 x
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ j8 k3 K  q+ K2 n+ J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    8 E8 ]  ~0 j, f! h' A$ F: _
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( k* E. ]* x. o$ }4 i( d# r
  38.         //}}AFX_MSG! x* t0 N" W6 Q% k/ i: {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % F1 \2 G' ~$ \; f9 `
  40. END_MESSAGE_MAP()
    % \( f, O) f5 w% R2 X. Q4 q
  41.   E6 g$ {' D% t! L+ z3 N" t
  42. /////////////////////////////////////////////////////////////////////////////2 @/ J2 K1 i. {
  43. // CRevAppApp construction
    ; p: e/ F- K1 |7 [0 C' J
  44. 8 Q3 Z$ Y/ o" @# j* N+ Q% }. S
  45. CRevAppApp::CRevAppApp()0 Z& m: z, `: D
  46. {  X: P* [, o6 @, ]0 k
  47.         // TODO: add construction code here,
    3 L% Q, Z; F5 T& h6 r8 `
  48.         // Place all significant initialization in InitInstance
    , u6 Y- ~9 F- t' z
  49.   bDisplayIsBig5=FALSE;
    " O9 B0 b1 y2 d8 C: O" W
  50.   bRestartUpdater=FALSE;
    2 j# X! V( c* |: A  N6 O- ?
  51.   bFinishUpdated=FALSE;" u$ w5 Z, T! W! J' D3 F
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 d$ I4 D, x0 }# u. k, Q6 u/ S
  53.   InitChangeDataBig52GBKS();
    % I9 R, _4 ]3 W: [# E; G( @3 g
  54.   InitChangeDataGBKS2Big5();
    # {) C0 ]3 r7 [
  55.         //
    # {  ?  `7 x& _, b$ k
  56.         bClickRunExe = FALSE;
    , I) U0 @: w# d% P* T# g3 P" B6 t
  57.         //- [  v; R; Z0 D/ }( Q
  58. }
    & Q8 n' v8 I" k, ?$ H6 }$ h0 ?

  59. / a& c4 `# h/ {& p1 t
  60. CRevAppApp::~CRevAppApp()
    " Z! x, |- L% @0 H/ b
  61. {9 ~/ U! a$ p; d. s9 s* x
  62.         // TODO: add construction code here,
    1 Z0 h  D- T- N/ s
  63.         // Place all significant initialization in InitInstance1 f- I/ D8 U; |9 W5 O
  64.   EndChangeData();
    " ]. x) ~3 v" y* t, r
  65. }6 a: T/ N+ v, t5 R4 a9 {

  66. + e* a+ J# x; y* i3 {5 G
  67. /////////////////////////////////////////////////////////////////////////////
    . Q# k& d  W. Q5 d- d+ Q
  68. // The one and only CRevAppApp object
    # C3 C4 E0 z% ^, @% R

  69. $ B% C8 a( `( x+ i7 S
  70. CRevAppApp theApp;
    1 [) U' ]/ ]* [; o
  71. ! R  s1 A- k3 d0 A3 w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 N! Q) V4 S1 L5 L2 }9 ]$ Y
  73. {
    - k0 U8 J+ D' ?" q! I
  74.   int iEOF=0;
    # `/ ?4 L5 X0 J% `% `2 y2 J
  75.   char szTempName[MAX_PATH];! {0 ~# k3 A, g0 q- C5 W! |3 z
  76.   *szFileName=0;
    * S' |& Z* x! W7 r# A9 h
  77.   iEOF=fscanf(fp,"%s",szTempName);; R& x2 e" y1 ~/ e
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . t& y  V$ M8 v5 Y. f
  79.   {
    7 o, U( y# c" R( [4 V9 R) n  q
  80.     strcpy(szFileName,&szTempName[1]);
    0 W$ z% N1 O# K6 t& \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 A+ I& @& [. {# s/ i
  82.     {
    - j3 t5 l; {7 |5 J
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! r( [6 d8 d: K" {4 l! r4 ?: D
  84.       strcat(szFileName," ");: |: n2 p# y  p/ w
  85.       strcat(szFileName,szTempName);$ h8 o. B  @1 U0 k" y, q( {
  86.     }
    " M/ ~3 u5 @7 R" o& J. c" u( A
  87.     if(strlen(szFileName)>=1)) t8 W( L' A" x
  88.     {; f& l" h( ]! c4 U% [
  89.       szFileName[strlen(szFileName)-1]=0;. O/ R2 b: a4 L, c- D' @
  90.     }
    4 j: q2 f, ^7 u
  91.   }# }; L; J+ e8 I5 W
  92.   return szFileName;
    $ G; P8 D  {; |% v/ l
  93. }7 S1 O- }- q7 [2 y* B# B

  94. & S8 j! g  O3 v0 E1 }3 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' y5 u5 O5 o/ M# G( j2 b3 L3 ]& e  ]
  96. {
    1 K" W. ^6 T. j$ b
  97.   FILE *fp;- {* w% Z( x2 M8 E
  98.   char *key=NULL;
    # \/ s& J5 w, ~$ s! ^
  99.   char version[MAX_PATH];+ r; q& ?1 o+ P' r& |, R
  100.   LPUPDATEFILE file,olds;2 n+ a5 `" F8 V/ B' H/ d1 l- C
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 B( G/ L& i3 r# r% m( {# U2 Q
  102.   z- L9 A1 e& H' C! H# f
  103.   UpdateList.clear();! c) D5 Q. F' E" z/ a
  104.   UpdateFile.clear();, t+ a9 h2 [! D" U0 Y  V
  105.   if(GetFileAttributes(filename)==-1) return false;
    # A" _1 p$ w" L2 q# z) s* i2 n$ x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . m& G4 o  L" z/ T- @" ?
  107.   fscanf(fp,"%s",version);
    7 D" B/ S% P, T# D+ J; m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: q& E# k; G1 O, u1 ]6 |
  109.   while(fscanf(fp,"%s",version)!=EOF)
      o, b, J" l/ V9 _
  110.   {& E* d( ]* A# ]. G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! U# `& }, ]- c
  112.     fscanf(fp,"%s",file->path);0 W. q* U8 I# _( W2 `) u
  113.     ReadFileNames(fp,file->file);  X- t  y2 r& i, S) f
  114.     strcpy(file->full,".");2 Q; y! n- [7 @! C# r
  115.     strcat(file->full,file->path);! |1 ~7 y0 d! V' u0 i' z; n
  116.     strcat(file->full,file->file);
    : I% y4 g$ m1 {
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* y) D( B- J# @% ~8 {
  118.     {
    . R) j" y9 d& z  b# P9 c
  119.       file->vers=(float)atof(version);
    # s1 ~  f2 p! ~3 J: C9 o
  120.       UpdateList.push_back(file->full);3 V9 H2 y; k1 Y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# Y) o7 d, |& Y7 }' o" {7 \3 `8 q
  122.     }) x  a! U1 h- |* g3 I$ M% V
  123.     else5 W% h% c$ E8 P4 q: w" H  f
  124.     {
    6 y" ~$ B& c3 ]" }% C
  125.       olds=(*p).second;
    5 y$ j$ E$ W: `: n) t
  126.       if(olds->vers<(float)atof(version))( S, I6 D  ~/ |6 w1 K* e
  127.       {  n9 Z/ S, Y* n9 ~( k7 a
  128.         olds->vers=(float)atof(version);
    4 y3 v. v! {5 U% o+ s( v4 k9 u
  129.       }$ H- J% h6 ]' d2 X: Y6 x* y
  130.       free(file);
    0 h$ b4 |1 y6 g! V/ C9 z7 r) o2 z
  131.     }. [' j, T9 D1 H* M$ r: o7 i
  132.   }
    % l# w! s( W4 V9 ?
  133.   fclose(fp);
    " i. ^; `, e% B& ?" b9 d' m
  134.   return true;6 U' c; A8 u9 Z0 V( W4 P
  135. }; |6 A$ q$ B1 t1 i. g! K
  136. ) o" x+ H' c1 S% j, w3 Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* Y: c7 A5 D: g$ @! ]" W
  138. {
    0 v. P1 n1 M5 @$ N
  139.   TCHAR  szFull[MAX_PATH];
    ( ]1 M, }$ }* [0 j
  140.   TCHAR *token,*inter;. t- r; V/ p$ x5 _# Z7 X0 C* N( W
  141.   *szPath=0;
    / d1 X# B( a0 y$ }
  142.   strcpy(szFull,szFullPath);
    ( D+ o# T( O- i8 w1 \0 }% p! z1 r' J
  143.   token=strtok(szFull,"\\/");; x/ p: Z7 _8 p* v+ z7 h. N5 G
  144.   inter=token;
    . j% i' Y8 Z1 E+ \
  145.   while(token=strtok(NULL,"\\/")); o4 u6 L3 i4 g, A3 L: H
  146.   {
    $ B" |' N) V& Z/ K6 y5 ]
  147.     strcat(szPath,inter);
    + |; s% j0 B, u# [8 q) R# l" }
  148.     strcat(szPath,"\");
    ' h' N; `# U9 q. x$ E  p
  149.     inter=token;2 s0 \0 d3 L, Q4 L0 k0 R
  150.   }
    9 b9 S4 A3 u2 i7 x! s2 e
  151.   return strlen(szPath);
    , a' C  `/ w1 H  b
  152. }
    1 m7 ?2 l% }0 R+ @* q. Y5 p" y
  153. . ~# e2 Q4 Z$ w; k: c7 K7 b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 ~% B+ `( M/ F. c7 U; p* C! k( |
  155. {' J$ R3 h+ @( E- [- r% s- ~4 l3 ~
  156.   DWORD attrib=GetFileAttributes(Target);, {" ^1 z% }# J% y
  157.   if(attrib!=-1)
    2 L- R* @. c" ^  ]
  158.   {  a" ]( q% a7 i3 o& z2 K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! k" p4 F* B; O8 v/ {% l
  160.     {" m) R3 e/ x/ }; u7 Q$ M) ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' N$ v) _) k3 E9 @9 _0 v$ O
  162.       SetFileAttributes(Target,attrib);0 {3 s+ [' W8 N9 }7 X9 B6 F: N5 ?
  163.     }
    0 [; o$ U6 h! F$ y( N- h
  164.   }& \. `5 i8 n) h0 j/ g
  165.   CopyFile(Source,Target,Erase);
    & R% \( L1 W; C8 E6 f' m# f
  166. }7 a) q/ u+ |4 }8 ]: J0 Q5 K+ e7 R

  167.   n9 X0 F: ^1 h6 j" k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 O8 h3 S7 k7 [3 W3 S
  169. {
    # f- K/ D; [5 g
  170.      FILE *fp;3 \) s) A$ J) G, B
  171.      char  szBuffer[8192];
    : J' F2 @0 g4 Q
  172.   va_list  argptr;0 P) e4 Y% x5 d% m) {/ G* i8 I

  173. 4 Q; l: _  q( k2 A. g: Z
  174.         va_start(argptr,message);
    & i3 o' K8 s5 Y0 q, n: C; D
  175.         vsprintf(szBuffer,message,argptr);, M* H8 V6 c5 }6 q2 ]9 Z' A. Q
  176.         va_end(argptr);( p8 H' s" i9 g8 I
  177.   fp=fopen(FileName,"a");6 Z* Q+ o& {7 L" f9 ?
  178.   if(fp)2 p+ c' z/ ?2 h# a. J8 p
  179.   {9 [  N+ M% y$ x, E: e' w5 ^: e
  180.     fprintf(fp,szBuffer);( H9 y/ N: |5 G1 j  i
  181.     fclose(fp);
    4 K/ U$ _  u7 M  b2 x2 ]
  182.           _flushall();
    , I2 I. ^/ ~# T0 o5 |8 S
  183.   }8 L7 a8 a; A3 v2 a: R5 R
  184. }
    ' |$ c/ K( i( b( z1 B! s+ ~

  185. ' U( a8 p+ B# F3 o% m, o# ]0 Q
  186. BOOL CRevAppApp::Fclearf(char *FileName), @0 n0 P7 C4 c7 L7 C( V: l  G
  187. {( f- l; [4 k4 |6 G3 ~% f
  188.      FILE *fp;
    7 a! S! Z$ A1 C
  189.     DWORD  attrib;
    # L4 e( U' m+ p6 |9 ~) t& r
  190.   attrib=GetFileAttributes(FileName);8 k& A2 s3 v, s: D% k
  191.   if(attrib!=-1)
    ; d' m8 N; y% T( M7 Y
  192.   {3 X$ G# E6 W  ?' `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; Z/ y. Z# u* l' q3 p; _
  194.     if(!SetFileAttributes(FileName,attrib))8 n1 z7 e. ]; t/ ^3 d
  195.     {& t5 t6 F6 o7 S! q( m8 `
  196.       return FALSE;
    $ Q# d( q1 R7 J! d0 |& e
  197.     }: ^$ b4 H, ?8 ]& s0 l2 |
  198.   }+ y( o) R' {; d; X; ^' A
  199.   fp=fopen(FileName,"wb");8 H/ _2 g0 s; H( h6 t7 S3 v
  200.   if(fp)
    6 a7 o5 k( z/ h  d+ |8 r
  201.   {5 u% o9 o6 R2 a8 ~5 k
  202.     fclose(fp);
    % b5 W& H& o7 X+ o8 l/ W
  203.   }2 s* L5 z7 T8 W- k
  204.   return TRUE;, e+ l3 j# ]2 P% ^* J1 k
  205. }9 D( E3 |2 n$ S
  206. 2 k( i0 z/ I( u, z8 o. }
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + e1 O  x/ Q  b' E
  208. {0 [: q1 Y" a0 ^) g# a$ Q. `
  209.   char filename[MAX_PATH];
    / h5 U( K, U0 X! Q' {4 _9 e  [) W
  210.   LPUPDATEFILE file,olds;5 T) i) A, S3 I5 ?3 B+ ^. C. B8 e
  211.   std::map<int,CString>::iterator i;2 E( b  u# R+ q& ~) M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; d9 O1 q& ?; o8 C" ?
  213.   std::list<CString>::iterator l;
    - b9 m" G0 {5 B  T

  214. : K- D: U" n/ r% r
  215.   if(bFirstUpdate)
    ( B0 L7 y, r4 p$ E4 w
  216.   {/ H, c3 C% \% C& A
  217.     dwCurrFile=0;& ?/ ]# W7 _; z8 q4 \
  218.     bFirstUpdate=FALSE;
    0 P. Z' H: W' X' j. R0 p$ ], Z+ G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 r+ d9 ]8 ^( t: Q
  220.     {! e% X7 v7 V7 K- k
  221.       dwTotalFiles=UpdateLocal.size();% H% {/ S. N- Q- R
  222.       dwDownLoaded=0;7 h. I: X  M% S4 }
  223.       bSilentStep=FALSE;
      \+ W  d& z" |5 O& J7 z
  224.       bCompressed=TRUE;
    % K: b4 i. s! _- f& M& A. f  L7 r+ t
  225.       strExtLocal.Empty();1 w. u( X% B3 [# w2 B1 P
  226.       strFullName=(*i).second;
    ) Z, o  r  }; J' z8 `) o1 S/ H
  227.       dwProgramState=AP_CONNECT;# B2 z3 i6 B; j4 X7 r
  228.       return TRUE;
    : y5 w9 _# v/ a4 u/ F8 y, B' L/ z3 Z
  229.     }
    - L4 \$ l/ b1 e
  230.   }" S# ?2 W9 |  x0 X! z0 t2 b; t
  231.   else if(bRestartUpdater==FALSE)& G. a! q$ H. ?
  232.   {7 K( }, R: m) G$ }" {
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())+ y" u3 B7 x6 ?* _0 u
  234.     {0 Z) w- F8 z' j; E/ w
  235.       file=(*p).second;
    & }& k0 l% L' ]; y: J# w9 N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    $ F- [1 x, {+ j4 \! U* k
  237.       {, ~- z7 F. w# {/ Y) X
  238.         olds=(*p).second;
    7 ]4 P9 F+ k6 i7 P) P
  239.         olds->vers=file->vers;
    / P" \% `, j* f" |
  240.       }# t9 i# {  j3 O; V  @3 V
  241.       else/ D9 B! `+ `, v* q5 }5 M
  242.       {( J2 B' d. ?. o2 N4 w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( c% U" W7 }* M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ q* c+ b6 J" }6 J7 r% _
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' l. O# K1 _; s: ?) P
  246.       }
    $ h: e- z# n0 T" k  @+ R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) h% a: |. T! j6 D. m" L
  248.       sprintf(filename,"(%s)",file->file);
    : Q/ W6 ~$ a9 B$ }  i- }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ p0 J: T" |* i2 Z! A) k- K! R/ \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 M8 D# Y( P6 |+ ~5 `8 t3 b- d! O
  251.     }
    1 T) C3 x% T0 i. B4 Q8 b
  252.     dwCurrFile++;
    & g3 M$ |% z5 j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : h- ~% R8 f8 N
  254.     {
    0 x& S) D, ?$ q& e) {' S( Q
  255.       bSilentStep=FALSE;4 n& Z& T, r* i5 _- o
  256.       bCompressed=TRUE;
    : K, W' N/ V3 ~* w: X; ?
  257.       strExtLocal.Empty();4 u0 ?3 K* y+ B! [
  258.       strFullName=(*i).second;
    ; V  Q2 d, m4 b8 k
  259.       dwProgramState=AP_CONNECT;: B( S& P# ^% `8 O! {3 T1 {
  260.       return TRUE;
    ! i0 i3 Z4 U, G8 m# }
  261.     }: V6 Y, u2 H- T) j/ a
  262.     if(!bRestartUpdater)
    % ?1 h7 Y$ Z- O" M
  263.     {- y. r* y7 ~+ ]" j; a. x
  264.       int iCurrSize,iFileSize;; G- ^% Y7 @# c: K* [4 b
  265.       iCurrSize=0;
    4 Y' O! N2 B: ?# q, q3 ]  R! Q
  266.       iFileSize=UpdateList2.size();: x1 X: F3 |# z  C/ `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ V5 M/ `) F) ?% Z  K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; `: N3 c8 a$ W% r: w" V, H* p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 m4 l" P& Y: u, s& D  Q/ Q& _- D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( g; H" S: S9 z6 K1 |
  271.       Fclearf(".\\update.dat");
    6 z- a* z/ ^) r5 o! {
  272.       Fprintf(".\\update.dat","Bloodyf\n");# z1 Z+ \* l6 Y& ~1 W2 n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( s2 U: C' G3 M* R
  274.       {
    9 @; a3 ~" D6 X! |8 N; M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 r1 @2 a+ N' |
  276.         {
    6 @: M0 V/ ?( {# F3 \* u3 l
  277.           file=(*p).second;; d/ T2 ]# r! P" e$ v
  278.           sprintf(filename,"(%s)",file->file);% h; i0 x" X0 U7 u+ S8 q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 B4 _9 B: s. Z, F' ]
  280.           iCurrSize++;
    ; s2 x( X+ a% Z3 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 v% ]0 {; W6 c8 k+ W
  282.         }' V6 y9 R, V" R4 A0 O6 M; D6 D1 V
  283.       }
    : W* h2 q9 g( ]7 S7 P7 |' s) R" M
  284.       unlink(".\\update.txt");4 I. D- O3 {. x1 f# H
  285.       unlink(".\\update.tmp");) ?1 V! G) P' G& e% {
  286.       Fclearf(".\\checkversion.dat");7 P  v$ p3 U  _5 W# g7 P" ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" A/ P) F* E8 t# r
  288.       if(UpdateLocal.size())
    - b  F; r, o! p/ C4 @" Y! ?
  289.       {
    6 k* l% Q7 T9 {2 N
  290.         UpdateLocal.clear();
    ! ]1 A0 q" u# R' X; L
  291.       }$ }. O" n* `5 m
  292.       if(UpdateFile3.size())* b5 C( h2 p0 A# w
  293.       {
    * h" Q! w) C- P7 l+ r3 V6 g- q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 A+ T6 {9 b+ x
  295.         {4 V) Q9 u4 G$ j
  296.           file=(*p).second;! X+ X2 g* g/ j8 [- o
  297.           free(file);# j  Z: U+ W3 M8 m
  298.         }8 G1 b8 n- w! _2 Y9 _4 g7 m: u6 y
  299.         UpdateFile3.clear();% a( P2 H5 E. V+ V
  300.         UpdateList3.clear();
    : @1 K# z3 y! y$ [* ^$ g
  301.       }
    & u( _; T" f  h% O/ [7 m* {( r! ~" [
  302.       if(UpdateFile2.size())
    7 C( d3 O$ g, a+ q3 D( B( e$ Y
  303.       {
    3 l, d" w* C4 t7 w# X9 U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 `6 D7 D/ \2 z, I3 Q3 Y) ^2 Y
  305.         {
    ' @; p) m+ i9 J# H
  306.           file=(*p).second;6 @. u. a9 W  P. j
  307.           free(file);5 x. E5 l4 |5 }
  308.         }
    $ B3 i0 k3 E8 [9 i! T8 [
  309.         UpdateFile2.clear();
    6 f% r: ~9 ?' p! w1 O$ o' N
  310.         UpdateList2.clear();
    ' a' V) |6 B0 |  ~; e( U9 i$ ~- H
  311.       }
    % @( Q4 N6 u5 S8 c$ ~: j
  312.       if(UpdateFile1.size())
      o7 W, ^) s( Z7 I3 t- G
  313.       {
    * n0 c+ U9 i# ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* F5 _' [8 d0 ]9 H  r# P
  315.         {
    # w7 D6 z# X4 y; b; @8 ~9 v) n# g6 k
  316.           file=(*p).second;( O- T0 [* B: |& ~, _$ C
  317.           free(file);
    2 P; Y; ~# T7 e# {' o9 u0 r
  318.         }
    4 `' ~. t9 l% V2 t$ ~) T  ]
  319.         UpdateFile1.clear();
    ( S+ B; F4 \) e8 I+ F
  320.         UpdateList1.clear();" {9 t1 T& L6 c5 K; r
  321.       }
    5 T- h: e5 `2 U. F# V. k" Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' y' x  {7 _/ C# D
  323.     }4 \  F0 d: L5 `  E) E
  324.   }# p9 O7 `6 l. X" \
  325.   return FALSE;: k. F6 R6 ~5 x  e' E
  326. }; Y+ E8 S, V( b/ q2 H9 R

  327. , `5 q, X4 E- l( a8 f/ `
  328. void CRevAppApp::ClearAll(void)
    6 e4 _8 B- R, |( f5 k- i7 S
  329. {
    * M0 m- _' D& o; e/ {' o% ?
  330.   LPUPDATEFILE file;
    * w2 t( W2 l. {! |* R  F2 D" V6 S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . u, C8 i9 B6 k/ ~- x+ r8 V
  332. % f( i" N4 }+ Q+ i' n
  333.   if(UpdateLocal.size())8 T7 M6 N) e/ ?' j
  334.   {
    ' c# k! p& j0 @" n1 w, v/ B
  335.     UpdateLocal.clear();2 M) m5 ]1 G! i# K  Y
  336.   }! C% Y" J/ }5 H
  337.   if(UpdateFile3.size())7 `% {5 x' l" ?0 a/ _
  338.   {# Y0 d2 u, _' e& Q/ s& t. C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' O, K' b' t: o' C* G
  340.     {2 V( p4 [0 f/ |) X! k/ t' p
  341.       file=(*p).second;8 y" O& p8 x, }! \
  342.       free(file);! G( K- T+ J1 M2 H$ I& s' G
  343.     }
    / a6 X2 e+ b  x) [+ N8 ?+ C
  344.     UpdateFile3.clear();
    ) @, x+ f/ N/ e% \/ f
  345.     UpdateList3.clear();$ `8 y$ e" n+ f; R: \7 `
  346.   }
    ! Z4 d3 C. J( a; L
  347.   if(UpdateFile2.size())3 h1 G6 [9 p0 @; S0 \. Q, a5 W
  348.   {
    % ?* F$ h. V' C: C$ K- T& d; q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 |6 y1 y' p( e% K# v
  350.     {
    ) |  |& @3 C+ o- v7 Y* R. h
  351.       file=(*p).second;/ q- }4 I% f0 x6 Z# Z& H
  352.       free(file);2 _- m: Q# c3 g$ ^- S$ O
  353.     }. c6 t5 t, |! h  P- X/ n! i
  354.     UpdateFile2.clear();
    " _. d; q; a$ c! Q  ]
  355.     UpdateList2.clear();. U/ A6 A; O% |, p8 I
  356.   }
    4 m% S/ N* k/ h/ L4 N2 ~
  357.   if(UpdateFile1.size())
    4 F* Z9 [7 O6 T: \3 {7 f
  358.   {* [8 m) a# s1 c, P& p* v& o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( ~& Q5 J! I+ s$ ?. v
  360.     {
    - [* ~+ j2 `) }( J, U% R1 J! T& |
  361.       file=(*p).second;
    , \) K, V* N8 ]2 m
  362.       free(file);
    1 T" q' x* }' j6 F0 D1 T
  363.     }
    4 @% w4 m2 z" b( @3 H4 P, E$ v
  364.     UpdateFile1.clear();
    / H8 M7 I) c! U3 z9 w- A4 L3 T
  365.     UpdateList1.clear();$ Y; R1 w+ i: }: l! T
  366.   }/ L2 d" C4 r* i6 ~' ]7 _  V6 }
  367. }  
    : Z  C8 c0 F* K  o: q
  368.   ; Y; Z5 I- V5 l$ Y; d, ^
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    1 d- J' x% C6 ]$ W( U1 K
  370. {
    $ e' o/ `2 C# y" u4 L0 ~1 W
  371.   int c;2 k0 i: Q( w. y$ K  F! t8 e
  372.   LPUPDATEFILE file1,file2;
    & h/ ~9 w$ q/ p4 h- ~. S; {
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" }6 C; @) A4 F+ ?
  374.   std::list<CString>::iterator l;& i7 Q- A+ e0 C4 F7 c% y: T' c

  375. 7 A% ~- N( [  H* h9 A
  376.   UpdateLocal.clear();; F! w: e2 C( Q) C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 |8 b% h/ U5 b5 x2 D# n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' B# W6 J: [# M8 O4 X, Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : y" v3 }( C0 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 @+ e4 O$ D7 f* A2 f1 L5 a
  381.   if(UpdateFile3.size())
    - O1 Q% R& f7 M, u$ R- X. F
  382.   {
    * V5 M( i: k. k, X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 K  @& U# j: B6 V
  384.     {
    0 M2 D- y3 m4 w$ c$ s2 o- P
  385.       file2=(LPUPDATEFILE)(*i).second;" A- j/ ^: ~  n6 @' z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 ]  @; ~: W- w2 F6 b9 t; o/ ^7 S
  387.       {7 j, }8 ^# D- R/ N: ^, D) x' \
  388.         file1=(LPUPDATEFILE)(*p).second;, h! y( n' {+ F$ O5 c: ]
  389.         file1->vers=file2->vers;. o/ K1 s# E- G) X  z3 A# X6 |
  390.       }
    " s/ ^. t7 y9 O  F) A6 k
  391.       else
      i, d+ y- Z/ q2 a
  392.       {
    : u% `" V6 z. V- R5 T+ _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ k" ~/ A* L- \* d9 z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' [! N) T% t/ A( b# }3 t
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( J2 B. e5 A$ X1 G9 v( `
  396.       }8 c; Y: Z; C5 ~8 r3 t8 f
  397.     }
    7 ~% V( L* ]& Y
  398.   }
    # R; C( S: F+ m9 X& b( a4 l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 i# f+ \3 B: s$ t- M/ I0 M
  400.   {
    + }* N; A7 Q3 e0 m( }" E" l
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / m6 j  _1 \1 F2 ^
  402.     {$ m' ]7 n- E7 B2 Y/ M& }/ F9 i
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) N! G2 J/ o# x# a. x% S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , g% t# T( b2 H# |' n+ K& t
  405.       {+ O3 ]9 s0 S0 }" F- [9 I
  406.         file1=(LPUPDATEFILE)(*p).second;
    # x) L2 P+ [9 @9 C8 k9 Q
  407.         if(file1->vers!=file2->vers)/ m( @3 h" o6 P! T
  408.         {4 s( L7 O) U8 C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" i+ t5 M8 s9 ?, ^/ Y$ I2 D" |
  410.           c++;
    ' }9 b" y# v; ]# I# h0 G
  411.         }5 o  ~; f2 {+ N4 u' b: c8 V
  412.       }
    $ H1 d, O# _; l
  413.       else
    + ~8 `3 E0 V' ~! _+ {3 J/ }5 r2 e% O
  414.       {) l6 w6 R, ~9 P3 n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 S* ~# @! v( i" M9 s/ s' S
  416.         c++;$ c2 S0 n  q* g2 _: L6 d( ?) b" [
  417.       }' l! f9 l* M% |+ p6 ~
  418.     }
    ' t- ]: B+ K/ X9 R( K6 p: g
  419.   }
    : O3 H' u$ b1 u- e& O: ?
  420.   unlink(".\\DownLoad\\update.txt");9 \% L- V4 E! R" `% ~' C
  421.   if(UpdateLocal.size()) return TRUE;$ R9 o& [+ E" [- @7 {, Y' d
  422.   else                   return FALSE;1 A/ b" O' z& m
  423. }$ f3 s& Q% s1 `$ B+ S& N

  424. 0 G7 y+ r% O$ _* r0 p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 ]4 T% t& P0 A4 J& |! p6 V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' F; \; Y- W) x. B  l8 d

  427. 7 Z& Y( `  ]. q5 `9 _
  428. : x3 ~" J' N& ^6 k, t. h5 c* n& {

  429. / `+ a1 U5 w, l* s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 f1 Z# X, p# @8 h" p$ N
  431. {
    7 I0 T3 v- e6 C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % j: o5 k- I" J+ I( y( f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& p9 b- C' P& M7 T( v
  434.   {
    $ y1 Y! V% ]$ x: A8 U  Z6 i
  435.     char szLanguage[50];- N' m, O! A/ z/ y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' r, |+ a3 n% f# |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) z6 b1 X+ S# P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ P/ _9 d0 O( j0 s, h; ?4 V
  439.     else                                   m_iLanguage=ENGLISH;* K- h3 G% B+ J6 `8 D0 b
  440.     char szRegister[100];9 K+ Y1 a" C3 h- {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! o  K" S% H7 `" n# o& i1 d, V
  442.     strRegsName=szRegister;
    2 j/ `4 y& ^- i+ G, o1 K
  443.     char szPatchURL[100];5 s2 }) f: T! Y  r4 Y: x, J
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 }: U  E) v, m5 K, d% h5 U5 J6 D) J5 @. b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - r* T# P: ?/ S- d0 D* h
  446.   }6 e1 {( c3 L% b: c
  447.   else% @2 Q# u: d' X! s3 v
  448.   {
    ! a. D0 a. v. }6 }/ ~
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ c) u: K( v8 L& s- ~
  450.     strRegsName=DEFAULT_REG_URL;
    - p; j1 C9 F6 C5 J
  451.   }! L. @9 e0 {7 t: B) Y6 d. {
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 D* C4 _! K- X4 g
  453.   {  |; l7 T( a( t- j. ~. m
  454.     char szIP[50];: B9 i6 q* n7 S& ?8 L
  455.     char szDIR[300];
    ) A# b' A/ l5 O) d/ J1 j$ [5 Y! s3 x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& Y) ^) y- }7 u$ i
  457.     {
    3 Z& j) z2 q" n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ! m9 I4 C- M' L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    . ~0 G4 s, v2 D
  460.       strHostName=szIP;3 R! t7 A1 ?0 ?* |
  461.       strHostPath.Format("/%s",szDIR);
    ; F  U7 q' ]2 E7 [/ b. y3 M! [
  462.     }
    & E( t4 J  M  K4 w( x6 _
  463.     else
    . T! R. s  E/ \' T' @
  464.     {8 A# @+ w, S+ I: }* i2 m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # j( X3 o  [. m) L, F0 Y" b6 l
  466.       {* z; b, U$ a7 Z  ^$ @
  467.         char szLanguage[50];
    ) G) g' P8 b( }- C* w; @* ?/ J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ ]; q. i6 ?5 V5 ~; [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% X: Y( y& h# B0 e2 a, F
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 p& a! R) x" x" C' f1 f0 s
  471.         else                                   m_iLanguage=ENGLISH;
    ' q- n0 t8 @) F5 @4 @3 W# Y& c
  472.         char szRegister[100];
    2 v% M' {8 k% }$ c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. ]4 a& j' P; `; |" T6 h
  474.         strRegsName=szRegister;
    : g/ X" |4 @: z! @
  475.         char szPatchURL[100];4 X2 O" t9 ]5 Z4 `0 m$ N3 r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 ^& @/ |, M; `3 }% D  V/ Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 k+ ~# V/ m) A  d, M8 O) D# V3 @
  478.       }
    8 ~, T: S6 F0 D2 F+ i
  479.       else: X. ]% f: R3 _' @' P* J5 I" @
  480.       {. M2 x. x! H( r7 X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; Q5 Q# D* O4 q4 ^
  482.         strRegsName=DEFAULT_REG_URL;3 V3 R; u8 k: l: X2 e2 t- u
  483.       }3 z( h8 m& r, t. ^6 y1 r9 Z
  484.     }
    ; O# U/ z$ b; v3 q6 P" f+ C7 @) k8 O
  485.   }/ s- R, W4 w# m
  486.   return true;& `2 v6 e; z3 n+ d; k$ D7 ]3 l- i
  487. }
    4 [" L* A, G! E
  488. * X% L3 i$ h% @8 C/ f0 ]3 x( E
  489. #include ".\ZLib\unzip.h"9 e% ~  Q3 s, C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ V. K9 c8 _' w! u+ X2 q' o
  491. /////////////////////////////////////////////////////////////////////////////
    ; ?( ^9 w8 y9 P- G, B
  492. // CRevAppApp initialization
    4 v7 x; p5 I% _. q

  493. 4 B* j7 r$ ?3 J5 k
  494. BOOL CRevAppApp::InitInstance()- w6 X6 e" {) j% [* A" ]# j: v9 u
  495. {
    * Q" a( U  `; @0 Q. x7 K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, ]! G, q: \: D5 L0 v  l! f
  497. 9 l7 x! X( {4 h- J+ _4 t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 d+ L4 Z! o2 b( d) l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . A6 m0 \3 @' J' ?5 C% a
  500.   {. K* I6 f- p3 {3 W( w& e' x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 H5 G" z/ s6 v! N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / w- K5 D. U6 ^# S6 l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % e, n# v6 L/ a, c0 B
  504.     {
    " G3 }6 ^/ G! v" Z3 D' y
  505.       strcpy(szPath,szPathTarget);9 A* m$ X7 C. c8 H) b: l
  506.       SetCurrentDirectory(szPath);/ ^0 Z) J* [7 j1 a7 |) y  k' Q
  507.     }
    / M! d& i6 e1 o1 Z' l" L
  508.   }1 A0 Y$ ~3 R4 ?" ~' H
  509. #ifdef _DEBUG
    ! k! ^# a* F6 ~' b: o# V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); B- k# g& a" k. H, @) g8 W3 w1 g& [
  511. #else: B1 I2 ?" ]& L/ w7 R' [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 w1 ]( [) M) f1 o7 @0 ~
  513. #endif
    4 O+ v6 O& U- o1 ?% B$ ]. g# c# j4 i' D
  514.   {
    " F6 T: e3 C7 a! u: ^, U
  515.     char tempFileName[MAX_PATH];
    & s" a5 v4 `! Q) c
  516.     strcpy(tempFileName,szPathSource);
    ) u$ b8 j' a# _% ~& ^" F- l6 s
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % s' e7 b) Q" E: Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) ^7 m. y6 i7 o2 {0 s' M' X" r9 q; l# K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) F  @. P/ z! |2 @9 v5 S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : X3 G7 h2 ~! e0 f0 A) L/ C
  521.     return TRUE;; d2 r3 T. k1 l5 A( E" h! z
  522.   }
    . r0 W( P. _# ~: }/ \
  523.   // Nuke 0118: Delete run.exe
    ) @7 f. j" m! w' ~, F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# C1 I: U" Z/ G' Z8 Z& ?" s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- }( v3 Q$ ^8 p
  526.   if(!ReadCfgFile("Config.ini"))
    4 j5 G- n1 ]3 U9 O- m) h: i/ y
  527.   {
    . `( P, }6 Y- }  `1 j/ |6 b8 x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( b1 p% u% H9 c; N0 N+ B0 p$ ~5 l
  529.     return TRUE;; _4 r! z% G' P1 \' C7 N3 ]% v: n
  530.   }3 T' w. T( O! P7 n+ j& Q$ J: Y
  531.   HANDLE mutex;
    ' ], t9 N  K! w; L5 ?9 L9 p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 ^& y7 x5 C/ z6 r' Q4 Y. @- x
  533.   {2 U- J1 G+ N0 ?! z% M- G% w  v6 U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    , m! R9 b8 _* Z- q' s$ j
  535.     {' O4 `+ L' q( z3 b3 e) W
  536.       CloseHandle(mutex);3 B& B5 S% \4 n5 d- w1 u, x& T! C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 w9 f+ R/ Z* q+ y; o: `/ E0 s
  538.       return TRUE;
    ( J! [) R# ?6 y
  539.     }
    % I  }* n% A' G7 t( m3 Y
  540.   }  # q  H6 ~6 z, ?4 N8 U1 U" Q
  541.   CloseHandle(mutex);; k7 Q# S* b5 }/ s' n& v( q' m" d

  542. 1 U0 J' q: r+ w8 M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- b  f& G2 v# l" V- O- n% Q
  544. , C" V5 y6 w$ [  U! s, X
  545.         AfxEnableControlContainer();
    : B% e8 G9 P0 f- H& u3 t6 ?: a1 E
  546. ; G1 n0 [! R5 y7 C) }
  547.   bCanUpdate=FALSE;* @+ @" ^8 }0 P/ G4 s4 {$ Z; p
  548.   dwStartUpSteps=1;
    - V. Y' ]. E; v: [3 H
  549.   dwProgramState=AP_NOTHING;: M' O+ N7 m' ^! O3 }. W; w

  550. 7 l( |# [# D: [/ i! G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) i4 @4 U# R/ |' d0 H

  552. 4 ?% [8 z6 x4 b. s( b
  553.         // Standard initialization5 R: u( s/ ]1 S7 P0 h3 ^
  554.         // If you are not using these features and wish to reduce the size2 h: Q, b8 ?0 S2 ~7 P
  555.         //  of your final executable, you should remove from the following
    ) Q# t2 l' _) n. ?5 q# D4 _
  556.         //  the specific initialization routines you do not need.
    , {" P3 B: x9 r4 `

  557. % S8 l, q( G: w) |% k+ e5 {
  558. #ifdef _AFXDLL$ `, Q4 ?* f! P( Q- f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* `; ^1 U1 M$ U( g
  560. #else3 }+ M3 X* n6 g* r4 v) ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 J, x. ^- _* I8 j0 ^1 R0 w
  562. #endif
    1 a, n+ l/ h! B% B/ Z4 W
  563. * c4 T+ g% b) J
  564.   dlg=new CRevAppDlg;
    " p$ H$ f5 S6 I4 i( o
  565.   dlg->Create(IDD_REVAPP_DIALOG);' T% y+ c* S+ R3 ^$ f+ M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* `2 S8 P) ~, h5 }5 f( J# ^& o
  567.   m_pMainWnd=dlg;
    # }" t6 s) h# q$ j" x( t: ?) p4 ^
  568. 0 ?# Q" x0 }: H( ?1 q( R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! s% E$ y4 Q3 v$ d! o5 V5 j" F1 M
  570. ; I! |$ d8 S0 o: O  p
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " G+ F) U+ K/ P3 {  W% P
  572. //  ULONG_PTR gdiplusToken;1 W* O: f. T' y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 ?) S8 e* ~* U) U. k+ R: c

  574. & r6 x* y. z2 x% h- B& `
  575. //        CRevAppDlg dlg;
    % H- A+ t" P% F* r, ?3 ^
  576. //        int nResponse = dlg.DoModal();* x0 o+ R! x" O' o. Y
  577. //        if (nResponse == IDOK)
    5 P2 s9 R! |0 [( S& m  A5 _5 ^) ^
  578. //        {# T( s) j% l% W6 W
  579. //                // TODO: Place code here to handle when the dialog is
    . \0 y" Q/ y7 w- l- F0 a5 J5 @
  580. //                //  dismissed with OK7 }$ m: \* I* i9 H: r6 J
  581. //        }
    ; [: _7 U# K6 u- Y' h; L1 @
  582. //        else if (nResponse == IDCANCEL)
    7 ^# ]: ]8 \" l* T* U; V
  583. //        {% ?/ H* g  R8 Q1 H
  584. //                // TODO: Place code here to handle when the dialog is+ Q4 B/ \8 H. K% o' _" q4 d9 F
  585. //                //  dismissed with Cancel
    + Z3 U. G9 @; h7 u0 C2 A+ K4 V
  586. //        }
    2 C8 c5 T9 [4 ~( }3 k# I, E5 T- \

  587. 8 i2 j. \9 u' S+ \$ B) ~# D
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 }' M% D5 n# w4 G6 _. w! O
  589.         //  application, rather than start the application's message pump.2 u: t$ N( e3 e: ^8 G" \; P" z  `
  590.         return TRUE;, t! ^# ~" Q7 d! u; R4 h) @
  591. }9 `/ v4 T' ?- g& R

  592. ( n7 z& ?! J( P. g! a% j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 \8 w9 i# H* D# H. {
  594. {$ Y: A% J) |  I5 C3 n, \4 c% v: P
  595.   int i;. K2 R& W/ G  F' x; E% c
  596.   char *szRet;* X4 ^, N& n* t7 @
  597.   p7 M* i4 T: R; H* G0 r
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    7 K, |6 K  {5 I: Z
  599.   if(sztoken)
    4 ?+ i* p& e& M0 o8 i" Q3 p
  600.   {: [+ ?) q+ I2 u' m
  601.     szRet=&sztoken[itoken];$ O; U7 `" U, N+ n4 y' M
  602.     while(sztoken[itoken])
    $ ]( A7 H( _* s
  603.     {
    ( L' q4 s) @6 f$ t
  604.       for(i=0;i<(int)strlen(token);i++)
    2 ~9 [  m& P: [" f' t( u6 [, e, j
  605.       {$ `/ ^8 Y! @& F, y) R' s5 K1 ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 u7 g: D. a; `' \6 V! z
  607.         {
    + t3 l: }8 ^( U$ b. x, D
  608.           sztoken[itoken++]=0;- q+ w# d5 s. B, f( ]
  609.           sztoken[itoken++]=0;
    + K" i3 ]5 i6 l1 y* n
  610.           return szRet;; @1 i( o1 V3 ?# A1 P$ O- x3 j
  611.         }
    % A8 }3 F; ^  j8 I; s5 k# C
  612.       }- w; a0 k7 s; v, v& v; @6 W
  613.       itoken++;
    ! O6 m1 H$ A( T. c* P! [# ^7 G
  614.     }2 b- n, e8 A' @% T0 {
  615.   }
    9 F: d: M% N7 A& B; t
  616.   return NULL;9 s% P- I/ w9 z2 l; ~8 N
  617. }
    9 H5 q! n8 m9 E7 w& T* N" c2 C* O
  618. % E$ Y: V$ ?. q, t+ e
  619. void ProcessProc(long Total,long Current)
    & x2 U4 c) B2 O; @
  620. {. k2 F, @0 p$ e/ ]! p
  621.         MSG msg;: k* X4 W  ?8 f: ~& P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);# A" w0 y& k& E# n% }6 m$ N+ L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) R1 L; w: V; O7 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 e" g( Y( l% w- u. d8 l
  625.         {, }+ I* }0 ]& \* ~
  626.                 if(!GetMessage(&msg,NULL,0,0))* c5 J' F8 Z1 V' B7 P& E
  627.                 {
    $ c5 z( q0 C- D4 g& ]
  628.                         return;
    - M8 v, O' h% l) H
  629.                 }
    & `( d0 O8 |5 M) O! ~& j; L
  630.                 TranslateMessage(&msg);1 E* q# {, @+ S7 H& ~( g
  631.                 DispatchMessage(&msg);
    + h% `5 t; t# ~2 X, X% N
  632.         }       
    & W5 x" g6 u) O6 B$ v3 e/ ~
  633. }; O" v& c/ Y$ Z0 U

  634. , E' x1 r; f. B
  635. BOOL bFirstChar=TRUE;
    : k% R& |- k5 `6 X

  636. 4 m; H* j' `# a9 x/ V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' [" g% r- w* R4 e! a
  638. {
    * d2 c, c# K' t  X9 m
  639.         // TODO: Add your specialized code here and/or call the base class9 a% X% Z( T* q0 G2 l
  640.   switch(dwProgramState)9 ?% Z+ u- ]5 d9 G# l% I
  641.   {( t( H  P& C! H
  642.   case AP_NOTHING:
    - V) h6 J" B# I' \1 W! C
  643.     switch(dwStartUpSteps)
    ! {/ K' Z6 k- Q& Z$ u
  644.     {! y; ^* C; C, f3 b: i6 G
  645.     case 1:
    ' a$ Q" d- G+ ]
  646.       {* x3 e- ?. O# l2 l* U1 X
  647.         int i;! i, o* x. j5 {4 {- p" {" S7 A" ^
  648.         CDC *pCDC=dlg->GetDC();
    % B  c. N, R# I* X! W# F
  649.         HDC hdcwnd=pCDC->m_hDC;
    2 h2 F, F3 q8 P+ ?/ x% `# a
  650. //        Graphics graphics(hdcwnd);
    ( i4 \4 F' v  q7 v, z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 \0 Q+ Y( d; s5 w6 x& ?4 n
  652. //        INT iWidth=bitmap.GetWidth();5 M1 l2 Q: i% {
  653. //        INT iHeight=bitmap.GetHeight();
    7 Q# ?( a! v3 r' d. F+ t/ Z8 b5 K: W
  654. //        Color color,colorTemp;
    * S9 o- J5 P/ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 p6 b. Q- ^  Y) ~
  656. //        {- x# p* ^# v6 {. c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 _: I2 [5 W% j
  658. //          {
    ; |* X: ?/ A/ \% K2 B. I8 |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . }6 h& E* F+ x0 s( P; O) J9 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    % D1 j7 j1 ?6 }. A) w
  661. //              (BYTE)(255*iColumn/iWidth),
    ( [5 ^: O3 M/ y3 x, u
  662. //              color.GetRed(),
    " e* U9 S1 A0 Z* A* e6 u% K
  663. //              color.GetGreen(),
    7 K+ F( K/ L3 l3 @  U
  664. //              color.GetBlue()));
    - X9 M" n( N0 ^7 |3 d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 v6 c8 k" W! _! ?/ p; w+ |* p" V
  666. //          }
    ; i& s5 @7 _' s9 W' C
  667. //        }
    ; p) }  r2 {) z$ l0 E# P% K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 f% z2 c) \1 a2 J. J0 P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 r9 {% g5 D; r$ F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");9 U+ U& |) w& v: S, h2 R- O9 b7 {: y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 d, y/ t6 x( t8 l/ v
  672.         for(i=0;i<240;i+=8), _- N0 B& a# F; V0 F  b
  673.         {: m  }: {9 W1 }: j2 [/ y; C' v( H! }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* [7 d" ?) m5 I' L# s' i" ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 {1 O( N' W- x) J  C  d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ C, H* O4 O7 T% s7 [5 ?! S
  677.           Sleep(33);* {* k7 z  c0 U" |/ H- Q
  678.         }
    : L6 W. J. D$ H- b1 u- X
  679.         Sleep(1000);
    & G3 ]( k2 N/ a# C! e3 f
  680.         for(i=240;i>0;i-=8): x- c7 y  A9 g, y' a
  681.         {/ }  K2 o6 K0 e+ @5 v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ V5 a) r- j6 P; I7 j! d" P: r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & W& N! `& J3 y3 k' ]: Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* m% o  @- y& ]- |. w( ?- K
  685.           Sleep(33);
    & J$ x" I0 s& @4 K( o9 [
  686.         }
    , n% x1 `" n2 w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ u6 }) h# s7 T' y! A7 y4 T
  688.         dlg->ReleaseDC(pCDC);
    ( B( i% j  O+ D5 \+ U
  689.         DeleteDC(hdctar);
    , J5 R/ K  u% n$ g# S6 A  I$ {! M
  690.         DeleteDC(hdcsrc);
    / Y6 M+ ~, U: c& I! d) \
  691.         DeleteDC(hdcorg);& U  @4 a; s/ C2 Q" h
  692.       }
    + z1 y2 M' A1 {# P+ O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( U8 J- ^' d: h4 C0 H8 J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: d% i- k+ {2 h- g
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: D& N3 d* j! W3 h4 N8 r: F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! w; k; f6 j7 k! D) j4 @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 l6 y6 W. F6 ?+ _/ B; m+ v) B
  698.       if(!Dn.Connected())
    2 u' Z. L+ ^8 D' e' w) f+ a
  699.       {
    " H: s6 S, t0 v5 h- E$ n" y/ @6 I7 z
  700.         dwTotalFiles=1;
    4 t0 n2 O3 p& _! U+ }3 J5 K. V/ c
  701.         dwDownLoaded=0;7 I. v; k8 Y! Y; {- c2 C3 A+ z
  702.         bSilentStep=TRUE;! T0 Z5 a2 O1 ?/ `( Y* I; s
  703.         bCompressed=FALSE;
    7 I2 T5 r* g0 l1 q+ }
  704.         strExtLocal.Empty();
    3 H2 s  l) a- q1 {
  705.         strFullName="readme.txt";
    . G8 l7 _! }& c0 @1 }' v
  706.         dwProgramState=AP_CONNECT;, ~5 y5 y* ~5 W) D
  707.       }
    6 T$ b6 \2 q3 E4 N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 g$ X. A! \5 v* b1 L: O1 B
  709.       dwStartUpSteps=2;
    " p( v% j/ C! f. A
  710.       break;+ _- F, V" V; N0 n& |; |; Y/ o  Z4 w0 b
  711.     case 2:# U/ u! J7 |6 ?4 Y
  712.       {
    6 G% O# @7 h, ]
  713.         int iEOF;0 `& O; V+ s+ x% u, j
  714.         FILE *fp;" I2 B- d$ }+ e# i8 ^
  715.         char szString[512];' j; ?7 V) _/ G; Y% B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 W2 ?% H8 r* W. v7 X$ j
  717.         if(fp)2 H, j4 x. Z8 T2 S
  718.         {; U* v- j; A2 c6 k/ U! B- a
  719.           do
    . A0 e; ~0 K# e- i0 w2 E) [0 M9 U
  720.           {
    % p  i5 w! X1 B5 I  T. _' \
  721.             iEOF=fscanf(fp,"%s",szString);- ?+ `3 P% s/ Q# q# q6 f7 }1 F& w+ ^
  722.             if(strlen(szString))" W+ o* w, }3 `# i0 ?' d! l3 N
  723.             {' U1 A2 d% n) @4 z+ J
  724.               if(bFirstChar)" d( i3 `* s/ l/ ~1 [" b: H/ g
  725.               {
    1 J$ s4 c& a4 w* b9 D
  726.                 bFirstChar=FALSE;
    + o# i8 p# w8 P7 }( `5 c1 T
  727.                 bConnectIsBig5=FALSE;
    : v! r( u/ I3 l- z6 ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ ]: Z5 U  h4 n! L2 ]
  729.               }
    9 n- |' O2 N/ {2 b5 H9 c0 S, S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ J4 B$ S6 v! ?, v7 W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . H1 h) t1 R2 Q
  732.               dlg->m_ListText.AddString(szString);! t3 a+ m) d7 |2 C% K. J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ]* d$ L+ S  K- R; T
  734.               *szString=0;
    # x$ w& [9 H; N  e1 d$ g0 H
  735.             }
    : |1 B2 I4 V; \9 b* @/ R+ Z
  736.           } while(iEOF!=EOF);
    # P* D: N4 n' w$ s5 Y  n5 |
  737.           fclose(fp);: X" M  @6 P3 h  g9 Z. M
  738.           unlink(".\\DownLoad\\readme.txt");7 E+ ~  Y4 ^7 x! }
  739.           dwStartUpSteps=3;5 I" \$ G2 K# L: j* K9 r0 v
  740.         }, y- T. E$ ~" Q
  741.       }
    4 s1 C! o, N% T/ i
  742.       break;' ^2 [4 m! R- x! l
  743.     case 3:% d6 M. l" n, s  e6 g
  744.       if(!Dn.Connected())
    . `5 S6 P7 ~$ h4 m8 V& g9 A- e2 S
  745.       {
    5 x: s; E" S" F) C: o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& @- G; ^" s1 r, ]: g
  747.         dwTotalFiles=1;* o7 ^! j: b' P) n9 q. R! d
  748.         dwDownLoaded=0;
    ; R: u6 R- p. q$ q( _0 S
  749.         bSilentStep=TRUE;' ]1 }8 n  F  W4 }% t6 ]
  750.         bCompressed=FALSE;
    " b, e; f% u* C$ E5 H3 V6 e
  751.         strExtLocal.Empty();, ?0 x" B% Q2 w5 j" ~2 _
  752.         strFullName="checkversion.txt";
    $ o5 K' ~( x) n
  753.         dwProgramState=AP_CONNECT;% E3 o" _% z3 ?5 ^0 W5 x9 G' Y
  754.       }
    ' I  G4 \% K7 c. K
  755.       dwStartUpSteps=4;0 s/ g) U, E8 x; [
  756.       break;1 A1 f! i" {. F: S
  757.     case 4:9 r( v  @' Y9 Z
  758.       {4 T7 m0 K3 _6 m7 i/ u2 v( J
  759.         FILE *fp;
    # ?9 ?% `; y; I6 y# v
  760.         char szString1[128];7 p4 q6 k. \% d& W2 o) |' {
  761.         char szString2[128];1 W9 @4 W5 L2 r4 Z. f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 T$ j2 h& Y; R2 _0 s+ O
  763.         if(fp)3 ~6 \+ E/ R$ e) z; a
  764.         {
    7 i/ D1 e( X6 ]( i
  765.           fscanf(fp,"%s",szString1);
    - ]! P9 v1 v* N- x
  766.           fclose(fp);: y8 ~1 a* L# m
  767.           fCheckVersion=atof(szString1);
    $ O7 g4 C, ^6 r$ u7 ^7 W4 X2 A: I
  768.           fp=fopen(".\\checkversion.dat","r");8 Q; ^+ g$ Z- @7 l( ^2 f1 z2 X
  769.           if(fp)
    # ]9 ]! y9 \( L
  770.           {* N/ ~3 l  J: r+ \; Q
  771.             fscanf(fp,"%s",szString2);. b/ r! L* i2 n, c
  772.             fclose(fp);
    # [/ R) Q8 Q3 u1 N
  773.             if(atof(szString1)!=atof(szString2))
    & F/ Y8 ~9 x. Q% i5 M& f
  774.             {- ]6 n  k/ v2 o$ t9 \( e
  775.               if(!Dn.Connected()): J  E, R+ V: I8 e2 G! l9 G* X" i
  776.               {9 B# Z( `) ]) V6 p
  777.                 bFirstUpdate=TRUE;
    9 m  w/ \5 a, s0 X
  778.                 dwTotalFiles=1;- j8 f  M7 Q) n" x
  779.                 dwDownLoaded=0;
    - v  G  S8 @! V( L% h2 I5 ~
  780.                 bSilentStep=FALSE;
    & n' w) n' K" `& i
  781.                 bCompressed=TRUE;
    9 Y3 z1 t* t, c! \
  782.                 strExtLocal=".\\DownLoad\";
    0 L& M3 z7 D% Q! D6 S6 U- k
  783.                 strFullName="update.txt";4 q+ i7 n! K8 U; [% x8 }& h6 H# `
  784.                 dwProgramState=AP_CONNECT;
    " c0 W1 Q4 _- q# L- v3 H& k
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 v9 Y1 I, j! i( \
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# [2 {8 Y, `+ Q# }+ o! p) \
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 d: L, |5 A9 e2 k1 x- L& c
  788. + i8 u( z7 D7 x0 _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! u* @: q5 y, h0 S7 Y6 c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * j$ k% Y7 H1 ^) y- L/ ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), U9 y! I) p* Q$ B
  792.                 {
    0 Q* a3 B: A0 |  j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % w; c% z1 G( N+ R5 Z! r0 {: N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' ?/ D" d# g. E2 P
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. i% V, U1 ]5 L* c- T9 B! S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 k; d0 |2 l! \

  797. 1 n6 `' Y- q' h$ O9 m* {" f6 I" h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 G% y( Y, F: O9 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : S5 v) C1 A* H# f& ^$ W  N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ Z& G* b* w9 T- a" u' ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * W' \5 L9 K( D" B3 e2 p
  802.                 }
    9 k; K( R0 C1 F) |
  803.                 dwStartUpSteps=5;5 l3 P: z8 R9 @( `! Z: H  _
  804.               }
      @% t& x4 V8 Q1 u' d
  805.             }
    / }+ t$ X' B3 |6 c5 y! |
  806.             else9 w& f5 @( W" A1 V
  807.             {
    7 o# U/ l( L7 [: A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( I) R% M; i. v) L2 c  w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! t/ g8 I- j( @  m% ~. |
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 _( X1 C/ @; n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - e  n  w, I/ D* H
  812. ) B; ~9 b6 o# q+ A0 f: k2 j. @9 ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Q; h2 M: G* ^0 d, W/ B4 M
  814.               dwStartUpSteps=99;/ c7 L+ ~6 f- g0 c3 O
  815.               bFinishUpdated=TRUE;
    # D, q3 e' ?+ F; a
  816.               bCanUpdate=TRUE;# L2 C( ^- v, }4 U
  817.             }& x$ ~/ \8 f1 }4 F# Z* G5 q) ]; X
  818.           }- c6 `+ r" x  _; S0 w  [: K& }/ V
  819.           else
    * |' ~- u! F. O& Y# {6 ^* t
  820.           {+ U% H4 k" t/ o% w  E  r2 H
  821.             if(!Dn.Connected())
    ' L. X  F- R4 K% e% U
  822.             {; x' \) F, u* Q. e1 g0 ~+ I) w
  823.               bFirstUpdate=TRUE;8 j( N/ U+ A1 H9 \
  824.               dwTotalFiles=1;
    / F. ^0 }% ?4 x$ I3 n. ]& f
  825.               dwDownLoaded=0;  y# F8 k9 y# a. `; q5 m6 B
  826.               bSilentStep=FALSE;  U3 F# h/ [. t9 T
  827.               bCompressed=TRUE;6 h8 K* P" ?! L5 |
  828.               strExtLocal=".\\DownLoad\";
    ! e  e. R* R- f0 ~
  829.               strFullName="update.txt";
    / p5 \, Z2 s' e; U1 S
  830.               dwProgramState=AP_CONNECT;
    9 ~" @3 L! w4 D) Z) T
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% n1 o# ^" j1 o# A
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. S/ g* q) ]( A# M- |: d7 {' E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : @; }9 l. `8 n; E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! ~* e4 k9 k2 L" s
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : z# h' l# R5 T6 v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 {9 C2 o- U* D$ Z6 D0 R
  837.               {. M4 e) o2 j5 e4 M; s; p: z- _, y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 M5 O7 V# A9 R9 c  v; D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 E+ n' U4 i* t% i% s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; I9 A& }( I$ J' c+ L, [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 `: s% |5 t! \, y! p+ u) r
  842.                 8 H$ y4 X& X7 m, N& ^1 r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 B- ^6 a! g* B% G2 j0 |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: @& o0 f7 g; s3 Z# S, p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # m  H& R5 O1 d- y3 k( E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 U6 n/ `0 H* P0 E7 S
  847.               }5 \7 B# _' u0 t; b  Q7 R$ F' E5 X
  848.               dwStartUpSteps=5;1 t8 O4 R( u# D/ a! C: T
  849.             }0 J1 k/ h- A5 D  p5 v5 x2 K
  850.           }
      C% w+ z1 e. ?, y4 `' h+ P
  851.         }) R' M3 t  Y2 r# J$ U
  852.         else7 f% M9 J1 i; D
  853.         {6 ]3 q2 {5 i. b. n" \/ ^+ X
  854.           dwStartUpSteps=3;( l  ^; h4 W: y7 E
  855.         }
    4 d7 X6 N+ r" A. @$ c
  856.       }
    ( ^' ~. g# A7 _" N: _. ?& V4 X
  857.       break;
    9 `% d: |7 B' i  g/ p& g
  858.     case 5:
    7 C9 R) Z$ ~( U. q3 m
  859.       {# _' |) J' i5 V5 S' m" q  J
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 b6 K( r8 ~7 ?: d" a5 w" V
  861.         {$ `9 o* N- {' u: c- O% w5 I) n
  862.           int opt_overwrite=1;
      Y( V: O+ z5 f" r; f* v+ n
  863.           int opt_do_extract_withoutpath=0;
    ; p' ?* v2 o8 ~* [& |3 p1 n0 m
  864.           unzFile uf=NULL;: q  i! Y7 l! n: D2 v; u4 w

  865. . W/ S6 u* N" z# ?" G
  866.           uf=unzOpen("Wsa.zip");% G$ y, i! O& ^9 }
  867.           if(uf)
    4 \% o8 {% Z! W& f
  868.           {
    6 M/ q3 q+ J0 i( ~* W
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    9 a: c. A1 K1 b( g* `- l! N# k
  870.             unzClose(uf);
    " @" _) T% |2 H6 r, z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; {+ u' N, {9 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % X7 [. u: O: Z/ s3 z+ c" f
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( r$ e; I7 t& n
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Y2 [9 t( ~! N2 R# I& t
  875.           }
    . n) I+ L6 w# _* Z0 d$ c; V( Z1 V
  876.           DeleteFile("Wsa.zip" );
    $ N" f; k4 t8 R4 M
  877.         }. ~& x- ]! Z" {# `8 |
  878. 1 ~" g/ o% B- n2 Y7 a* L
  879.         if(CheckLocalVersion())0 N: B; C" @8 p$ x
  880.         {
    # M8 @* N3 q! M" p* C
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, u- R+ J5 T* f9 ~; Q% F6 B0 ~& O
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");$ p. H$ D: l; U# F# r5 D
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ! r# n" L" Y0 [4 J4 s' h3 g
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + s7 ?- c; t6 m) H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 {: P: S$ z1 c3 u) F& h% B. Z
  886.           dwStartUpSteps=99;
    : w+ D5 S' a$ ~# g3 K) d1 o
  887.         }
    9 `# K; B% q2 o; O
  888.         else! p8 n! ^/ F8 Q. B3 ^5 t' w, X
  889.         {. V+ W) Y% z: o! K' d2 a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' N0 s" P6 ?$ f
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; k) v4 l* T, x$ J# y8 M
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; P2 [  ]1 `- T% n

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

' ]! Y& C  D5 `+ v; H7 s7 j% Z

評分

參與人數 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-3-12 18:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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