找回密碼
 立即注册

CSUpdate.exe源代码

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

5 L) n- J# K) A& \: Z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " u8 L' S* D# Z1 s- D; V
  2. //
    0 ~4 N2 M+ M$ ?
  3. + }& k% c7 M, D7 }
  4. #include "stdafx.h"
    1 {7 M4 s8 X2 \6 |" r

  5. , I( y3 I3 j' ~" P( m) P) q1 M" i
  6. //#define UNICODE
    % u. `& m2 s( U, b
  7. //#include <gdiplus.h>3 }1 R1 h# ]3 N8 |+ I
  8. //using namespace Gdiplus;
    + v% b. E- x0 D: B
  9. 6 o- [( R" t; M) D9 n2 m
  10. #include "RevApp.h"
    . T* `" d! D6 B( f* k$ @5 @
  11. #include "RevAppDlg.h"
      U/ m* L+ o5 U4 B

  12. 1 f2 g  J( B8 O! }2 B& o8 X
  13. #pragma warning(disable:4786)
    6 g: r: m" h2 D
  14. #include <map>
    - e5 b% O( W( r; x1 B" t
  15. #include <list>
    0 g! g% y6 V) R; F& b- g* U
  16. #include <direct.h>
    4 |# ]4 K, f6 S6 ~

  17. ; C: U; B8 m! F2 ]' J# {5 P  b7 N
  18. #ifdef _DEBUG# e* D" W5 G9 k  A7 o
  19. #define new DEBUG_NEW) N; x$ F( S+ l% e: \
  20. #undef THIS_FILE% k# k5 S$ ]$ s4 f8 W0 i4 _! {
  21. static char THIS_FILE[] = __FILE__;6 S  A4 y& Y2 b$ [9 K
  22. #endif
    * z0 D- s, G& C# \
  23. #include "SkinResDef.h"0 B7 }3 \! }/ G6 w6 D7 r& e2 V1 A
  24. #include "ChangeBG.h"- R  l9 m; h$ N
  25. #include "AFXINET.H"& z& F& |. |2 D6 G* U  H0 {
  26. * ~( V8 j& r3 N2 p! K+ `
  27. #define TRADITIONAL_CHINESE 0
    ( `8 H) @' b% g3 d( v
  28. #define SIMPLIFY_CHINESE 1# s/ `  w# i! C7 U! Q
  29. #define ENGLISH 2
    2 L5 u3 W& [' ?+ e# s5 A& w$ J
  30. int m_iLanguage = ENGLISH;) }  h) q4 m: }& F, C
  31. ////////////////////////////////////////////////////////////////////////////// D- t9 f0 j6 n, ~! q
  32. // CRevAppApp
    . `8 N. n/ [4 k& S$ Y, e  O  v
  33. + B9 P; o+ r5 ~6 M& k4 T% ]' G
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 C( c1 v* M9 q! m+ D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      C4 D  Q1 [$ ]/ J% z* S7 j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 K* J- l- o( }9 J- t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 s7 Z. F$ m* h! t
  38.         //}}AFX_MSG
    % a4 e5 M2 }; H7 v6 k* X
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - ~  J7 L" j( M. O) F
  40. END_MESSAGE_MAP()
    , v2 r4 o: ^; u7 O' A. |6 A

  41. * V/ z7 O0 n+ G
  42. /////////////////////////////////////////////////////////////////////////////" v6 V  ~6 J1 u  o5 ]  U
  43. // CRevAppApp construction
    % ]" m+ E* E3 v! g% S0 B9 j  ~
  44. # x4 w8 D* ]1 [- \
  45. CRevAppApp::CRevAppApp()  j: L" S( [/ Q3 F9 I2 |2 a4 y
  46. {
    6 G) l1 T, M; i5 s/ H
  47.         // TODO: add construction code here,
    # J+ Z5 P; N: n0 p* ^
  48.         // Place all significant initialization in InitInstance
    5 J. q! H6 I% Z1 k1 i% e. s
  49.   bDisplayIsBig5=FALSE;
    4 D7 o6 ^# ~& d' `2 ]/ R
  50.   bRestartUpdater=FALSE;
    # Q# g( T$ j4 u# O& ^7 J
  51.   bFinishUpdated=FALSE;( f6 e4 T: c7 U' L. e6 ]2 ~* z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' ^  Y! R6 Z. p5 {
  53.   InitChangeDataBig52GBKS();: L% o8 L+ \0 _
  54.   InitChangeDataGBKS2Big5();: g& y4 l& H: z
  55.         //
    5 L# j1 l" Z' v, l0 |: i
  56.         bClickRunExe = FALSE;
    " v2 h: g! y( o+ R& [& h
  57.         //
    # }& M1 _  Q8 i8 e9 z
  58. }
    , h; S: S2 T" [9 j1 \" j/ h2 b
  59. 2 `+ K4 _, Y- |
  60. CRevAppApp::~CRevAppApp()
    ; E$ q% }/ X' `( i$ A0 }2 a
  61. {$ y5 a; Z; B8 D: t
  62.         // TODO: add construction code here,/ K4 [4 l' \4 i% L7 s3 |( O' D. d
  63.         // Place all significant initialization in InitInstance
    ; h4 F. Q: w2 t+ R! r& }' i+ [
  64.   EndChangeData();
    - I5 [, t) o' U  d1 \, y1 C
  65. }7 y7 |4 O& A& m4 `* L* t

  66. 6 i$ w( r5 U2 L
  67. /////////////////////////////////////////////////////////////////////////////7 e4 M! v; s5 b) q0 w7 _
  68. // The one and only CRevAppApp object
    * y. ~1 w4 P" b) k' W& v3 o
  69. ! D8 j3 J7 w+ W8 o$ Y1 ?9 \- ?
  70. CRevAppApp theApp;' v& y7 ~2 G/ v$ r  ]& Y+ H& }* V6 e1 `
  71. 5 y7 H- H$ x7 R! y- ~6 j0 e: u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* T; W! ^8 {+ p
  73. {1 X% h  Z- ]" K( x* N
  74.   int iEOF=0;3 o" ~9 j$ @% E  I( G% u6 _+ o9 y% j0 o
  75.   char szTempName[MAX_PATH];6 M+ D* S2 ^1 {& u" }
  76.   *szFileName=0;
    0 }3 C. ?' W: K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    # T6 C* ^" X0 e- g  F  ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) t3 m# ~# x- T0 i
  79.   {
    + N- C+ I" ^) g8 |1 `/ @
  80.     strcpy(szFileName,&szTempName[1]);
    # h$ S9 i; \8 ^) h; ?4 Q9 L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% S) M/ h4 d6 }; h- p
  82.     {5 m3 ~4 {7 p8 N9 p
  83.       iEOF=fscanf(fp,"%s",szTempName);% @' r8 w& v* C0 e5 n
  84.       strcat(szFileName," ");
    0 r% W6 o, ~( J" M
  85.       strcat(szFileName,szTempName);
    ' {$ G5 D+ ^7 c
  86.     }1 {/ E/ V3 v1 m7 Y- S% Q& M8 N
  87.     if(strlen(szFileName)>=1)& K1 A: r$ b6 Q0 j5 p5 w" X
  88.     {
    $ D* H$ ~( g: `6 R
  89.       szFileName[strlen(szFileName)-1]=0;
    & l5 b+ s0 |  M( l" d6 ]
  90.     }
    3 F7 p1 K* M6 B( l
  91.   }+ i" F8 V# B9 F6 ]9 K
  92.   return szFileName;3 m, c3 d1 J" d' N
  93. }: z3 K. G7 t$ z- F6 L* h* r
  94.   }6 _1 J" t! V$ r; i) U) n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    5 _3 ?  \; U( k4 h
  96. {
    + A, ~" E; A! H6 P9 Y$ x: X
  97.   FILE *fp;
    % o. k+ ?% p. ?* V; o) J( f
  98.   char *key=NULL;+ L5 O$ F; Q& w! Q: R
  99.   char version[MAX_PATH];
    " j$ H* @$ x* _; n- M
  100.   LPUPDATEFILE file,olds;
    & L8 H$ Z8 Y1 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. R3 a( x& @: w( ~

  102. ' L0 [  ~6 A" t) m
  103.   UpdateList.clear();
    # ?) h; z* [$ M
  104.   UpdateFile.clear();% _0 h+ y. d8 l3 l4 C- w" K
  105.   if(GetFileAttributes(filename)==-1) return false;
    # Q( l' ]  x: P9 C& z9 w  j7 V
  106.   if(!(fp=fopen(filename,"r"))) return false;7 l2 ^4 q: M5 j* u( _+ t
  107.   fscanf(fp,"%s",version);) L( n5 [8 ]; O- f9 Y% ~- Z; U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; e# z: E) O% ^, P' p* g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ ~0 k; c' f( A9 T
  110.   {; i& j" T6 ^2 ~1 P# y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! N" G4 @* E1 G
  112.     fscanf(fp,"%s",file->path);
    5 d' N" A1 E+ t" }8 H
  113.     ReadFileNames(fp,file->file);4 A" r/ E( {! z7 d
  114.     strcpy(file->full,".");
    7 n/ \  B/ {* N/ x
  115.     strcat(file->full,file->path);( q* S4 T, ~% O8 [( Z9 }2 u
  116.     strcat(file->full,file->file);% l; J$ r2 J- N( A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 o& J$ z  s! A" M
  118.     {
    # Q* i1 o, r& W+ o( i4 X9 i
  119.       file->vers=(float)atof(version);
    : m$ o6 J7 Q& J% V  r) h) K* N
  120.       UpdateList.push_back(file->full);+ T7 F8 _, e, @
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 x8 @8 z& G" U
  122.     }2 n2 L" Y; d! u/ T3 e* t/ \5 d6 H
  123.     else
    6 u4 V: Z/ ]) @7 q- D3 O( C
  124.     {: `( V4 F9 |% `3 m- ]; j
  125.       olds=(*p).second;# S- j- O' h8 o0 N8 ^* w! m2 l
  126.       if(olds->vers<(float)atof(version))
    & ~0 j% n, X- S
  127.       {
    3 ]  V# A/ b" J
  128.         olds->vers=(float)atof(version);2 R* B8 h! {$ h  k. F& d# H2 @
  129.       }! U6 }% n  q) f' r0 S
  130.       free(file);
    / S) H  l3 a% \; K
  131.     }
    ( t/ c( z: ?' \
  132.   }: y/ y0 N# K. N/ ~' P+ d
  133.   fclose(fp);/ B) [* E7 b# R; j: r" ]
  134.   return true;/ u5 \  h+ @4 D% h! ^8 X
  135. }+ w/ i! X6 C: o% ~6 Q( ]
  136. ' B  K8 y( W9 N* W- y& P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% _4 J8 D5 h7 w, }" f6 X  T
  138. {
    2 P$ u* P- J  A- k4 q6 |, h: d7 d3 m
  139.   TCHAR  szFull[MAX_PATH];: O: W( W7 t% P2 @( ~; M
  140.   TCHAR *token,*inter;2 D7 q% z) g, f2 K  c! q
  141.   *szPath=0;
    " _6 Y8 Y1 n5 c, W7 b4 N
  142.   strcpy(szFull,szFullPath);0 y( R( X, v+ ^
  143.   token=strtok(szFull,"\\/");
    6 o1 U4 R# k& N% `( X
  144.   inter=token;/ S" j: O8 \, Z2 W
  145.   while(token=strtok(NULL,"\\/"))  v; v7 ~8 S6 T( W% Y& ^
  146.   {0 M) p9 q1 K$ A+ Q+ y6 R
  147.     strcat(szPath,inter);
    2 @; n; {1 S$ r
  148.     strcat(szPath,"\");( e; S' t3 x  G" M3 [
  149.     inter=token;* ]3 z) n/ |! @( ~6 m% g4 _1 r
  150.   }3 v/ V% g2 O' q, i: C8 `8 ]& I
  151.   return strlen(szPath);: z0 |$ Z. ?- ?  t
  152. }$ _: D( o5 |' ]' a! t7 P* o% s

  153. , L3 `! v! U" c6 q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) C  {9 y0 W9 ?- T
  155. {
    / j  `4 L& j; V7 n3 I$ f7 I* h
  156.   DWORD attrib=GetFileAttributes(Target);( x, ^  _, j4 Z+ ~. V
  157.   if(attrib!=-1)
      ]+ Y* s9 ^8 H, }
  158.   {5 z- R* T( L% {* }3 X, t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)): [$ F# g8 \4 J8 E8 `/ S
  160.     {/ U) Z  o4 ?8 i) x0 D& k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: D, L8 t& U6 V. P+ _% z7 v
  162.       SetFileAttributes(Target,attrib);. \" d6 y+ Q* }- [$ `$ {* c6 X2 y
  163.     }! o3 e+ o8 E, X! `4 ?( O2 e' X2 A, ^
  164.   }
    * u3 T/ T- g+ ]8 G! t
  165.   CopyFile(Source,Target,Erase);3 c  k3 ^/ A+ ~4 @/ O
  166. }
    ! D% b! R+ V5 i: I

  167. , h6 d% k- J8 P" W' k3 g9 I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& ?7 K. z( o# ], P
  169. {
    ) O" Z  G% Q, n" w0 q
  170.      FILE *fp;
      {" k; h: w4 T$ F* P
  171.      char  szBuffer[8192];/ j! k6 G  {; E# P
  172.   va_list  argptr;) j0 M" d# u. ?* \

  173. ; {& ?# g9 I2 b- ?0 {
  174.         va_start(argptr,message);
    6 {. N$ w8 W% N* `$ n
  175.         vsprintf(szBuffer,message,argptr);
    . k1 l' W  k1 c, `9 H
  176.         va_end(argptr);
    2 ~7 H' d6 W! w+ M
  177.   fp=fopen(FileName,"a");8 c4 \1 e% T' Q4 Z; v; R6 V
  178.   if(fp)
    ! f& k$ W6 O; [  v( F  H: p
  179.   {
    , p% U$ Z: |5 w, M5 V, h7 E/ g0 N% S
  180.     fprintf(fp,szBuffer);! k+ Z2 E2 @/ U- s9 x6 f- e, f1 Z
  181.     fclose(fp);: J8 o1 s" O7 b( x9 [
  182.           _flushall();
    5 }% s/ `* U% m/ t  L) s
  183.   }6 V( T/ ]" }" B6 ?
  184. }; O+ x, C8 P/ Z  A( J* f
  185. 1 N* v2 X: I: e2 g8 C; r
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' X- Z" S& A  C) A$ h, W7 @
  187. {8 v* g6 i4 ~7 _5 m/ j9 b2 O: b
  188.      FILE *fp;
    7 t: t7 d  t% o  ]
  189.     DWORD  attrib;0 B8 N5 F( m3 G. G, S
  190.   attrib=GetFileAttributes(FileName);
    $ S# w+ i' j; s
  191.   if(attrib!=-1)
    ( `, N. [. w- m  Y$ T0 f1 ^
  192.   {$ ~; G# B. F' V' S5 m( L3 R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 d6 @" P2 V/ H# @5 D
  194.     if(!SetFileAttributes(FileName,attrib))* i' z0 }7 d& ]: V4 c; d
  195.     {
    2 [& C3 F" q2 G: ?2 Y9 k8 ]# I
  196.       return FALSE;
    % Z, ^0 G4 O) j5 n9 e
  197.     }% U$ |' {- j% }, n- l) ]
  198.   }
    ) J$ P* @1 }) I4 o/ O, @: s+ X3 Q" K
  199.   fp=fopen(FileName,"wb");
    ' q$ m7 J0 M: g* _7 T3 n
  200.   if(fp)5 d( h  o7 O6 t  _
  201.   {
    $ h- @8 i# A  r
  202.     fclose(fp);
    " T# i$ O& z6 d% }- b- h; p- e
  203.   }
    . T' K' U' u5 b9 j: s6 j, I. e7 |' }
  204.   return TRUE;1 Y2 k3 t3 L$ C& ~- h, l
  205. }' q$ V& ^+ @: c( ^. N8 n+ b9 ]

  206. 3 x" E  ^2 V& i; d8 l5 `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / t, e) o: g; ~
  208. {" B! m7 [* R) d: I8 l+ I
  209.   char filename[MAX_PATH];+ ^& i2 Y8 q% i4 x
  210.   LPUPDATEFILE file,olds;
    ' o; p( T) ?# R1 [/ w2 b
  211.   std::map<int,CString>::iterator i;7 X( Q& P4 E" r2 ?
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # b7 O. j9 |, g5 ?
  213.   std::list<CString>::iterator l;
    & e4 {$ i' E/ P
  214. ; W# v: d8 U9 e6 w* ]+ u3 M8 ^
  215.   if(bFirstUpdate)
    ( Q2 A6 S" d$ C( Q. ~: B
  216.   {$ u2 V4 \+ i- Q! J( T* B
  217.     dwCurrFile=0;" N' N& k& ^1 i
  218.     bFirstUpdate=FALSE;
    0 I0 F+ B. @" R! z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % M# m/ T2 K5 B1 v! F5 s3 j
  220.     {
    1 Y" x, g: r- Z9 @, q2 o
  221.       dwTotalFiles=UpdateLocal.size();
    + g1 N" Z/ K( _/ ?+ M
  222.       dwDownLoaded=0;/ r! P  Z/ ?) }4 i( g0 f. ]9 @5 b
  223.       bSilentStep=FALSE;
    , |% k' q+ z7 H& F* R
  224.       bCompressed=TRUE;+ \, G: p+ O' \% ^- \
  225.       strExtLocal.Empty();
    ) t8 \8 ~# r$ r1 s8 B  I' y
  226.       strFullName=(*i).second;
    $ o% W% Q; Y2 J) {# {
  227.       dwProgramState=AP_CONNECT;9 }( M; t6 w& l/ a; m5 k
  228.       return TRUE;
    1 O( {0 k6 f" T+ k2 U* g
  229.     }
    ( u8 `! t* V6 s- D+ v/ r# v
  230.   }0 m5 N7 c3 x! Q4 x. H3 _* U
  231.   else if(bRestartUpdater==FALSE)4 a% D( i; j4 c4 [
  232.   {
    8 G* {* ?" n+ g/ e! U' Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! I) L1 H/ S6 b: |5 z0 e# z
  234.     {
    : t' C* I4 b$ B5 y& D
  235.       file=(*p).second;; R+ {" y1 g3 D9 U9 J4 h# C' N4 v; K- V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' C+ H$ P2 e6 D$ s. n3 L
  237.       {6 N6 r% k: B2 D2 q( v
  238.         olds=(*p).second;  S  p% X( X8 y" ^% m
  239.         olds->vers=file->vers;
    2 k- L' F5 u1 N
  240.       }
    4 x0 I& R% A) d" l% Q. a
  241.       else" ^3 k2 e6 h* i$ h
  242.       {
    ; {8 U' t' \2 a6 ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) A! k& W7 V' D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - y  ^' w( m3 a- S6 K+ k. }$ Q: m; K  F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- X9 b; I; p! m5 \. Z0 w
  246.       }
    3 h9 g( v2 Z/ `6 c  }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 `4 s# a3 P: S+ r
  248.       sprintf(filename,"(%s)",file->file);
    0 [3 E- i; a: g  }( _3 p8 b
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' i3 V% J% w* Q& J0 s0 C% `: p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 s% M4 {- K% Y3 i  S- ?& {: Y" g
  251.     }5 I8 }3 ?. A" {
  252.     dwCurrFile++;4 a* s: ?4 A6 b, C  l* D4 o$ n7 n5 z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 a) L- B3 J; J
  254.     {
    # [- b6 M7 [! c+ E2 ]6 I9 P
  255.       bSilentStep=FALSE;" T9 A; I+ D3 J1 X2 O$ h" P; L4 L
  256.       bCompressed=TRUE;, K1 @6 V7 Q6 Z  n+ W
  257.       strExtLocal.Empty();, A! {' ~% o6 \7 V4 m# S1 W. P
  258.       strFullName=(*i).second;
    5 H! W% u/ F7 K2 ^/ U! T' ?
  259.       dwProgramState=AP_CONNECT;
    & W3 [6 ]% B0 T! P" c
  260.       return TRUE;1 o% Y# }7 }# h5 h. H
  261.     }
    6 Y: v  d2 R) e7 C
  262.     if(!bRestartUpdater)
    % F7 C0 w# z) `0 e
  263.     {
    " {) T' r2 s3 }7 ~( [$ ^9 A
  264.       int iCurrSize,iFileSize;* h' `* V0 t+ D1 V0 E8 |2 n( b4 A
  265.       iCurrSize=0;
    1 Q; C# H9 i' [& ~! p- A1 c+ P
  266.       iFileSize=UpdateList2.size();& E, a* I/ H: [  A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ f& N, L3 ?1 N0 Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, G0 h  ~+ Y0 B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' W- D  V- c2 i- G- w) J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - H  s& Q# x" U3 d& @! G
  271.       Fclearf(".\\update.dat");
    9 T% I; j- f& G( Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 S8 G0 m. z& f& S+ s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% \5 f2 x3 z) v
  274.       {
    - v) g5 _2 ^9 t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! c0 P9 I  B# p( g5 k, g/ V1 }
  276.         {
      [# Z1 l+ ~4 M' ~
  277.           file=(*p).second;) I, k* p5 E2 k, E; h
  278.           sprintf(filename,"(%s)",file->file);
    ; ^) w! b" ~% S) D& G9 ]5 W0 ]
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 S& i4 S  F) z4 s2 k
  280.           iCurrSize++;) I& N( K9 d% H# W- H: Y8 c) \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# s' v% v9 x2 p- P0 F" R
  282.         }
    % t2 C' V. G0 ^8 d
  283.       }
    7 G* |6 ?6 D+ e2 K# @% b
  284.       unlink(".\\update.txt");2 O; o( j  X% [8 k+ m1 d* W: r7 N
  285.       unlink(".\\update.tmp");) ^+ K: u) L8 K/ Z+ T6 ]. A6 I
  286.       Fclearf(".\\checkversion.dat");- g" X7 {0 l' J, z( J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 ^0 \" e. \# W1 g3 }
  288.       if(UpdateLocal.size())
    ' w& I/ D% d8 ~7 a8 g4 T. S3 ?
  289.       {
    9 s1 _8 X9 x: h! f' F4 o" }5 s
  290.         UpdateLocal.clear();
    # f+ s# B. ]8 H$ Z1 Z, x) ]
  291.       }) v/ Z  E9 [' B% H+ E+ C5 I
  292.       if(UpdateFile3.size())
    ) M  r9 ?* v2 N- Y4 U7 g9 r0 f
  293.       {- d; c4 W# B0 X  _4 F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . n# c# m% {6 @0 T7 {% z, k
  295.         {
    ' b4 ?" B) Z2 G; E+ Q  @+ j
  296.           file=(*p).second;
    & V4 |6 k7 \. \9 W: z5 T  s
  297.           free(file);
    ) C; ?* p9 Q: y( m
  298.         }5 [6 \, u: z' t6 O. @( e
  299.         UpdateFile3.clear();
    - C) T3 {# Y- b/ x5 P2 Y
  300.         UpdateList3.clear();
    6 e& @- j: u; i8 Y, f" O; e9 ?# B
  301.       }
    / N! U1 N; r* B. ^0 F- C& v1 |0 l- ]
  302.       if(UpdateFile2.size())4 ~  g9 v* D5 r; [8 _/ _% R: }- r
  303.       {
    $ s+ E" o9 s5 Y: f( N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); ^7 {$ I0 A  k6 b" _" T4 b
  305.         {; d/ W& h, {, P$ C4 z, ^% ]5 ~/ {
  306.           file=(*p).second;
    7 f1 ]+ R0 t8 X2 k7 }% c
  307.           free(file);
    " c3 g. N) c* Q
  308.         }/ n/ |7 ~( `( [0 |9 H
  309.         UpdateFile2.clear();0 O+ F. u9 ~7 z! X. Y
  310.         UpdateList2.clear();% {' B4 W& {- p# x
  311.       }
    9 n1 J0 {' o3 Z- a
  312.       if(UpdateFile1.size())
    0 ?- K" O& O8 p
  313.       {
    9 ~/ r* e2 L* Y, U6 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 g# l3 C& g) g, R+ |
  315.         {
    , d3 `6 r' q$ |+ J
  316.           file=(*p).second;
    5 J" A* ^9 E0 T9 O& ]: T; F: [
  317.           free(file);
    $ o) Z* x8 z2 H, |2 {7 u8 k
  318.         }
    ; _) n9 T; m5 G
  319.         UpdateFile1.clear();' M8 ]4 a" v6 x* Z* L; a' V8 U" `/ k
  320.         UpdateList1.clear();
    9 y# t* r3 f. R  f
  321.       }
    0 K2 k2 o- o* A  e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 A; z9 ~( H" g/ }3 H
  323.     }+ E7 {( K, P$ M4 V1 w: U. i6 D
  324.   }1 v: A1 g# Y; p. l: x' S$ i' K
  325.   return FALSE;
    $ r+ u6 @2 V# y! m) ~) y
  326. }
    0 o+ x- k: Z, J! r

  327. 0 ]& H$ a: Q2 E  Z
  328. void CRevAppApp::ClearAll(void)
    ( b  C" `6 p. V% L) z7 Q8 i$ p
  329. {: R9 T2 A0 n# y& c5 L3 R+ j+ i
  330.   LPUPDATEFILE file;. v, H7 l) h3 G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# W; x& Q) Y8 _% K0 P8 i

  332. + {; Z( J' t  |0 t! b5 T5 W
  333.   if(UpdateLocal.size())
    6 Y' a; t7 w( _
  334.   {' P$ e0 C2 q. i9 Z
  335.     UpdateLocal.clear();
    - t: @1 H1 ^! c5 y3 O  p- ?
  336.   }
    6 H0 w# P1 f2 M6 E
  337.   if(UpdateFile3.size())0 U' A& _0 N" g: ]' T
  338.   {
    - ^/ V. n& N; o, H* D6 p: J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 h3 a7 O$ J  _0 S8 z! q
  340.     {% t/ w: [+ U5 k4 R
  341.       file=(*p).second;
    - U: I, R9 L& F: V
  342.       free(file);
    5 t! e1 C9 G/ m+ _# t% B
  343.     }1 O3 D# D6 \- x- g0 W
  344.     UpdateFile3.clear();
    & T  z* r% ^% }3 R
  345.     UpdateList3.clear();
    ) @* |2 X+ W0 Z' O
  346.   }
    , ^% a3 O( V. O) ]" ^
  347.   if(UpdateFile2.size())
    7 x4 E, A. B+ d% t" J7 X) G. _% |
  348.   {
    ' l+ r' A& _& K9 k: N+ ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 x3 x3 C) H" `7 o0 I
  350.     {0 Q. ?% j) \: [7 R
  351.       file=(*p).second;6 P9 F: x/ H/ z
  352.       free(file);
    ; r* f6 A  f( I) K6 h4 [
  353.     }* y$ z: C9 {! @' O# Z
  354.     UpdateFile2.clear();
    " ^# h! s3 J  z- J( n  y
  355.     UpdateList2.clear();
    ; ^5 \7 z( P+ ]
  356.   }. }/ Z+ s5 h; Z8 V; k; V- A- e. `4 s
  357.   if(UpdateFile1.size())
    0 T& a: Q0 C2 I
  358.   {- X1 B6 U( O3 D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% X5 @$ S( O& d, B: X8 S
  360.     {
    $ f/ L: B; ^; C
  361.       file=(*p).second;
    5 S; P. ?7 m4 a8 N& B+ o$ N
  362.       free(file);
    $ B2 X& y$ b8 u! c& y
  363.     }
    ' M1 O& H5 F/ b" H- G2 A2 z9 J: _# v
  364.     UpdateFile1.clear();# L, {, Q1 X8 k1 C
  365.     UpdateList1.clear();
    ' C0 K7 U" }' w0 [! p
  366.   }
    ' B: m$ O5 ?8 k/ `/ z: l5 a" W2 z$ z9 r; B
  367. }  
    / p4 f8 p7 l- F, c
  368.   
    ( ^; E' l+ f! K- r7 d
  369. BOOL CRevAppApp::CheckLocalVersion(void): N$ Y# b: O' q9 E! d  z$ i8 Q
  370. {5 j9 Z7 g) s( I: s  V* h; e! c
  371.   int c;
    ' S' d; U2 z/ w1 G6 h9 ?
  372.   LPUPDATEFILE file1,file2;# C/ E# }% C5 H: F  i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 t/ o' Q3 F- C% e
  374.   std::list<CString>::iterator l;
    / M, A2 D2 T/ k8 y# a! ~% f

  375. 7 {$ ^7 e1 Q; t
  376.   UpdateLocal.clear();
    $ d0 u' I+ y, ]! C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ n8 S% x# X, h: q' z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + h8 E! I! i9 e6 m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; X+ E3 z; c  f6 w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  ]* S! O. H$ U
  381.   if(UpdateFile3.size())8 s8 J) Y+ ^- W6 U) {' h
  382.   {( q& M3 H5 |" n$ b3 _8 n1 d, _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 ?6 _, h0 q3 I# X0 f
  384.     {
      x5 U( ~7 V+ U  s0 `( K  R
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ N" A) f. o6 k6 v0 v" [. f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 a8 d* j. M, F4 P
  387.       {
    & c; ~/ @5 Q% W6 ?8 B+ {. N' t
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' e/ u/ b: ?  l( r3 b
  389.         file1->vers=file2->vers;
    2 C7 q+ e( d, G: v1 }( B7 v  [
  390.       }" J9 ~6 B, o7 T4 I# l) c
  391.       else
    ; ^- y& A8 W4 f2 p) U) U3 I/ x
  392.       {( x6 }. v: K" |# z# W( e  g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & s, D1 j% u" @' [% w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 }; {0 W- ~6 r9 O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% v  f: p' M' p0 ?5 w! G
  396.       }
    . A; V/ }5 L, t# J5 Y6 Q* p
  397.     }
    $ {% e/ T+ A/ _
  398.   }
    2 o- h: l1 ~% Y9 r  q, C# b3 D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 X; A' |1 N9 ~+ L( _
  400.   {
    ! C* l9 @% m/ b: |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 C' }/ H4 G% O
  402.     {, G# q9 w  Y! g5 }0 D( S& C7 T
  403.       file2=(LPUPDATEFILE)(*i).second;- k% r# q4 E! y% V5 {/ T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 r* T& @! [$ Y* V2 K
  405.       {9 `7 V9 c" h1 n' M! x
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 V5 ?- K7 C3 u9 Y3 u
  407.         if(file1->vers!=file2->vers)/ g( o. h( A; |' k7 C& x: P
  408.         {% C+ F+ X, X& R& d/ A; A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ R1 s( ^4 `+ F$ t" |  ~
  410.           c++;
    2 z4 ~1 m( v7 R/ n" r  \& H3 }# P( l
  411.         }6 U. x: `# W! c9 _: g: i* p
  412.       }/ C$ d% t. d( W, \; m3 O1 s
  413.       else
    2 G# K# i9 R: y" g* o' W+ Z
  414.       {
    , o; E; L3 k$ W5 V$ C6 _5 ?  C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * c1 M0 ^8 c9 W
  416.         c++;  E+ i" Q0 ]* i! l* m4 s( |; ]
  417.       }
    : u7 W3 d  |3 j; Q4 f( Z: W  C' P
  418.     }
    1 X3 |+ u$ |; Y  H
  419.   }% f2 v: Q. a; h. s* l
  420.   unlink(".\\DownLoad\\update.txt");, c& r2 G% I+ `$ I- a6 @2 x  x4 O
  421.   if(UpdateLocal.size()) return TRUE;
    2 t- o7 c5 S6 C; B5 M
  422.   else                   return FALSE;
    ' a# f9 i0 q$ P% A' P; E9 q1 R: V# `
  423. }
    1 D1 R, ?8 N% [

  424. 4 V5 ~9 e* d' n! S$ e" P+ K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& y2 x& s; K1 K5 _, X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 L$ b, H2 F' l( t5 k# Y) D
  427. " K% [$ T. N4 @- Q- e0 R, t) v0 p

  428. # ]9 N* }  ]8 c1 y7 X& |
  429. ; v+ |( J' `  i+ C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 U( P: \8 f7 ]8 u. S$ g* ^6 E0 h
  431. {
    ! f/ |( b- \. b4 y" Q+ f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) m, }& ], t- v3 H% a0 o4 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) b+ }7 k/ v2 B* c$ p+ T
  434.   {6 H& ^5 o- Y6 h  j0 V
  435.     char szLanguage[50];+ h7 ?0 x7 M5 O, w: S
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; q8 K+ F: ^" q2 \& l7 u1 J
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, X5 c; H' p/ q; J# F4 V% m' d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ W9 v; m$ x7 D; g
  439.     else                                   m_iLanguage=ENGLISH;
    : U# |  u' S: j+ b* [% M
  440.     char szRegister[100];! @# Q6 M0 ^' j3 d+ O3 I$ }$ L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " I" a/ A& u+ a! G
  442.     strRegsName=szRegister;' u: n4 {) O+ l' q9 x+ N' d
  443.     char szPatchURL[100];
    - {  k" V6 F# e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 a) q6 ^5 F7 U1 j' E$ l# i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& S; W& ]; h2 n1 G$ B/ c3 o
  446.   }
    ) r. \: t5 V- V: K& ~! E& _! O
  447.   else7 g* f* i& f& {0 N1 |* v. M& s
  448.   {$ L1 b4 v# }8 j! ~- l$ z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 i. M- t# Y+ q- g) g8 ?9 |
  450.     strRegsName=DEFAULT_REG_URL;
    1 N7 W; x# F2 N) K! Y+ @$ [
  451.   }* N  s1 K8 k! T+ d  h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 Q0 U0 w6 s7 f3 s  }  V
  453.   {
    $ L5 U$ C' u' u: f) e
  454.     char szIP[50];6 m; C! c8 f: Q: Z5 P
  455.     char szDIR[300];, {/ A8 @- m2 @4 F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 |6 {, b  b- q) g* H, C
  457.     {) z6 j1 |1 W- Q+ r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : W7 F* I( Q& w- j, I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) e7 L7 {" d, C
  460.       strHostName=szIP;
    3 Q/ y8 }- n* J: c) A
  461.       strHostPath.Format("/%s",szDIR);
    ( |1 I4 H& O( p9 v& k
  462.     }4 r' E+ \2 o, i+ a. c2 P
  463.     else6 h/ }- K1 m( w
  464.     {
    6 R5 X: G% A1 \% ]- k; ?1 O
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). Q' |& J' h: e: D  t6 L
  466.       {6 I3 {# F5 a: w6 M( ~1 Z2 Q
  467.         char szLanguage[50];
    * X2 f+ y* e4 a+ l1 d, x* ^! j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , X4 ]$ n  t! o4 q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& u& p; o. n8 U% ?% D6 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; O9 a& u: V, e- I) f7 r
  471.         else                                   m_iLanguage=ENGLISH;
    4 k; U. E. j* G9 ^  P4 ^, G9 H
  472.         char szRegister[100];
    ) B0 q# R2 P: @2 e  \  R, [
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: Y/ c6 z% p6 L% L
  474.         strRegsName=szRegister;
    & f' J2 I; D1 v* m
  475.         char szPatchURL[100];
    9 r6 }  d0 A( {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 X! n) s; f  I; m7 t2 f0 m- z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 _* ?5 b& p( }, A; T8 C
  478.       }  b' n: a( r  X" Z3 q  O
  479.       else
    1 @& y" x- P* F' ~
  480.       {! @7 Z7 C/ {, x5 [  T& P  g+ g- t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : ?# e% X$ x/ q3 a2 }. w4 S
  482.         strRegsName=DEFAULT_REG_URL;  J: i$ W0 Y/ w- ^% z1 m  p3 v* ]' D. R
  483.       }
    ' e5 K( G8 o- N. H% M% T# v8 W
  484.     }
    / I  [/ E* D* K# S
  485.   }
    : E9 S0 u, b: z$ ^
  486.   return true;
    ' n% b! o1 m+ V. L* B
  487. }
    9 Q" q/ Z- T, N" `" r7 ?
  488. - o6 K6 l  y+ ^6 \% k( E
  489. #include ".\ZLib\unzip.h"
    - p& i$ b$ _: L: d6 F! d; D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);2 l4 c# P4 Q% b$ A0 L. o
  491. /////////////////////////////////////////////////////////////////////////////
    + ^: V% t; t9 V. n  M
  492. // CRevAppApp initialization
    % I9 b' T8 e! |2 B  A. o# G2 o

  493. " f1 L! P0 Q# l0 C8 B
  494. BOOL CRevAppApp::InitInstance()3 I& s; n! m! n2 I; o3 i; U
  495. {1 I0 D% j4 k' g8 k/ d' L4 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 V6 z% P  x. h% w5 w; B8 r

  497. ! b  w* `' k9 [1 f0 A3 ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 }# F5 y" X2 {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( t. S# ?. {) W2 l
  500.   {3 g9 H  J9 B1 R: Y7 g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, Q6 [; M# q1 Y. U  R% s) j
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 L: d; X: V3 o) W$ z) c7 g6 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' v! F9 j3 p& Z
  504.     {; L, N; i& ?! Q6 W, s
  505.       strcpy(szPath,szPathTarget);& D; R/ p- W) x% R; O, ^4 s
  506.       SetCurrentDirectory(szPath);
    ! S, Z5 Y7 w6 d2 o/ J; g/ Y, L7 p9 H1 i
  507.     }
    + z9 c& F, a. W/ w
  508.   }4 [5 N0 _( J" G( I/ q. M; C
  509. #ifdef _DEBUG
    ( I5 [3 g: b5 |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 W0 h7 X' W: v3 C5 g
  511. #else- S, G9 S4 K, S8 i% k' K/ ~
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 m- N  N( F1 e" n2 H, a& F
  513. #endif
    ; v& B# j- p* y; g9 d4 d
  514.   {/ T9 M9 [. _+ b0 e
  515.     char tempFileName[MAX_PATH];& c3 ^: T1 @6 F4 L4 V2 m
  516.     strcpy(tempFileName,szPathSource);
    / v, A. l1 @: Z0 v7 E0 J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # |1 y* b) h4 P% s) P8 L3 s; _" t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! ]% d0 ^6 W: ]- g: v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ K/ h% O* C; t) {6 C& ^- p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * ?/ h$ Y9 |; D
  521.     return TRUE;
    3 `6 R. E4 \$ k, h, z3 E
  522.   }' \% c& n( e: p7 e& }/ F: ]* Y- B
  523.   // Nuke 0118: Delete run.exe
    ) W2 ~5 D- t6 L  w- t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( V5 P) |4 G" m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 n! k, l2 A& w, c
  526.   if(!ReadCfgFile("Config.ini"))
    0 F1 b9 A7 ~/ [& f% |8 E* S- k9 F3 F
  527.   {5 e( P) u0 k# s' K$ H6 Y! O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 b# q) b8 `0 p& |
  529.     return TRUE;
    1 ^$ r* ^' n( V3 I; U2 d; j
  530.   }1 S  L$ `# r2 k
  531.   HANDLE mutex;
    / _1 ^5 @7 r) K1 n9 B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ r' P9 n" K4 m+ T$ D5 V9 ?
  533.   {2 Z; s9 u: v. p% g+ ~, h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 k) R; R! `' f) m6 }# h+ k
  535.     {
    3 p" U/ u/ L; D
  536.       CloseHandle(mutex);* o; z1 ~4 h: {! V
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ \# o9 Z8 \4 W3 b
  538.       return TRUE;
    5 _" X2 y& c0 ]4 }0 i) k, ?0 N  K
  539.     }
    $ J! Q* [3 w7 w& |$ ^. U+ ]
  540.   }  
    : U0 _$ ?& [( o! k* z# @
  541.   CloseHandle(mutex);
    1 v4 d  a9 I8 \* C9 t

  542. 0 P6 s/ F' d8 ~) R  w1 V4 R" V' a& F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) ^  p, h9 D: W- h  U

  544. 6 K& L. f; E8 \6 {, Z2 j
  545.         AfxEnableControlContainer();
    ) _5 }7 g; u6 A0 ^) v7 k
  546. 1 s/ t' [& ^  Y- k( g
  547.   bCanUpdate=FALSE;
    / F# V/ y/ F; X& P7 g+ i1 \
  548.   dwStartUpSteps=1;
    3 f/ X9 ]( t% K3 n- L6 P
  549.   dwProgramState=AP_NOTHING;/ F% {, g7 h% y

  550.   X3 J6 }- I! q5 g5 I  ]8 h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , A- Q. {+ l" Q- }$ g

  552. $ M& s, p) A& U7 n7 [
  553.         // Standard initialization
    ) ]- ~- A3 s" m6 ?
  554.         // If you are not using these features and wish to reduce the size
    5 t' U- O7 `% l! X3 U
  555.         //  of your final executable, you should remove from the following; `7 T0 o  J* w( y# t" T9 ]7 n
  556.         //  the specific initialization routines you do not need.$ g1 `6 o' i8 V6 |) w, R
  557. # m6 T+ E7 F3 N8 N/ Y5 k
  558. #ifdef _AFXDLL
    1 }2 r9 C5 y; [4 M9 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 t9 e# [* S/ y8 m" a0 M) v- F
  560. #else
    3 @! \1 @3 ^' o, P6 X4 Y/ y( H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ ^" g/ J$ u3 B9 b& e+ ]9 t/ f4 w
  562. #endif
    7 N1 _: Z7 t4 M* S

  563. : a, Y# l3 F$ c6 A
  564.   dlg=new CRevAppDlg;; l1 t' ^" H4 t: p6 ^, K5 h7 i
  565.   dlg->Create(IDD_REVAPP_DIALOG);' i9 i, A/ L4 a2 l/ W7 @$ ^$ f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      N' ]1 m0 |% E4 F0 ]/ |5 A
  567.   m_pMainWnd=dlg;
    3 |" h, G# J$ X+ m

  568. " h, s" _4 g7 d' H8 W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( ]6 P8 H  v' c& M" W- p
  570. ( P9 J0 O4 d; _  H
  571. //  GdiplusStartupInput gdiplusStartupInput;" X) J6 ~  V# ^* v, f
  572. //  ULONG_PTR gdiplusToken;
    " F$ Z$ K, ?2 f) Y$ a$ ]! J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# D( }8 D, U4 }/ b2 t: u7 K: A& }9 N
  574. $ f$ X, f7 O% ?
  575. //        CRevAppDlg dlg;
    9 c0 o7 k! A+ h3 y" t
  576. //        int nResponse = dlg.DoModal();4 [5 Z/ C0 L5 Q+ V# \% @/ ?5 b
  577. //        if (nResponse == IDOK)" @5 }& o- `. m2 c
  578. //        {
    1 V9 ~& S+ _! u' X+ s1 V
  579. //                // TODO: Place code here to handle when the dialog is
    5 Y, ?  T" d' F% Q$ {
  580. //                //  dismissed with OK" Q9 n, |9 f3 J
  581. //        }2 o' r2 {' c' p' T4 c
  582. //        else if (nResponse == IDCANCEL)
    . a% U, O/ V1 A  s, U
  583. //        {
    % }, U$ I4 a# S- K& G4 ?! l
  584. //                // TODO: Place code here to handle when the dialog is
    : b! `- h" b8 `4 w
  585. //                //  dismissed with Cancel
    " T  f9 l; \, x  O2 G
  586. //        }. V) f) z2 L8 [& {, a4 r4 K* s
  587. ' |9 X* Z; l. i* Q" M4 s
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 D& }2 ^" t$ r
  589.         //  application, rather than start the application's message pump.
    1 g+ b" |6 e; a
  590.         return TRUE;2 E6 E2 ]+ P. y/ t
  591. }
    / V) Y* T" W+ a3 p( Y0 N% J' _% r
  592. : [/ m: y8 y( C: Y$ n% ~7 r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)$ k! t6 \7 y% t* r9 |, y
  594. {# q+ d: L5 H+ W- U, e
  595.   int i;
    * d7 v) S) O1 b) b( M
  596.   char *szRet;$ I! F3 e! j; y3 C

  597. 8 D$ [, m4 k7 n# i( i4 F) {
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + v6 e7 H3 Y5 A% D' E! B
  599.   if(sztoken)+ z8 r, u( j; W2 S6 E- Z2 N2 [1 c
  600.   {- \# E! {/ r+ W/ ?
  601.     szRet=&sztoken[itoken];. a; {% ~; S8 t) c
  602.     while(sztoken[itoken])
    1 H4 e7 _1 F% U  s! M& R; ]
  603.     {
    & ~; f7 s; g+ W2 ]
  604.       for(i=0;i<(int)strlen(token);i++), {$ M  ^4 [( w. W. [
  605.       {
    , u; G& e; b" G/ ~, q. ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ T( {8 v& N. }- n
  607.         {
    2 _  y, p) f% K/ b- W# Z
  608.           sztoken[itoken++]=0;2 |4 }. h4 w' v7 q% C) g% \4 ^3 Z
  609.           sztoken[itoken++]=0;: T; K- G4 Y) g* Z8 ?
  610.           return szRet;
    0 `6 M* |+ ^, T
  611.         }4 M  `+ _' I# |- Y
  612.       }% W( Q4 X9 C7 m, U/ m' P& q
  613.       itoken++;
    1 }; N1 y3 g8 R, F  R6 a' D& ~
  614.     }
    ; L. A* b4 L( k& `: f( u4 p4 L0 ^
  615.   }/ j' W$ ]. n' J9 i
  616.   return NULL;& m5 E( L# Q  j$ p$ K  Q% s
  617. }
    - f4 i8 ]6 `3 t4 K% o" |

  618. 1 m2 g) g" C5 H; r
  619. void ProcessProc(long Total,long Current)" p; I- N+ ], ?6 s
  620. {
    , J3 C& E0 _7 \# h
  621.         MSG msg;  z2 I+ z: J: Z% x2 ]2 w9 {) h5 |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, q) \% W6 ?8 R& _3 G5 y/ r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ ?  T, {% a! H0 r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): p: m0 O" E. T0 `8 r( N
  625.         {3 \4 @! i) R0 s* Z+ f# }* w
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( m# b3 `! d5 p
  627.                 {
    % C) K; j6 m; Y# d+ z& T5 L
  628.                         return;
    1 x7 U2 D9 s: H! F  e9 y( I
  629.                 }
    ' R9 Y# }! [) E0 r7 S  L. \
  630.                 TranslateMessage(&msg);
    " N/ L% ]2 H0 H* d# u% X* y
  631.                 DispatchMessage(&msg);5 K6 |8 G, s; M# |; Z( ~2 ]1 }
  632.         }        % Q2 i6 q$ c5 X. N" n
  633. }
    . _8 {5 j! z) H" J

  634. & `: M8 ^, B# N  Y- x
  635. BOOL bFirstChar=TRUE;
    3 o1 ~* H9 m- i1 d0 o8 p. A: b: ?
  636. " S8 k& `8 `9 D& u8 N4 [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# L  U; e% A* z8 l) m
  638. {
    + V) o/ K0 }9 M. P8 D. J& t
  639.         // TODO: Add your specialized code here and/or call the base class
    2 {. J0 m0 D8 U, D; B3 s5 Y
  640.   switch(dwProgramState)9 t- D/ q5 V4 y. k
  641.   {
    8 a! {, `1 x' Q' P/ d
  642.   case AP_NOTHING:5 N& Z$ ~9 R3 o  K
  643.     switch(dwStartUpSteps)" F! h; Q; i9 e4 E8 M5 F
  644.     {% f- }" }* r/ G' q8 N6 D9 i" I8 s
  645.     case 1:& {! `6 U, R$ p- [6 L5 f4 q6 B2 ^
  646.       {+ W" C! V# `+ {( m, [5 r: {
  647.         int i;
    ( z( ~% h. _! x
  648.         CDC *pCDC=dlg->GetDC();
    7 N4 J2 E1 M7 k8 ?
  649.         HDC hdcwnd=pCDC->m_hDC;
    5 [$ ~9 p4 M" F
  650. //        Graphics graphics(hdcwnd);! A3 L' ~% I. G" R3 U  {/ V
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 ~" z5 `. E) M/ F! N
  652. //        INT iWidth=bitmap.GetWidth();2 |9 J, ~, q9 _2 N. s: {' Z: x
  653. //        INT iHeight=bitmap.GetHeight();
    6 h4 S& c/ S& X2 V- F
  654. //        Color color,colorTemp;
    9 |7 ~5 f* C+ W+ y: O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 ^9 W3 X% ~8 ~. w! @  o$ e
  656. //        {
    7 Q; E, [, p) s3 t( n1 i
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" K5 L& b4 U' F- [/ ^$ S% y# [
  658. //          {
    $ N2 m: E/ h$ S; H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 ], M6 s4 |9 o
  660. //            colorTemp.SetValue(color.MakeARGB(
    + u* q3 j  v% ?5 v: g
  661. //              (BYTE)(255*iColumn/iWidth),! ?+ g/ [6 b7 T- [
  662. //              color.GetRed(),2 O  E4 _+ F- i$ I  o
  663. //              color.GetGreen(),
    * l3 o$ |$ G7 c7 N0 O+ W4 p
  664. //              color.GetBlue()));
    9 c# A0 f* o/ `7 X0 b& P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' C9 f2 F6 ]8 }
  666. //          }2 Z5 a4 D  [7 N: P! ?
  667. //        }, k# Y( Q& }- |# K8 u
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% F7 p/ D2 w; W! x) _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- H" H5 p2 m1 q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 r" X& d1 }1 ~' S! V; d; r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 H: v2 H) f4 r9 z! L
  672.         for(i=0;i<240;i+=8)2 ^# K% i& j& r& o1 I- n
  673.         {% u' ~) \' O; t: v" h4 S! t9 T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 S( t% n: ?7 {" A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 u$ F1 O6 _" F' c' L: @& J3 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 @: g- g% ~. h  M1 ~7 j
  677.           Sleep(33);6 @# N+ g) E9 K1 |0 H7 [
  678.         }% w+ l& m! M" M, u/ h
  679.         Sleep(1000);# @2 A1 K0 a6 R4 H2 l) d
  680.         for(i=240;i>0;i-=8)+ |* n  Z6 T( O
  681.         {
    * ^8 c. E. h5 P6 {2 b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% ~0 p7 \7 q" O: ]& ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 m+ d( w& j7 q/ |
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' [9 V2 I( E( x
  685.           Sleep(33);
    " Y' ^& l+ g  H% I7 E7 E
  686.         }: m/ x- K* h/ z0 X5 A8 |5 q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);8 x0 }0 Z% \1 J6 t0 {' j
  688.         dlg->ReleaseDC(pCDC);
    4 z6 |, D  V0 U& u2 T2 P* v' @
  689.         DeleteDC(hdctar);
    * Z8 B7 D$ h# B
  690.         DeleteDC(hdcsrc);; S& ~1 B+ ], r9 Z' i4 {
  691.         DeleteDC(hdcorg);
    - S8 w# t9 a& U7 ~
  692.       }. U% J* a4 V, ~1 Z- l% M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 g4 n* r( l9 ~: a# P4 J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 l" H9 |9 ~& s3 z: S6 t/ ^5 k6 k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( M" a, @8 |; d- v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 W  s* q$ d) C/ p% G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 n0 T5 [. ?7 s3 }
  698.       if(!Dn.Connected())! q" E( D0 t9 C8 z! I' I3 h
  699.       {9 h: o5 z: `6 q8 ?. m. t
  700.         dwTotalFiles=1;7 [) E3 i/ p' Q6 I9 R
  701.         dwDownLoaded=0;" h, `" {/ J; N- z3 ^& B
  702.         bSilentStep=TRUE;2 V4 Q2 S/ z% V$ |/ I+ c
  703.         bCompressed=FALSE;
    - O& o& D- a- z5 I' N8 L( y! X
  704.         strExtLocal.Empty();, `9 q* V8 h/ o6 j- w! R0 m. ^- h! g# ?
  705.         strFullName="readme.txt";# R0 |( T5 @! V/ Y
  706.         dwProgramState=AP_CONNECT;7 {$ w- t# \- |7 J, |+ {
  707.       }9 f/ V; l/ b9 n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. G* g9 u" }/ m
  709.       dwStartUpSteps=2;3 S1 F7 F0 t: ?  V
  710.       break;: M4 C1 Y' \8 |1 l7 M
  711.     case 2:
    $ n4 i# K- W6 d. S, L4 B: n
  712.       {, e5 ^6 Q% F' O* A! Z- ~
  713.         int iEOF;
    % p1 P# G& V+ Z; I8 }2 `
  714.         FILE *fp;$ F4 D' P+ Z( S, N9 f
  715.         char szString[512];/ d* T0 s5 {6 j$ F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% f" Z6 m: a4 e8 u( N; M
  717.         if(fp)
    9 G! M" A* t. k
  718.         {
    : u5 u) j4 c! ]6 M+ Y, y0 e
  719.           do
    / _2 o7 K' h( v3 o. {
  720.           {
    * M' B. E$ E( m% B
  721.             iEOF=fscanf(fp,"%s",szString);
    & v; F7 K6 y6 k/ b
  722.             if(strlen(szString))
    4 u& C4 G( u# a1 t
  723.             {* n& {9 P  Z: b
  724.               if(bFirstChar)
    # |" [8 \7 u9 l: ?
  725.               {. v# i& ~& W! Z, @
  726.                 bFirstChar=FALSE;! z7 i6 G+ _6 x$ N3 {8 {
  727.                 bConnectIsBig5=FALSE;& P, X8 i8 S+ \+ B' u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + o) O9 p; @; X9 o; C! d
  729.               }4 X! R( g4 N. X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + K( |3 A3 ~* V- d5 t" [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 w; E0 w$ Q: v# s
  732.               dlg->m_ListText.AddString(szString);4 M. O2 v- Y* M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - F! G4 W1 n# }; W  T& \) b
  734.               *szString=0;( v5 A6 M! H! ?" q- l6 A
  735.             }3 i6 x! G' s( B
  736.           } while(iEOF!=EOF);
    2 ^: _  H2 x; A+ C0 l
  737.           fclose(fp);
    ) K6 n; A6 ^( O! V' l3 B5 X4 d9 n
  738.           unlink(".\\DownLoad\\readme.txt");. p7 t; V6 ?) c* t# x
  739.           dwStartUpSteps=3;; h' W- C- N) {2 ^% |' o2 B
  740.         }
    8 E; K, ^0 _$ J, b
  741.       }
    1 _1 k" L- A$ [/ ~" K2 ^+ A
  742.       break;' f. v! ^' g6 v7 Y! r- ]3 n* A
  743.     case 3:7 B* F5 h- [, B3 u9 B! |, t
  744.       if(!Dn.Connected())1 l5 X2 Q( u1 H% J' m" o
  745.       {% U% X% r/ E: C) {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , H+ K0 ?! U6 F3 ~' [7 {9 S# v, e
  747.         dwTotalFiles=1;1 O* }- s0 i" K6 O/ e
  748.         dwDownLoaded=0;+ K1 Q0 e( f0 n1 e
  749.         bSilentStep=TRUE;  E2 I: s1 a  B6 K( C
  750.         bCompressed=FALSE;
    5 c" Q/ z7 ]9 l* \! v
  751.         strExtLocal.Empty();- c! ]: ~5 e' Z; M8 S. d% x! {
  752.         strFullName="checkversion.txt";$ X/ n+ ]9 |# _* u4 F
  753.         dwProgramState=AP_CONNECT;
    - ]1 L. ^! R: u3 e( n! e$ Z5 ^2 z
  754.       }; p4 y6 _5 v, h5 S4 @$ X
  755.       dwStartUpSteps=4;' o6 j% s/ n1 l3 j1 X+ u, z
  756.       break;. X% f" r6 B9 F  m1 H
  757.     case 4:0 l' V$ R! q' J, ?2 c6 b
  758.       {" V) |9 Q) M) ]1 g$ Q2 Z$ W! n
  759.         FILE *fp;
    8 \' f' Z" l8 e/ B
  760.         char szString1[128];8 s; K4 O1 T; l8 Q
  761.         char szString2[128];
    3 u+ M! j8 f. A& r! [$ T( D0 L! E8 d
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . ?) }! R4 t5 |7 N' q1 s6 _+ ]6 e
  763.         if(fp)
    ) e9 v& b; h+ u) z5 [8 y5 ~; U. e
  764.         {, Z' `4 a2 o5 B6 N1 z* F
  765.           fscanf(fp,"%s",szString1);
    9 |0 q) D" g7 g7 B' q3 ~+ z
  766.           fclose(fp);
    ; C" H6 c$ Y/ V- C
  767.           fCheckVersion=atof(szString1);1 G- c4 o5 w* T# ~4 \* b
  768.           fp=fopen(".\\checkversion.dat","r");
    + y1 P$ y& `3 A2 X
  769.           if(fp)
    5 W! n6 G; H' b
  770.           {7 c5 V7 h& K* z* d
  771.             fscanf(fp,"%s",szString2);
    : P% t9 O* [+ c+ {
  772.             fclose(fp);/ U' ~! c3 n9 Z; v1 I. N+ n( e
  773.             if(atof(szString1)!=atof(szString2))) h, |: s" |" K' f) T3 i/ p
  774.             {
      e" d  j$ h' L0 C9 D
  775.               if(!Dn.Connected())
    2 d: C( d* a1 y; H- k  ]5 H
  776.               {
    % s' b5 e- i% M% P
  777.                 bFirstUpdate=TRUE;4 B1 f: e, V0 Q, r2 P, t* b
  778.                 dwTotalFiles=1;
    4 Q  h2 @% T0 w) [( Y) R
  779.                 dwDownLoaded=0;/ Q/ G- [- e! l% e' `
  780.                 bSilentStep=FALSE;  [& u. ?4 ~' l; b- ^+ Z7 I
  781.                 bCompressed=TRUE;2 F. o+ M  U4 {  H
  782.                 strExtLocal=".\\DownLoad\";
    ) w! {* K* G* ^
  783.                 strFullName="update.txt";9 f( X2 {1 S6 N/ d8 M- j
  784.                 dwProgramState=AP_CONNECT;
    9 O: d0 K4 \2 ]0 T1 W) \8 L" U- T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 {$ n5 Z  T  B5 _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! K% _' M8 Z" ?+ `; |8 X0 B  G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 U/ A% E4 c% H' O
  788. ; U& ?6 J4 T$ j9 u9 z( ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# @6 j5 ~9 X+ c5 A" A) k
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    6 s: J2 y* }. h0 a7 i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 H3 L' p. i) F# M
  792.                 {+ z0 E& L' R) u! \+ u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- N) w) x3 f" M1 ~1 S$ J: b. v% d$ h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 I7 |# w3 S$ J! t3 D  g+ p+ T7 f* ~2 {, @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ h( @$ w9 A& G# N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) d9 F( d" |  c2 l

  797. " F3 S% c' `( W9 v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . D+ k7 ~' e3 f) }) \+ r" v" x  V& \  y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 s! {5 g; ^9 s* c" P+ `- N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* }; a! l& z5 i+ Q8 v! i6 Q4 M6 l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - u: m& V/ Z4 Y) G
  802.                 }$ Y: C6 Y% G& B  h  ]1 ?. d6 l
  803.                 dwStartUpSteps=5;0 n6 H9 l# F7 X& ?9 k
  804.               }6 y9 A0 {& k9 d# r  ^8 Y* t
  805.             }
    8 x8 T2 C- F; P: I$ P
  806.             else( \6 p; }' W! `; D9 }
  807.             {- }8 T: T) G5 I  M# V6 O
  808.               unlink(".\\DownLoad\\checkversion.txt");% e3 s" S/ _; @( i8 |! |( {3 D
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; B) T7 {6 ~! R% n- M! Z' |. f$ U/ u3 U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. t. [# K& z7 _) k2 ~( r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 B% \. e. n7 j- p* O& T
  812. , ^6 T2 ]6 X- J+ Y- Y+ C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 b9 u: `$ g+ a7 s
  814.               dwStartUpSteps=99;! X& O  L% G( X5 y1 r$ U: U2 D8 D8 U. S
  815.               bFinishUpdated=TRUE;- ?5 R1 K+ `' ]5 P5 P7 L+ E
  816.               bCanUpdate=TRUE;" p/ T/ ]% w" b3 \3 B
  817.             }5 M% G' d8 K7 n- h) v
  818.           }: {, l, l' o! w8 W! T  B- Y3 `* X
  819.           else  O% r8 y- K5 n4 z) X( ^) J1 z0 n, a
  820.           {3 o& ^5 I2 ~; d7 J5 R$ y- i
  821.             if(!Dn.Connected())2 ~. d' v3 x. l6 c& f+ R7 N# u$ T) P$ v
  822.             {
    - t1 l4 b/ R6 T6 S$ o
  823.               bFirstUpdate=TRUE;4 z; L3 T) r" T. F1 X" V
  824.               dwTotalFiles=1;6 T9 ~6 I1 o* {( W, R5 u7 Q) ]
  825.               dwDownLoaded=0;) O6 a! I* k; O' A# I* N
  826.               bSilentStep=FALSE;+ S' A% |# o/ g8 {; s6 W
  827.               bCompressed=TRUE;0 |6 u8 ]1 j! B" {& E* B
  828.               strExtLocal=".\\DownLoad\";+ j3 A+ s/ W/ Y/ h% P
  829.               strFullName="update.txt";4 l, m8 j2 P% u, I6 b0 G) z% u0 p
  830.               dwProgramState=AP_CONNECT;
    $ t4 t' X0 h3 m) v4 D+ `  U
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ o# z5 n; `( n4 t
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / F" C) J+ X5 _: F: r' m7 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . k; ~9 I0 u' r- g7 ~3 E" K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ V; T0 D( g8 r9 \  n. {1 W
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 P1 H# K1 l. t* I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 e) p; j$ `& J- e" r# b
  837.               {
    1 `+ q& n3 @: D# T! X7 m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 ^" [0 {$ k3 m
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, R" y- u: G# v1 H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 t  V! f. v% ]( A9 g, r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, V8 l8 n; U( _3 `1 M0 h/ o
  842.                
    3 H4 w1 [5 C' ?+ V9 P7 l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! ?" f  G: Z- m- p/ u) p8 p
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' G1 p) O0 f0 }' J/ k2 y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - v# ]6 N- E$ m) Y" G, V8 d/ H1 [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 H( P1 a$ u- j6 _0 m% C
  847.               }* Y) I8 A5 X+ [+ i
  848.               dwStartUpSteps=5;6 {; @& N) y! }; `6 E. y. y3 ^
  849.             }9 [, |; m/ ~: n, D- q2 o6 ^. C! T8 }
  850.           }1 R0 V; M3 c0 S4 F
  851.         }3 i; ^8 r$ }  i, ?5 w/ a1 g8 k
  852.         else
    2 P/ o5 ~  r& S
  853.         {( t( o+ S/ {$ l3 R, T
  854.           dwStartUpSteps=3;
    ) ^* e8 x1 i, N4 k7 x
  855.         }9 s( O1 J- _' q; [2 n: D% v0 [: b4 `. M
  856.       }5 R$ z9 n$ s! R! w/ n
  857.       break;# ?# z! i  K# y* t
  858.     case 5:
    ! Z$ L3 {# R  O  C$ y  y! w
  859.       {
    3 a& w; h/ b' N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( T+ ^4 W( m% ]9 c
  861.         {& X& p; T+ m% `& }5 l" V# B/ y
  862.           int opt_overwrite=1;2 @! P$ n! o: j% J, d6 R8 T& V  f
  863.           int opt_do_extract_withoutpath=0;/ `; h! j% }# b: g$ o( x
  864.           unzFile uf=NULL;
    4 [  H9 I6 h; x4 o: V9 g, J
  865. " Q/ }7 i" ~( Y! A
  866.           uf=unzOpen("Wsa.zip");
    ( m* |+ F5 s# s3 Y% f
  867.           if(uf)" {4 P3 c' ^5 T  L' z7 m6 R$ {- F: c
  868.           {
    4 a5 E/ G5 T% V4 o- L! A1 v- a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % [: z: r$ [6 Z. m( b/ _+ h4 t0 ]
  870.             unzClose(uf);
    - t" n  b8 @2 w1 {
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# r. M) m! O1 e8 z4 j: p5 Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 K9 c  T2 Y# T2 b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% X! G# x- A% W6 K4 |+ y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * A/ U8 C/ B1 G4 [1 C1 Y# u
  875.           }
    " J( z6 k& E/ C# M# M4 b! X+ _: z
  876.           DeleteFile("Wsa.zip" );
    ' _7 e& e2 q* F9 N  }5 N) T9 `
  877.         }
    , A3 J! A5 @2 p
  878. 6 V  k2 R1 T: v9 w
  879.         if(CheckLocalVersion())
    & v" U& q. ^' T9 l
  880.         {
    # T$ U. j" }0 [. ]: y  p$ |
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' c5 C& |3 r: }1 \/ ?% ]6 G$ v5 [
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; J' U( Y. y4 l
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");) O3 F' Q$ f  y0 a) |: s* o" l5 b, L
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # _0 d' E4 ?4 V1 q  J: u5 P
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& c' B! d8 Y0 v; C+ _+ o
  886.           dwStartUpSteps=99;9 Z" A# H& R7 ~, Y1 s5 B, ~
  887.         }. V- g0 ?: y0 b
  888.         else
    6 ^4 I1 G$ N9 {8 Z) |# b
  889.         {! U" D" W9 k& [' B3 z1 `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 C4 m8 q% ?+ Z2 W
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 o* v* `# p8 I& C; i
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    * Y6 B+ T1 j) X& U$ ?: G" X

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

7 Y/ j+ |; _  C  y8 h/ T8 d
* e5 E# ]3 q5 b! U2 k, d1 x' A

評分

參與人數 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-16 11:11

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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