CSUpdate.exe源代码

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

2 n* Z+ `* V% c5 z! S
  1. / RevApp.cpp : Defines the class behaviors for the application.2 v0 ~" H  |8 T1 F' z; G  [) m
  2. //7 s- w  G$ W; F% C3 t& N% t$ {
  3. 7 U$ X* C* Q; n% U7 l
  4. #include "stdafx.h"
    ' E. U0 s5 {( W/ P9 o* O( t
  5. 3 G+ z* o8 M/ U% K
  6. //#define UNICODE0 L9 {8 Y! j. t1 Y2 y7 f" J
  7. //#include <gdiplus.h>
    ( m& @4 |: V/ H: G2 L
  8. //using namespace Gdiplus;/ N$ e( Q, g4 c: T9 j) Y2 O+ @0 _

  9. 4 t* J! n. c& t# z7 _0 w# [
  10. #include "RevApp.h". Z0 ]. M/ ]! C; i, Z
  11. #include "RevAppDlg.h"
    0 R0 p" Q  {" C+ S
  12. 0 o% \% ]5 [' {! N; E2 x
  13. #pragma warning(disable:4786)
    - V1 e" X) u! X2 ?' {* u5 h# T; v
  14. #include <map>
    ) D; g9 O( b8 J) \6 `5 l  [; d% y
  15. #include <list>
    + x! |! G* D' B% f* B% D4 r: X# x( E
  16. #include <direct.h>
    $ v2 K+ l( A  s* s. u' R& _
  17. & ]8 n/ O8 i. z
  18. #ifdef _DEBUG& U) V% O+ [9 Q* {6 ~$ q
  19. #define new DEBUG_NEW' ]  A5 G; U7 ~3 ~7 K& `
  20. #undef THIS_FILE
    / {, b/ D4 S2 \" L* J3 u$ b4 f
  21. static char THIS_FILE[] = __FILE__;
    $ Q7 ?0 E9 A/ [( x% j/ y( N  Q. G
  22. #endif# k$ }* S" F7 ?$ F  U; M. L
  23. #include "SkinResDef.h"3 b4 f+ _! C( q2 P/ F$ Y  `
  24. #include "ChangeBG.h"
    $ _' H) g+ I+ E8 Y2 Z( v! f4 b
  25. #include "AFXINET.H"
    ; p- G& n$ Y( |# `  `

  26. : @' o  X% Z! j, Z* L+ }% f! O6 ?
  27. #define TRADITIONAL_CHINESE 0
    5 a/ h+ q  F+ p( M, e5 G* C# ~0 A- H
  28. #define SIMPLIFY_CHINESE 1
      X( E7 {, C3 \
  29. #define ENGLISH 21 B  s- M5 d+ G7 ~' _2 T
  30. int m_iLanguage = ENGLISH;
    6 }7 O9 C5 m3 v
  31. /////////////////////////////////////////////////////////////////////////////" T- Y& r: j- ~) T- e1 m
  32. // CRevAppApp
    ; Z$ V; e0 k* W3 S) V

  33. & I! S: e6 J% p, I: `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / d4 F: L% ^, v, T7 W+ W, @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) T* o' C7 N: w) k! \* U6 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . o( o: u$ |# Q7 w0 A/ `9 |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. S" Z3 A% ]& @; [3 Z" J
  38.         //}}AFX_MSG
    . I1 M; [6 T6 F0 o+ w: q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). e: \$ p* O2 |! Q. L5 E1 m
  40. END_MESSAGE_MAP()
    ; e6 c: C% ~" w  |4 i, k' q& S1 E
  41. 4 A! H6 t% _% t8 j: ?3 j
  42. /////////////////////////////////////////////////////////////////////////////$ z  s7 a2 W* X' r# ]7 e8 {
  43. // CRevAppApp construction% l+ E$ g3 A  Z+ z4 B

  44. : _  S( C; ?$ Y8 _' P' [
  45. CRevAppApp::CRevAppApp(). N( h1 @0 f# [* d8 t9 j1 s
  46. {
    ( [/ n; Y" p2 Q: X4 b3 p* e2 |# M
  47.         // TODO: add construction code here,* y) u  A9 @0 j, ]
  48.         // Place all significant initialization in InitInstance, f9 x- A9 L$ ]& j9 [! u
  49.   bDisplayIsBig5=FALSE;3 i$ _4 f& g3 S0 c# @4 Y, {
  50.   bRestartUpdater=FALSE;0 h/ X! M! L' M) \
  51.   bFinishUpdated=FALSE;* R* S# Y4 b6 N6 f% ~
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, t) C7 A, S3 f* _0 r( R$ t
  53.   InitChangeDataBig52GBKS();
    ! ?4 p2 D* ~& t8 q$ N
  54.   InitChangeDataGBKS2Big5();
    # I8 \$ l; D" J- d; s9 i
  55.         //4 z1 K/ O* i; @# z$ V* `
  56.         bClickRunExe = FALSE;9 U) x" R4 V1 \4 d5 q
  57.         //
    9 A7 d- o( o% o1 t: K
  58. }
      g' ?% I5 k: F# m

  59.   ~% H% `/ b$ O: K* |4 E
  60. CRevAppApp::~CRevAppApp()" W$ t; w) a! v
  61. {( N$ U$ }& h0 Y
  62.         // TODO: add construction code here,
    3 l1 W& K  q% k  z* D
  63.         // Place all significant initialization in InitInstance
    - E: M" K+ [$ T) F$ j! m& X; M
  64.   EndChangeData();2 f; T8 \2 M9 f* {- f2 T
  65. }
    8 \4 ~1 C/ U6 f

  66. : D" x' M) {" L- j
  67. /////////////////////////////////////////////////////////////////////////////
    2 C+ h% q! _5 g! u5 U" w3 y) @
  68. // The one and only CRevAppApp object, X7 z/ _) b1 Y- {$ Q5 ]. m1 n

  69. % o" c( W) e! L: h0 D/ m5 N
  70. CRevAppApp theApp;, c7 r# c7 \" F. g- ^" h- a

  71. ( W$ S, j2 b8 a4 m) l5 @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 w  |3 g7 \2 S8 P8 E
  73. {1 D" l1 y) H. b/ o/ r, z
  74.   int iEOF=0;
    - b& P' k9 o. P7 R, A+ A
  75.   char szTempName[MAX_PATH];- x7 d& j: n2 q( \+ }( X
  76.   *szFileName=0;5 y' F3 |0 b/ v. N
  77.   iEOF=fscanf(fp,"%s",szTempName);5 I# y; O! f8 c; K, k  N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 W7 O6 r, ^5 k: k& o6 n9 e
  79.   {( O& y2 F+ \2 u$ |
  80.     strcpy(szFileName,&szTempName[1]);. n; ?6 C: c# `  Z( F: H: ]0 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)* x4 o7 J/ h0 p9 [
  82.     {6 D* t% e9 W# i2 g2 [( e' B
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + O+ ]/ U# u& f
  84.       strcat(szFileName," ");/ d# ~+ @' }  q" t4 S+ n
  85.       strcat(szFileName,szTempName);
    $ v9 x: _7 m& i$ e8 O# A
  86.     }+ U1 R7 o# ]8 }+ F4 s
  87.     if(strlen(szFileName)>=1)8 U$ Q" K& D) r
  88.     {4 z3 T/ I" E) ?( D  Q; U
  89.       szFileName[strlen(szFileName)-1]=0;
    , }  B& x. ~  {6 a
  90.     }
    # l7 t) W# e9 V* V0 i
  91.   }
    % O8 k5 q! m9 H* R+ m' ?3 L
  92.   return szFileName;$ G7 U1 E$ F% }4 [/ W  J4 C8 k
  93. }; R' X9 y: U1 t3 {, R, a5 g# {/ h

  94. : j& i) z# }+ n" @9 ?2 \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! O6 P. u2 V: P4 P6 t$ W
  96. {
      ~2 ~0 G1 I4 a
  97.   FILE *fp;7 N+ p$ F% U; i9 L4 M/ }
  98.   char *key=NULL;& ~5 G  c+ I9 f5 J; m& T+ t
  99.   char version[MAX_PATH];
    0 H) n7 g  O3 x( ?6 {! K
  100.   LPUPDATEFILE file,olds;
    2 a" ~) L5 L8 Z# M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. Q3 w! {2 Q% F5 O% F9 o

  102. 3 W2 J2 I) w6 m  i( Z* b
  103.   UpdateList.clear();
    ; I, N( l" o( H
  104.   UpdateFile.clear();
    ( I3 V# h. f8 q% b3 k
  105.   if(GetFileAttributes(filename)==-1) return false;1 _% c% E8 g+ j% p
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) C( f9 O8 F# D
  107.   fscanf(fp,"%s",version);4 ^% t1 K" y9 E/ _1 y4 V4 m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# j. O" P  M8 o
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / i5 b+ b! {6 {
  110.   {- I% \/ z* i# H3 f! ^& D- C) [) L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* v# w. w- q- s- e2 n, M" k
  112.     fscanf(fp,"%s",file->path);  [; e+ o8 S6 r$ t7 A9 S0 `! r
  113.     ReadFileNames(fp,file->file);" Y* Z# Y+ T. y, Q; n8 T2 q6 ^
  114.     strcpy(file->full,".");" B$ A- l" S8 [) |5 I6 I$ t" g
  115.     strcat(file->full,file->path);
    ( B9 Y" J. _" L; @% w# D" p
  116.     strcat(file->full,file->file);! C0 {: A6 f8 E# X! q# K" M$ ?. ^
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 y! \/ K+ X& F3 j# H9 v
  118.     {
    : X3 ?9 b( o# H% {% b' n
  119.       file->vers=(float)atof(version);9 b5 f! ?3 w0 u3 a, p0 {/ @
  120.       UpdateList.push_back(file->full);6 N; J' a- Y) b5 j; h' j! Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# I% V+ X( }; T  |6 \0 K
  122.     }2 [5 |( \' d3 M' e: h& f
  123.     else
    0 p7 y/ w' W  d
  124.     {! k5 s* `9 t, Q' n# N5 p( e) q
  125.       olds=(*p).second;( \, @- K% X0 j0 M8 `+ _
  126.       if(olds->vers<(float)atof(version))
    ( z' j9 |, k. k8 g# m
  127.       {5 U  j1 ?. L% J, |+ V
  128.         olds->vers=(float)atof(version);5 D7 F. n  ]: F3 F
  129.       }
    & g. p6 q4 ?) ^/ m
  130.       free(file);7 {7 C# y4 ~+ u5 P% |- X* ~
  131.     }7 p0 N0 _, N+ b/ B" z3 E+ k
  132.   }) X* Z& e9 I5 A* b' ^* N
  133.   fclose(fp);
    4 n* F- R  X# ^1 K
  134.   return true;! u' ^- G& y% l+ k$ _
  135. }
    8 G, Q5 K8 D5 C& X: h7 v

  136. " Z" n9 R+ I+ n; v7 k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ D; Y3 e( |1 S2 ]3 N) G4 S% X
  138. {& S, @2 N! _0 w1 \) D
  139.   TCHAR  szFull[MAX_PATH];; C2 C& R2 ]; v. T
  140.   TCHAR *token,*inter;2 S. _: k* d/ N2 X- e! ~
  141.   *szPath=0;0 `) ~; j3 I% \6 a& |  X* g2 j
  142.   strcpy(szFull,szFullPath);
    ; `- u; @# D; z
  143.   token=strtok(szFull,"\\/");) m# O4 L' ?0 t3 C6 w6 S7 X
  144.   inter=token;2 _% {3 o. V, s8 B0 M& g: B9 [
  145.   while(token=strtok(NULL,"\\/")), T8 B# Q5 q- V& p9 F& p: J
  146.   {4 T2 d" w# y  X, |8 [  b) Y
  147.     strcat(szPath,inter);* G: x" E9 R- a3 j6 q% [
  148.     strcat(szPath,"\");
    6 |6 V3 F' V3 \% S/ \; Y  g
  149.     inter=token;. S3 k/ z( ?4 I" {1 H2 ]6 G% X
  150.   }/ ?9 m" D5 W, `/ x+ }* I# c
  151.   return strlen(szPath);
    9 j/ I/ J( `3 F/ E& `
  152. }+ q- ^" t0 N9 k5 `3 y

  153. $ y: i/ a8 x! ~( _$ @
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 o8 @2 i% {5 U. s9 @- q8 e0 k1 d+ j) m5 E
  155. {& E" i; M8 l0 e; G  @
  156.   DWORD attrib=GetFileAttributes(Target);- |8 s& _- T6 {) }
  157.   if(attrib!=-1)
    ) A+ K2 b- o8 R0 ]
  158.   {; J/ U, \) c; v9 R: i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * _7 h# I6 F. }8 ~7 K4 f, c
  160.     {' X- G, F* T: ?) K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 F* v+ L4 j! f7 {8 @
  162.       SetFileAttributes(Target,attrib);
    ! q1 ?' [4 s3 [& s" ]+ o
  163.     }
    6 l4 f, n. ~; W% n- F
  164.   }
    " E3 @8 a( m6 g) e  }/ S+ x
  165.   CopyFile(Source,Target,Erase);: f6 Y2 w9 J7 C6 G
  166. }
    2 u, U- j5 o/ l
  167. ; n  A0 ~' m8 D3 H* o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), g6 W9 n: J4 _
  169. {8 ?5 ]  ?/ l: s2 l# @* r6 M: Z
  170.      FILE *fp;
    8 R; i! W7 y1 |, `/ Q; C. X; K& _5 Q3 @
  171.      char  szBuffer[8192];
    ! V0 r  y  d" i) _/ s2 ~
  172.   va_list  argptr;. m3 z* ]; z- i8 Y

  173. ' j2 C# W, L- ^" d# ^
  174.         va_start(argptr,message);$ b4 ]% [. p- }- o# g
  175.         vsprintf(szBuffer,message,argptr);1 \1 `7 g% d4 E; Z( ^( r7 Q
  176.         va_end(argptr);
    & z  D4 {, q; E9 _1 K/ T1 I" m
  177.   fp=fopen(FileName,"a");
    . b9 ?. f) N" u) X# i% \; G
  178.   if(fp): N, K+ q3 R. B/ T: Z% o, K# g
  179.   {
    ' v6 ]/ B6 c, p7 h3 n
  180.     fprintf(fp,szBuffer);
    ! k$ K- o' i# f! @6 a& m; H* \
  181.     fclose(fp);
    - }; H: j9 N  B
  182.           _flushall();
      w) ^6 O+ Z- f1 y
  183.   }
    * D$ b) n/ H4 ^; p3 t, }+ y
  184. }- Y) Z0 m  y( ^9 w6 E( b; D7 p$ h6 P
  185. 7 c# d- S2 D0 a3 Q% Y# A- K
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; y# Y2 M$ t" m: N
  187. {
    & I, T8 k8 S; h7 r. Z  p$ w
  188.      FILE *fp;
    % k% F, x; L4 ]# i% N6 W4 M* h* g6 _) s
  189.     DWORD  attrib;
    ! C0 l0 z  S( n% r
  190.   attrib=GetFileAttributes(FileName);1 p/ j2 H1 K; g1 P8 }$ X8 Z! C
  191.   if(attrib!=-1): ]. m/ y2 X; ~* F3 P
  192.   {- S* U1 W! ?, B, s2 Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' U# q( F$ m% ^' F. e$ C% }+ W- }
  194.     if(!SetFileAttributes(FileName,attrib)), ^/ d. F# O$ ?* j# w$ }
  195.     {$ p  s" t! J0 F/ i8 L
  196.       return FALSE;( j2 t- `3 j$ u: x7 }
  197.     }
    8 b# ~# V- d* k1 w/ s8 J  y
  198.   }+ J: d, j/ e- z1 x
  199.   fp=fopen(FileName,"wb");
    5 N6 Y: L) G" v: q9 m/ o
  200.   if(fp)6 R, o& e  C3 N' G' S3 z, K) k
  201.   {
      r! A% ]6 [) D
  202.     fclose(fp);
    # r# {6 {) v' X' ]9 v$ i8 k( l$ a# z
  203.   }% r4 B' S+ a7 M6 o$ X6 w
  204.   return TRUE;, Y0 J4 A; @) a9 K7 q8 H
  205. }8 T# x- {$ v" w0 R3 {% K
  206. ( \, F" L( C6 |; \. s  V8 \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      O! e7 U) v- u  t- c2 B# `( W
  208. {
    8 f3 t: G  a& u1 n- u
  209.   char filename[MAX_PATH];2 t1 u! z* H: Y  \, }' n
  210.   LPUPDATEFILE file,olds;( l6 r  @, |! A/ t$ w
  211.   std::map<int,CString>::iterator i;
    4 Y8 m, x  a! o3 W* g2 k2 j) @% Y3 h
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % L% t1 {+ J' m8 b7 u
  213.   std::list<CString>::iterator l;, {% V% H+ b9 ?: n2 b

  214. 0 a0 I* m( F/ J2 {" H
  215.   if(bFirstUpdate)
    % W% J5 j2 O! |& Y0 ?, L
  216.   {
    * Y* V+ A+ M+ l4 v
  217.     dwCurrFile=0;$ k! I7 a9 j& E) I4 d/ |
  218.     bFirstUpdate=FALSE;
    % |9 j* n( h$ h$ L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ B3 H& z( H3 |' I8 @) Z6 u
  220.     {
    + t) R+ K4 L2 |' ~5 [& i, j$ ^( r' u
  221.       dwTotalFiles=UpdateLocal.size();
    3 s; W; b# E$ B
  222.       dwDownLoaded=0;2 q2 |6 ?% s( \# T; o4 b
  223.       bSilentStep=FALSE;  }" v2 u+ g# D1 a3 E/ t) C
  224.       bCompressed=TRUE;
    " _$ J+ ~0 o0 A: Z
  225.       strExtLocal.Empty();8 ~9 _4 c( g% {9 E* n% K
  226.       strFullName=(*i).second;
    - j! ]- Y" }% }, w8 f
  227.       dwProgramState=AP_CONNECT;; b+ r9 X( m2 g$ u! h! s
  228.       return TRUE;6 B: p" M1 h4 p& [3 ^
  229.     }5 W3 p/ ~# }% @2 ]; m' h+ c
  230.   }
    % o9 S# t8 B! T3 y: O/ ?
  231.   else if(bRestartUpdater==FALSE)' p( y9 ]7 G" }! z% x3 w0 s
  232.   {
    / `' ?& ~- o# W8 e, v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())+ g& M& F" h" W. [  `( f7 {" r& u
  234.     {
    ) T4 ^) a  `. t5 ]. p* j
  235.       file=(*p).second;
    5 z! ?% K6 O7 {  [1 b7 h7 X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ i+ }$ i5 B# l& U
  237.       {$ b+ c! _: |: k( `9 H3 ?6 a: ^
  238.         olds=(*p).second;
    " m) x; A' G% F; Y
  239.         olds->vers=file->vers;
    + K$ _% _0 v& t( y7 y$ f
  240.       }& r1 P- [9 X, g% }0 ^
  241.       else; \2 q- q2 t, P
  242.       {. C; W# j/ [4 a" H8 x& T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 V& P. s! G5 Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ Q  v$ P! o5 m& c7 H3 P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 y/ l4 B8 e* F7 s
  246.       }
    - r6 `, Z1 {  s  x2 M# I2 s
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- k6 n/ h* w! u+ c
  248.       sprintf(filename,"(%s)",file->file);
    $ y& y: n" m, Q- e& @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* i, f' x' s% }: _5 w$ \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! [% Y! ?) ~" ?0 L0 r( Z4 f
  251.     }
    3 @' U* c3 g7 B0 p$ R
  252.     dwCurrFile++;) q( g; Y) H- {- k& `" \$ _$ m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 M1 |5 A0 S8 @" B" j, o# n
  254.     {
    ) P4 j3 J! Q, o  U  |
  255.       bSilentStep=FALSE;
    0 ?9 \8 _! k1 |; ~( M2 J
  256.       bCompressed=TRUE;
    ( C+ O& J; z# Q' v
  257.       strExtLocal.Empty();5 w# ~9 U. K4 B; m2 V, |
  258.       strFullName=(*i).second;7 ]: x, x: \! x# v; N7 O( X
  259.       dwProgramState=AP_CONNECT;; b3 Z- ?/ F% C. M8 V
  260.       return TRUE;- E+ @: n0 j. _  y. W% K
  261.     }; P  j9 F9 P' Y4 f
  262.     if(!bRestartUpdater)
    ' Q! k# A6 j8 ^. g
  263.     {# Q/ g2 U+ p9 o/ Y" g' f
  264.       int iCurrSize,iFileSize;
    $ I, A: a& k. g
  265.       iCurrSize=0;8 ~! s1 @. C/ A9 E$ n
  266.       iFileSize=UpdateList2.size();. w& ?& ?# w6 {, H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + z% E7 m; v$ C+ N( E; S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 \9 @/ ~% z. k) X4 O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " D, \5 F2 p% j& o- Q9 a' C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 W$ n# s2 Z+ v! N. u# O: Y, R. U5 ^$ I! z
  271.       Fclearf(".\\update.dat");
    , R9 f7 [% g" g6 D; e: S% E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - a2 {- w# ~$ g$ d; }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % t( V1 x8 m6 u! [: I" v# Z7 S
  274.       {
    ! T5 F2 c, B% @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & W, B* Y4 i$ u) M4 ~$ B: O: [
  276.         {- ?6 K+ {& @5 t7 M0 n
  277.           file=(*p).second;
      K! Q) w$ `1 f
  278.           sprintf(filename,"(%s)",file->file);, I4 a! n$ |6 Y- g# R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- g  U: e* T. Y1 D9 _4 U* p3 R* M
  280.           iCurrSize++;
    ) g4 J+ e2 a" D3 A- d
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & V( N2 b5 a, G2 C% k' K8 C1 B: F
  282.         }
    ! n0 U4 Y* l3 c4 k7 ]
  283.       }% r. q" }* r, I: `4 n
  284.       unlink(".\\update.txt");5 d, c, F2 n6 a6 |
  285.       unlink(".\\update.tmp");6 `, J6 r/ _6 k/ G/ b* K: T" m
  286.       Fclearf(".\\checkversion.dat");) P, B& z5 t% A$ k) Y9 p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 [5 ^4 y* F, f+ Z( u
  288.       if(UpdateLocal.size())" r$ ~! ]. L( N# I
  289.       {4 i# ^4 t; i4 L5 I9 F& z- D
  290.         UpdateLocal.clear();' M/ C% _/ b6 k
  291.       }
    - g: o1 s- U8 |9 l2 s  ^
  292.       if(UpdateFile3.size()): q. A) Q: I' g' Q- [" X
  293.       {- g: z& a4 n7 J' }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 v( i: Q5 j% z& m- Z
  295.         {3 ]4 h3 _) L6 F0 e0 B$ u% A
  296.           file=(*p).second;5 w2 P8 ^6 ?; z( R/ Z* U3 n' b
  297.           free(file);
    ' C7 Q, T! ^1 X
  298.         }! y) B. d6 _5 Q* \
  299.         UpdateFile3.clear();
    2 Q; q* ]& u' S7 G
  300.         UpdateList3.clear();
    0 d4 k5 f# V4 U) o9 P. X
  301.       }% ]) H7 N; r6 |
  302.       if(UpdateFile2.size())
    9 O# i# C& z% ]5 O( h7 }
  303.       {4 b7 i: W- Y* p7 J" m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): f* O, c# D+ D& w; X
  305.         {
    8 n# O7 T/ S( O7 X
  306.           file=(*p).second;* g8 x* l2 x, y% K) _* z
  307.           free(file);
    ! P5 O; l1 s0 c0 ]
  308.         }; Z' D+ p$ s/ V( b7 b( t6 x* H
  309.         UpdateFile2.clear();: ]& r* x' \7 Y
  310.         UpdateList2.clear();
    " l6 a, m+ D$ @: K$ g& c1 J
  311.       }! {: y7 X- i5 U' B" S
  312.       if(UpdateFile1.size())7 m* `! _  V- G# R' q
  313.       {
    # L; w' N" O0 d- G$ f4 X: Z  n, M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 m( y) G4 Y2 j+ a
  315.         {0 O0 X1 \9 t# i3 D5 e: G  N
  316.           file=(*p).second;5 D3 ~  x( O7 n3 F+ ^
  317.           free(file);6 p: K, ~( O4 J: l+ u  O7 O
  318.         }# H% K  u5 j* _+ f/ v& G- ]
  319.         UpdateFile1.clear();
    3 x! y% d( U, q% O. N
  320.         UpdateList1.clear();
    - r2 D+ t5 u2 t# B; a' c
  321.       }
    ) E; a& \* q( l" N1 ^; f9 f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 U% b! ]9 t9 L
  323.     }4 J. y) y& H7 r5 b
  324.   }
    5 c. C  i3 F& i! R+ y' F
  325.   return FALSE;
      ^" K6 d5 {- n$ O3 W
  326. }7 w, w7 E; ]% H% ?3 \
  327. / v$ s, ~: t0 M6 y2 ?
  328. void CRevAppApp::ClearAll(void)" F" X7 s- b0 \1 S$ a8 W0 S
  329. {; W/ J( F' z3 B1 d7 h
  330.   LPUPDATEFILE file;3 U0 O1 M, W6 ~7 ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 W$ l0 M: |5 V& P7 Y  I; o* m. v
  332. * u+ \; Q$ J- b3 g, x: Q% U
  333.   if(UpdateLocal.size())
    % u3 j$ K6 `. n6 I2 f/ r
  334.   {& w/ m, i$ `' v7 C. e2 ~* r; ?
  335.     UpdateLocal.clear();. a) N6 g8 V5 U/ C8 Y
  336.   }
    ( P4 A' q, ]7 s; O, [: Q( a
  337.   if(UpdateFile3.size())3 t6 ?# i1 k0 f
  338.   {3 g$ Z3 p: E. p
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; i. J( }5 C6 K$ S+ o' l8 f, t: G1 G
  340.     {
    . ?; [# i5 S5 {; P8 A4 ], H4 _! t
  341.       file=(*p).second;* E3 x2 _; E9 ^  Q  ^
  342.       free(file);
    / T9 w* E7 Z' Q" f/ {
  343.     }8 T$ r0 z- Z0 r. K
  344.     UpdateFile3.clear();
    : X7 {/ R& i! ^0 [7 C
  345.     UpdateList3.clear();
    ( ~- ?) b. L2 T. \. N+ y
  346.   }
    : A! n% l' h# i& P8 ]
  347.   if(UpdateFile2.size())9 _* E5 `$ S: v$ x6 g3 p
  348.   {$ s2 q: w3 D/ d; T8 A  A3 ~0 t9 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 O& X: L1 ]) Z5 ]2 @. G
  350.     {
    & J! r2 J6 h7 p. Q
  351.       file=(*p).second;
    + T5 u3 d$ W4 F4 p3 m
  352.       free(file);
    1 {5 D3 V) c4 ]# m
  353.     }
    6 E% {! f% r: [7 c. v
  354.     UpdateFile2.clear();
    . o  Y5 p& M8 h) u0 n& V7 e
  355.     UpdateList2.clear();& w% y+ P4 N2 e' s0 c) w$ T7 Y$ F
  356.   }
    * T7 O+ E0 \* z) ^3 ^7 h. [
  357.   if(UpdateFile1.size())
    ; @! i4 Q6 u" y$ M( j1 x+ l
  358.   {* I/ h! z0 k* {. B  `+ l" p$ v) r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): @/ h9 m( a% h# M" x* P2 R
  360.     {, P. [* r: s0 H9 f' N0 T2 D$ V
  361.       file=(*p).second;+ G: t( I! R, B/ n5 E- t
  362.       free(file);
    4 y) X+ F: U" W6 j1 B" S
  363.     }! r" n. i* t! u% Y3 j$ d1 l, H
  364.     UpdateFile1.clear();: \) B5 v3 W6 Z5 y$ A: w
  365.     UpdateList1.clear();
    " d. M- j* _8 W: X! j1 N- ?
  366.   }: a7 B4 V' x  z  ?: T/ }
  367. }  
    / J0 `/ G& l& q/ |
  368.   
    6 m: l% G& M% P: ~6 L
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 S2 b& {/ I: B) W5 e2 E
  370. {3 u# ~- y% k* f/ x, O% J3 s! _
  371.   int c;: _, Y6 o' C" ~# i/ I
  372.   LPUPDATEFILE file1,file2;
    ; X( G4 w  c! P6 s- K& G/ f, M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* l, i2 w6 E6 O3 x# p4 ]; U
  374.   std::list<CString>::iterator l;: V0 U# ^6 U; m# d
  375. * V7 B5 A) R& O( i
  376.   UpdateLocal.clear();  s; C7 ]$ s! A. i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; u6 B8 K- ?+ {8 Q# ~- F, a) p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * U2 E2 u; I* X8 S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * c, U* u1 ?6 f0 K* {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 G+ M9 n4 d3 X+ ?# k
  381.   if(UpdateFile3.size())
    " I9 o% U  d2 U  ]
  382.   {
    7 G# G6 ], g; \9 v( ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 S: t" F( Y  X& v8 F
  384.     {
    6 z1 A( _7 A' }
  385.       file2=(LPUPDATEFILE)(*i).second;
    # \3 k& G+ G7 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- W4 Y) Y) n+ O$ B, }( C+ L6 I1 t; F6 ^
  387.       {& v7 `- T0 ?4 r
  388.         file1=(LPUPDATEFILE)(*p).second;1 H7 m% Z# k! |* l4 O: [4 N
  389.         file1->vers=file2->vers;. [4 V  o$ i' R3 G2 W
  390.       }! n6 l4 P; c. T9 I4 p0 k
  391.       else: v( ^7 `: B$ T1 q1 ?) X% U9 G! F
  392.       {
    6 W; r! `9 q/ B, ~( }" }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 \1 W& [# P8 g7 t+ ?6 K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! K5 @9 @9 i1 `: d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, }& t8 C" `  @* j
  396.       }9 b$ @5 J* k. G/ J7 Y3 T" v0 |
  397.     }* _. R. I' B( g& F) @
  398.   }+ Z* j  ]$ k; T  {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ B  y/ i( d; J% ?1 u: ~' K2 x
  400.   {
    ) N2 E0 ?6 K3 r, e3 \0 J& O% ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( `& h  J, P+ R. e4 C! z$ h% Q
  402.     {; o7 N, Q9 [' u1 _6 c: E
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 }; A" X+ o, S2 H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 w$ R9 N$ \' v" _: h: ~/ V
  405.       {, P. q/ f  S/ s% M: \
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! U7 S* O* R. M6 k: I
  407.         if(file1->vers!=file2->vers)
    * h4 g) I( i' O( c
  408.         {
    2 h6 i! Y( F" y9 C) }" j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % W3 n% m0 Q! @: O
  410.           c++;
    0 r( w2 C# ]+ r. _  R& f8 c. E6 r
  411.         }
    " w5 n0 \6 v  U2 A0 m! r3 ]# p
  412.       }
    9 T1 `0 x& m1 N( |* d3 s. ]
  413.       else
    7 w4 D" ~; E. g: c, E; b( i
  414.       {; G3 t  ?+ J8 x1 h' S8 Q+ g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 L8 D- y( d. }
  416.         c++;  p7 v1 u0 X+ @" @5 K+ f- ]
  417.       }
    0 F' i! b* v% P1 U5 s& h. P. T. U
  418.     }
    / ?( V; N* z% e! \
  419.   }
    * s6 b% C# j0 b4 P1 C0 B
  420.   unlink(".\\DownLoad\\update.txt");% A8 U6 i3 d3 [
  421.   if(UpdateLocal.size()) return TRUE;; V$ G& o* F  P! I# U& ?- i( c" K
  422.   else                   return FALSE;3 D# o) t) S5 `
  423. }) a" P8 n1 x9 s" q* U: Q) _. e
  424. " }! }$ j8 q/ {8 R% M$ w" r8 P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# S) B9 I. Y' l1 a! j4 c: C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ }! T9 q5 U4 m" m% h" w5 S
  427. % r0 |: l- ^, Z

  428. : L$ f  D, c, `! j* K+ T- _7 q

  429. 1 @, f7 ~! V! }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). P9 }; Q5 L5 F3 w
  431. {
    + P& r3 i$ G  f5 C) \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# f; w6 I4 N+ D3 Y5 _3 @. {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; l' m6 ?: ^) K' k; ~" F. |$ S
  434.   {* K2 ]2 H. U3 c, g
  435.     char szLanguage[50];
    & _9 F! }5 V9 x* `2 |& E$ P! z7 q: y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! W  q" q; ?. [4 {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 f& |, _2 ?& ]1 x7 i1 w& R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 w9 x6 @  `' C4 r  Q
  439.     else                                   m_iLanguage=ENGLISH;
    % w1 R0 S/ v2 Y) L7 {& L
  440.     char szRegister[100];
      ~8 s2 W- h" \: ^0 E" z7 B$ }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ w, \. @! t/ A: p5 e. ^
  442.     strRegsName=szRegister;
    " y8 ~9 k& C, d) {) ]# Q* L( U  [' T
  443.     char szPatchURL[100];
    8 ]" a% g8 e1 L* }. M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( Y/ _0 `5 Y2 y0 f2 |- C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + M6 q/ [, X) ~) H
  446.   }3 z% ]- e( L6 d' L
  447.   else6 Q* ^0 ]# V  s' L. d
  448.   {  _0 }: X% x. }" l. @+ }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; e! \1 }6 W6 h  W" f* M8 `
  450.     strRegsName=DEFAULT_REG_URL;
    8 g( m* P* g8 J, C
  451.   }
    , s/ v9 Q: c" S( m
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 l' D5 Z# M" @
  453.   {* D0 r2 j2 ?: f, N% Z! \+ z* `
  454.     char szIP[50];* b/ s. O6 _. T  V) Q2 @
  455.     char szDIR[300];
    * s9 [0 n# {: H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 t8 ^+ F+ F( B* ]1 r/ W
  457.     {" O; I* [0 y+ G2 J% v, c( l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + y5 {# C- c& f3 U, u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 c, y4 N" c( L" p5 |0 s
  460.       strHostName=szIP;
    " ~! B; n3 O& G0 i
  461.       strHostPath.Format("/%s",szDIR);8 a1 {, f" w9 l, k
  462.     }
    " s" }3 c, F6 z! J0 z
  463.     else, E4 E# m# c9 o5 Q
  464.     {# f) v+ u' D  E2 u& ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      g, T& u, K2 |1 Y% j# N6 {
  466.       {6 ]# s3 B$ H% d
  467.         char szLanguage[50];
    4 N2 N" A% F( g  j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 g0 x1 g( ^% b5 X7 e% D- n: m; ~% l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + T6 q+ T! t1 L. B$ l& V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ G8 |: A' u; \) F
  471.         else                                   m_iLanguage=ENGLISH;. V, T5 |' C+ C# x2 m( Y
  472.         char szRegister[100];; S0 [. S) I+ f- x1 B* j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      V8 _2 }6 d4 C) s" e8 s% Y
  474.         strRegsName=szRegister;
    * c0 z2 f' K2 k% s( h
  475.         char szPatchURL[100];
    3 m: v  r, R$ y4 ^4 e# N/ P# x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' [. n$ A' k5 b# j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 Y1 V: n  D* D
  478.       }
    % F/ S* M" ?7 {) m5 c4 b
  479.       else# x; x# L" Q4 b( C  s0 P. m  p9 O
  480.       {
    . `. B, c. f- e: f% h1 D3 }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . N, F/ f. z) j# c. c" o5 N
  482.         strRegsName=DEFAULT_REG_URL;
    : X7 g. ^  e8 Q, B
  483.       }
    : R7 X5 i8 t3 e. B) i
  484.     }: ~3 P7 \3 Z* {4 a
  485.   }, `5 T# `0 X8 ^6 P+ I# @. w
  486.   return true;6 ~& @' T" ?7 H5 C
  487. }! a% i* x% \% D

  488. 4 W, z) P* {8 b1 ]3 t
  489. #include ".\ZLib\unzip.h"/ S& u+ s& L3 F# {! y5 ]2 c/ t7 w9 P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; b' m  L: }9 x
  491. /////////////////////////////////////////////////////////////////////////////
    * Q6 @/ P% k" ?, f# z4 y/ F' E
  492. // CRevAppApp initialization  i' b( Q4 `1 T! A

  493. / l6 M/ \4 n- i) k4 A& y
  494. BOOL CRevAppApp::InitInstance()3 L2 j3 V" \6 a4 t+ l
  495. {7 W+ c1 P# {8 p, o. D- _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' I& K/ z' d% o' o: l, k+ h+ P

  497. # b( r8 o  S; P2 X# H7 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ T! I8 _+ c$ d$ r4 m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" B3 C. V& r$ K2 ]2 q) ]3 b
  500.   {3 t* |$ c/ H1 s+ t6 X* _( |
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 s% J! v$ j; `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ Y- o( Z% ]# H! i+ B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))$ j' K, I" y( M
  504.     {
    1 q* Q' R5 j! _1 X3 M% n
  505.       strcpy(szPath,szPathTarget);$ h+ U  r  Y: ?) }/ x- }) k; {1 t
  506.       SetCurrentDirectory(szPath);$ h8 {$ T6 F) r) ]/ @' s2 r
  507.     }; M' T5 F- l/ s- I% X
  508.   }
    8 h; E* V. c& A8 g+ G  P
  509. #ifdef _DEBUG2 D3 D8 W6 G+ K5 l; q  k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ T8 i! W0 b& K: y1 V) y: m
  511. #else
    , c# @4 }2 L( ]% T5 p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / ^7 G  o. w8 {3 m+ x
  513. #endif
    - |6 E- t- t9 w8 r) }
  514.   {7 Q" ]: r+ P8 L9 W1 B" O; Z# _
  515.     char tempFileName[MAX_PATH];
    ! v6 h! e* S. O1 V- J& ^# a. Q
  516.     strcpy(tempFileName,szPathSource);" S* k. r% ?+ M! L- \" a
  517.     tempFileName[strlen(szPathSource)-12]=0;# c5 r' g, Y2 v8 ?/ v7 Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ f& R  N! h/ P) |* n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      L4 F% t/ m5 P! ~! {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - k: _7 ?7 D0 F8 R2 F2 j" J$ ]
  521.     return TRUE;) I  a2 `6 `: s! ~- d
  522.   }* Q4 f- {0 u8 z& A5 Q
  523.   // Nuke 0118: Delete run.exe. F  p! L/ e% Z& @: `  i4 M1 {, n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    2 I6 R' f+ y4 t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & q$ U2 m5 {4 s# T; D
  526.   if(!ReadCfgFile("Config.ini"))
    ( g$ {" C1 b. W4 I
  527.   {3 H0 k- Q  m+ J5 A8 M2 b; s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 O% h% t. g7 _- \
  529.     return TRUE;
    ' D6 k7 \7 f9 n5 c
  530.   }, `& t0 b0 [: ~0 _, q# h: R
  531.   HANDLE mutex;% s2 v! C5 {# r5 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : Z4 C/ z' t8 I
  533.   {
    + h# `; y/ u% [6 j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 Y+ G( i1 T2 K4 D
  535.     {
    / U' j- N) P3 y" J: d
  536.       CloseHandle(mutex);
    ! e2 R9 b% ?! q# |
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 D5 ~' z5 t" d0 G
  538.       return TRUE;( [2 R) N9 Z' x+ ?0 A
  539.     }
    5 y" o( f$ t4 I% t$ b+ D
  540.   }  
    7 T8 a4 f4 b: o; w& x. U/ @
  541.   CloseHandle(mutex);
    ; F8 d+ {  g* Y$ ^& A
  542. 3 u5 M% h9 a0 A: I8 ~. G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);' s* u0 }* y# Q! _% Y
  544. 6 w* {7 z' c% t# r. }9 _, T
  545.         AfxEnableControlContainer();
    6 s' L0 }+ V- b( S2 s* y. t% N& f- ]

  546. ) f4 C7 U8 P9 W$ Q' q6 p' u" I
  547.   bCanUpdate=FALSE;3 W5 s4 i! R  ^6 o6 k/ P
  548.   dwStartUpSteps=1;4 z( k) n3 q; _, _$ Q
  549.   dwProgramState=AP_NOTHING;. Z. E, q6 h: {8 k2 A
  550. 8 R8 H: {- R+ r9 g( f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 p% C9 S8 G, e

  552. 2 @# E8 E4 l$ r$ \$ ?6 K, Z
  553.         // Standard initialization
    4 @7 M4 l6 G7 E7 \; W
  554.         // If you are not using these features and wish to reduce the size' Y! C2 I' r' E1 {- s2 g
  555.         //  of your final executable, you should remove from the following
    , f( V: d% Z0 n2 W, T* T
  556.         //  the specific initialization routines you do not need.
    : R4 }9 u+ Z8 V, W( V. a* p

  557. ' M5 E3 Q/ R- H* @' H- t& W! {
  558. #ifdef _AFXDLL
    9 O+ X$ |4 j7 s6 k9 ?2 T5 C  s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % n) s) C( A/ E- u) q5 w
  560. #else
    ' O/ J% c/ J, |# D% L+ \; f4 @5 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ Y, i0 k0 ^" m
  562. #endif
    ) h9 r  w) g( R

  563. 0 }6 k* F. i. D) c" k/ [" l
  564.   dlg=new CRevAppDlg;( D) t. G0 x/ F" D$ q. u6 X
  565.   dlg->Create(IDD_REVAPP_DIALOG);  o+ i; _  j2 ^2 G0 M4 n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 @% c' c* e/ ?
  567.   m_pMainWnd=dlg;
    8 _, b/ b7 r$ p, h8 z, T0 i* @

  568. ; N& d  ]% ]0 U* R! a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . u2 k$ W& t6 _& z: `
  570. 1 Y. }; ~+ y/ ]3 R. F: b
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & M' \; @# Q7 W) a, L; a& Y
  572. //  ULONG_PTR gdiplusToken;
    9 g7 m( o% p% e! P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 e1 `8 f" n' l. j. Z

  574. , l/ N& l- h* l( A1 z7 z
  575. //        CRevAppDlg dlg;8 E  Q& o5 u8 |  z& ]. Z# p
  576. //        int nResponse = dlg.DoModal();
    , K& N: H4 |# q( r
  577. //        if (nResponse == IDOK)6 g% z$ ~5 e2 e9 A8 W% [
  578. //        {( ~) d+ ?1 Q) U) \( n  T. Q4 N
  579. //                // TODO: Place code here to handle when the dialog is6 I. S! k: C) z
  580. //                //  dismissed with OK! V- G5 n: }' s+ i* r9 p
  581. //        }
    ; R, y% o0 Y& Y
  582. //        else if (nResponse == IDCANCEL)
    , {6 A! ~  Q  D9 m- d5 D
  583. //        {
    3 g$ r$ ]) i  H+ w% }$ v' t! |
  584. //                // TODO: Place code here to handle when the dialog is
    6 v6 v, P) E1 D, F
  585. //                //  dismissed with Cancel1 u3 O/ g6 n" u0 P! }6 _5 I
  586. //        }5 b6 f# f+ O) |
  587.   i* J' E) {. K+ h
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ P. j4 P% ~9 j$ ?6 J5 k
  589.         //  application, rather than start the application's message pump.
    ! Z5 L* X& C3 i4 l6 z( ]1 U
  590.         return TRUE;
    & W7 `, K6 s% |) e# y
  591. }
    6 n4 {, J; q3 ~: e; g& J. s

  592. : |" {2 o$ y3 B" n' l  f2 T1 G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 M- R" R- _) Z( E% N% w" n: R2 O
  594. {
    : h& Z1 x: Y2 A. W, L
  595.   int i;8 C" \, R% G( I$ h7 T
  596.   char *szRet;
    ! ^9 w8 F+ G3 o( u3 w
  597. 8 y5 N' F( Z5 U* M6 ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }& E4 r1 Q0 ~- X) m: ^! b
  599.   if(sztoken), z2 F( \2 P$ I% V
  600.   {
    ; C9 J# W4 l' U; X( }
  601.     szRet=&sztoken[itoken];
    & f3 M8 |9 P6 B: Z: x7 v0 m
  602.     while(sztoken[itoken])! J$ d- v) G! k# K0 @/ N6 J5 |+ @' D, `
  603.     {/ e" M, q3 H) X9 ?
  604.       for(i=0;i<(int)strlen(token);i++)
    ! o/ T# s7 j% u$ |
  605.       {0 f4 B/ I/ f7 ?$ \: h, b& j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' p/ _* `7 d$ m: g$ H) {7 V
  607.         {* e6 D: j+ r) T5 f% d6 m
  608.           sztoken[itoken++]=0;9 a9 n. N( Y1 N) R* q6 y
  609.           sztoken[itoken++]=0;/ y2 z6 K0 B$ X* y. t) ?
  610.           return szRet;
    2 v8 o, k' x# `' t
  611.         }
    4 Y1 H* {* m/ y" `) a8 b! v9 q
  612.       }
    % a+ U5 H& g% c! @+ Z% p- X) V5 A) X
  613.       itoken++;. c/ `. P2 k3 l+ }3 d; R. f! q
  614.     }
    8 l( A2 _. X( k" m% x6 u9 Z- h
  615.   }
    3 H5 E# Q# q: O, C9 N& h
  616.   return NULL;
    ' v" P" s0 d% h
  617. }
    , }6 i+ `% @2 Z' ]

  618. 4 Q) x8 r9 Y% C+ l: `: |2 L. ]
  619. void ProcessProc(long Total,long Current)
    - p7 s8 j' \4 ]5 K& C9 g( x) E/ p7 Y
  620. {
      a& I  |2 W4 \3 L3 r
  621.         MSG msg;  }; |  U* U6 w# Y0 H1 D3 v( I$ l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 e7 ?, Z5 X) H  z# A& j3 \$ z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' n5 a; H; [# a. Q7 l; e: T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 m1 ?6 F  F' f4 n4 d
  625.         {" ?1 D' P5 P9 X# m8 Y2 v; Z6 e8 g$ z8 e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % t1 f7 P# h  H- Z" g) v  @6 j
  627.                 {. }" D, V) s* b' N7 R0 p& k
  628.                         return;
      |2 w1 T% [& W: s
  629.                 }/ X) L4 R( ?3 Z( ]+ P& N
  630.                 TranslateMessage(&msg);2 o8 F5 {  r) U" Z
  631.                 DispatchMessage(&msg);
    5 Q1 \$ z$ M* e9 Z: p/ H1 X
  632.         }        ; W/ w- G2 ?- S( ?8 C3 J3 Z) v
  633. }9 y- |, i' f0 e2 N, [4 k

  634. - n! {3 N+ ?$ P- h! W' Z# B' A2 q
  635. BOOL bFirstChar=TRUE;
    + X5 X$ I1 K2 M- f2 m3 K" d

  636. " Q# c7 E  M# b' n+ i# J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ V$ M3 _) C( ~& O" k
  638. {% W0 p0 \$ e) `% C0 L0 C
  639.         // TODO: Add your specialized code here and/or call the base class2 k0 L; g5 F4 Q
  640.   switch(dwProgramState)
    0 K3 e! N- F# v) _  G$ B
  641.   {
    7 o# M" H/ p3 b6 f4 d! e1 [% U* A
  642.   case AP_NOTHING:, w0 G* G& @9 A% P* [7 p
  643.     switch(dwStartUpSteps)% [5 Y; H8 {; h* K/ E% J  R/ `) t
  644.     {
    & B" P1 a; U* M: j, i. N
  645.     case 1:
    # D2 o6 o) t. A( m7 k
  646.       {% Q) y; s+ b/ }* W- n
  647.         int i;( T$ C2 c: G4 {/ \
  648.         CDC *pCDC=dlg->GetDC();( F+ k/ {6 f6 u, ]+ J4 m
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 W; c9 f/ K4 T0 e2 J/ P
  650. //        Graphics graphics(hdcwnd);
    : B1 I( \7 ]: c* f/ m" _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! N8 u2 ?  R9 p9 v/ H5 K
  652. //        INT iWidth=bitmap.GetWidth();6 f! }# |5 b% p! `  }
  653. //        INT iHeight=bitmap.GetHeight();& Q* u$ }* X3 S
  654. //        Color color,colorTemp;3 C3 d. l$ r+ J6 Y" m
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! J( N+ k% h: X& y1 G5 \- X
  656. //        {
    ' z- t% d# s! P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ l- U' |! P* j1 l0 g
  658. //          {
    * C0 j: B) m, `  x) `9 e+ a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);5 D/ H# w$ o. g( H3 t/ a, o
  660. //            colorTemp.SetValue(color.MakeARGB(- W9 S+ M; b! T; c  ]3 W
  661. //              (BYTE)(255*iColumn/iWidth),
    8 W5 i& \' Q% [& Z" j- b, j% D. r
  662. //              color.GetRed(),. `2 N+ k# e0 E& q4 B! Z5 d
  663. //              color.GetGreen(),; S8 p2 t# y) [' V% o' Z  g/ D* ~
  664. //              color.GetBlue()));+ U( [' H; T  H3 a8 V& H2 u& N( d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" a# v% ?! X' [1 q
  666. //          }
    9 I( H7 |# H2 G/ k: i
  667. //        }
      G' @- Y- @" \2 b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - ]0 @& `1 U, @" a! A+ C0 G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* n* g4 N5 h0 d( b+ p$ Y/ d5 s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 r' d8 c* W. Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ Q$ H; x# x+ M% N! S6 `; Q4 Q
  672.         for(i=0;i<240;i+=8); \* d2 K9 n' ~' }
  673.         {
    * l  c5 |, r# A& A& j! ~! o6 l2 O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 S) e0 m6 A5 b" z# ], {7 e9 k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , ^$ N- }- `" E* u# l9 K* g8 b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 U/ U& H# d$ O) m5 m4 B- U
  677.           Sleep(33);* ~! u( b0 @0 r1 _; J
  678.         }) s  H0 [& K- }+ @8 W8 l$ e
  679.         Sleep(1000);6 `; k( j8 ^' I% v! y! r
  680.         for(i=240;i>0;i-=8)
    1 B/ X) ^% }; D  @$ k+ F
  681.         {
    % n2 g& B( v: |7 i* N6 H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% X  D2 t  c6 E# H! K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  B  a, o9 B; n2 D, S  Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # I8 G: s7 `+ m9 m7 S7 b' }; j
  685.           Sleep(33);
    0 p7 K6 V. \6 z2 y2 g$ A
  686.         }
      J0 `% Q9 n5 g" v6 L2 v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 k8 |4 \3 k) m0 ^5 e! H; I- [6 {
  688.         dlg->ReleaseDC(pCDC);
    ) W! x3 S: l  m" {& v; H
  689.         DeleteDC(hdctar);
    8 m1 _# g1 y0 C2 j9 f  ?' x, ^! P
  690.         DeleteDC(hdcsrc);; E3 \( D5 w" r+ |7 S; R! M
  691.         DeleteDC(hdcorg);
    0 X( C7 X& V6 p- ]! z5 h
  692.       }, S6 a7 V9 g3 Q1 D( G" e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + `' u5 }+ z9 ^  N. c
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 Z  m+ U; w! B) ?# @5 g/ H# c# |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 R! |- {6 C8 ?5 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 p* L: s; ^- S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  {6 R$ C5 J2 j7 _+ d
  698.       if(!Dn.Connected())+ t. i- x, A: r) z6 L  V
  699.       {. f- N! L2 Y* c# P
  700.         dwTotalFiles=1;
    0 u- @, Y- `) U! G
  701.         dwDownLoaded=0;0 B% \$ V4 y- W0 N4 K/ i
  702.         bSilentStep=TRUE;
    3 `; V+ c4 }- @) e4 i- R' F
  703.         bCompressed=FALSE;& w4 \( Z8 S5 o* U
  704.         strExtLocal.Empty();! M/ k7 h% [, r, C1 u& l( r; `
  705.         strFullName="readme.txt";8 G' A" p8 N% A' G# |
  706.         dwProgramState=AP_CONNECT;
    5 \- B5 b" U& O+ ~; y
  707.       }7 O, {4 Y3 g$ e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 T2 D' U7 O! W( z- e
  709.       dwStartUpSteps=2;
    / H4 g' b# O: u) Q) P
  710.       break;  d4 L& a8 L1 R" |% O/ o
  711.     case 2:
    / b: `/ ]9 O  H4 A0 A+ \
  712.       {5 u) z, L( j0 ?  H7 n1 G
  713.         int iEOF;
    ) h. ?, s, k! y
  714.         FILE *fp;
    5 _; ?- e% J. m+ W6 G3 V0 ?% ^
  715.         char szString[512];
    ! Q3 z. s$ P# w8 r2 W3 L6 d
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - \% L  T6 C' R% h& a( R% U6 j
  717.         if(fp)
    5 H, R- s) B# @0 o$ w
  718.         {: V) |/ V9 o  m7 k5 n, ]! O- u+ k
  719.           do6 u9 B& g) v# r; l8 T  V$ J! ^) I$ [  V- h9 Q
  720.           {
    % r/ n$ s: C6 b! [3 q7 m" r# \7 Q
  721.             iEOF=fscanf(fp,"%s",szString);/ r. `8 Q7 m* h) k
  722.             if(strlen(szString))
    1 ~) i5 f! S: O* M
  723.             {
      c4 \. U0 D% j" b
  724.               if(bFirstChar)
    ; X+ e6 ]  y+ g$ {5 \
  725.               {
    ! W6 s& G0 z  @9 F7 u. z
  726.                 bFirstChar=FALSE;
    - W, d: Z7 \+ p8 X& Q  T* ?. |
  727.                 bConnectIsBig5=FALSE;' g2 j/ T0 Y: a% G: t3 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ D# ]5 w" R0 A3 \* e
  729.               }: R# V" c: g8 ]- e8 @+ K* O) C- p* a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( d3 \& ?3 E: M. y& O: O9 s. L
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 T6 ~) a" Z" z4 G
  732.               dlg->m_ListText.AddString(szString);" ]7 }* W0 _: J9 w/ g! s3 M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! V! c& x, M# p+ j" ]0 g) X7 m9 e. [7 F
  734.               *szString=0;
      B; u; `. N  p% L8 r; S2 c
  735.             }
    4 l* o' c' Q  V1 r& b# x
  736.           } while(iEOF!=EOF);
    - G' D$ t* Y) S+ X9 I; Z
  737.           fclose(fp);
    , v! U4 M0 K0 W! I, [
  738.           unlink(".\\DownLoad\\readme.txt");
    6 X/ w6 Z6 j  n# F; ]2 z
  739.           dwStartUpSteps=3;
    / a0 {+ u1 h  D8 }! L
  740.         }
    : [) [; F$ w9 F" L7 O4 \4 |, v  m
  741.       }
    8 n3 W# Y3 `' ^4 }) W
  742.       break;
    " M; A! O- z- `! C3 T, j) R& i& \, Y
  743.     case 3:
    % B9 C$ O$ {. `4 ?
  744.       if(!Dn.Connected())
    5 u6 s( f, {8 B% g
  745.       {
    4 e0 u8 _8 V$ i* T3 Y, L  l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ T6 B/ p2 t( I/ k' E
  747.         dwTotalFiles=1;- P% O7 x# z5 C  W
  748.         dwDownLoaded=0;( R) O" R9 o. V9 A% q
  749.         bSilentStep=TRUE;
    & y( a2 [2 s& _; {, H
  750.         bCompressed=FALSE;
    , Q3 R! ?; |9 v
  751.         strExtLocal.Empty();! `8 O0 X9 b* O& L
  752.         strFullName="checkversion.txt";
    ( Y0 c3 B3 |# H0 t. s9 }1 ^) X, g
  753.         dwProgramState=AP_CONNECT;3 y4 L! Z6 m4 t0 B0 C, y) I
  754.       }0 O+ i# ]/ X. c& [0 G/ Y9 l
  755.       dwStartUpSteps=4;
    / {4 F9 \- D6 W5 P5 j3 n
  756.       break;
    % ^# T* J. O6 |% o
  757.     case 4:/ y. R: ?; Q) \! ]
  758.       {* ?5 p: K% r( z. j4 f+ k9 g
  759.         FILE *fp;) y; B# }& Y6 ^0 |( V4 h3 Q
  760.         char szString1[128];* a& H- H* x0 Y0 I7 @7 A3 G2 j
  761.         char szString2[128];
    3 M8 O4 Z1 R* c' D) `4 k/ c
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! T9 k; i6 R$ ^" J: F. d
  763.         if(fp)/ r! M5 ~1 Q! W* |: Z
  764.         {( E: B, A9 W$ t1 k4 o
  765.           fscanf(fp,"%s",szString1);
    ! b( X5 n( a. @" `
  766.           fclose(fp);+ y. D3 b* P5 x6 r4 ]
  767.           fCheckVersion=atof(szString1);; l( W8 n7 n% E9 @
  768.           fp=fopen(".\\checkversion.dat","r");8 t3 A" t0 V7 V! Y( q( e
  769.           if(fp)
    , V$ b: A8 E, h. D
  770.           {% d5 }" G- y6 E- G. _" f1 N6 {
  771.             fscanf(fp,"%s",szString2);
    ' e- {) p" q% _. y& W/ q
  772.             fclose(fp);
    0 F+ e/ z+ A$ v5 f. ^
  773.             if(atof(szString1)!=atof(szString2))
    0 D4 W6 @- }9 i1 A1 x0 m% p% a
  774.             {( @: r/ t- R& A# c3 ?$ ~( s
  775.               if(!Dn.Connected())
    6 _' A8 t$ |# G8 ]: h- z
  776.               {1 x( n+ r" }% o9 i* t. q: ]
  777.                 bFirstUpdate=TRUE;3 j4 K/ u# `4 L7 \6 f
  778.                 dwTotalFiles=1;# x: ?7 U3 m$ n- ?, y8 r$ U. B
  779.                 dwDownLoaded=0;$ l) {: V& e0 Y" k8 J4 A$ u6 I
  780.                 bSilentStep=FALSE;0 I7 i, v! A1 [' _% N. z
  781.                 bCompressed=TRUE;
    6 p$ p8 r" {; h& Y- O- k. H& \% t
  782.                 strExtLocal=".\\DownLoad\";5 Y5 b- z0 K4 O3 P4 q
  783.                 strFullName="update.txt";
    ( Q) u5 `3 H- z: S* P% M7 b9 z: ^
  784.                 dwProgramState=AP_CONNECT;8 b; O1 E- a) d1 h" H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' u) x( r- ?" Z& o$ n0 B  g" R# \
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 h3 O; r  k; i$ B3 f% P% U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 T& L# `) X# @3 X
  788. " v5 K( J) R7 L5 Z- Q& n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % k0 q! h& \( }# j1 ~0 a3 o  i
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 o) w6 u6 |- i4 Q1 v- }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 I/ r  s7 E9 M: z
  792.                 {3 {8 }( I6 b6 K& J* r  u# K5 R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! g8 F9 j; Z+ ?7 x& F8 d1 r
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 J2 D, u# f. N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ C6 `! }+ W7 w' W& O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 L0 Q! X2 w8 u, E  I& h5 ?

  797. 4 m. |& B, f. v3 R: y# w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 M$ W8 T8 I$ o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; N6 e& d; x5 N% q% V6 L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      ~" W' w" b: D. q; f# S" O# s* j% P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Q5 N4 j: n1 f
  802.                 }
    ! C" @: _$ Y  d
  803.                 dwStartUpSteps=5;
    9 w, z5 U2 @/ k+ U4 U4 V) D
  804.               }3 R. ~/ v+ F1 a0 s- Q7 w
  805.             }
    % w2 ~* ]) p: h" |8 u$ p+ k+ Y
  806.             else2 T) T( v! p) `# b" o2 B5 }
  807.             {) V4 E, \/ ?' Q8 D' q
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % N8 W/ b& e0 }8 H) q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " ?5 Y/ N* }# n# A5 y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' J. u8 \5 J7 R* p% X- P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% i" T/ g8 w% b9 \2 |. D

  812. % m9 s! `; O- u4 Y1 z. l* V- Q! `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 N! G. T6 n; r2 w7 k! M4 E- U
  814.               dwStartUpSteps=99;) l4 G" l: N" d* q6 |
  815.               bFinishUpdated=TRUE;
    & O! D3 q6 s* d! \
  816.               bCanUpdate=TRUE;
    8 I  R0 S# O0 \
  817.             }% t' k$ V" A/ E9 i
  818.           }  V: e' \* N  ~; w1 V3 `
  819.           else
    : k. H- O: y, N0 |( Z
  820.           {
      C/ w0 T# I" k8 U: U8 r
  821.             if(!Dn.Connected())
    # E( G- ?! @$ O  _1 O4 l: @: p
  822.             {
    ) K5 q2 |$ Z) m0 ~) s: U
  823.               bFirstUpdate=TRUE;5 @  f8 k- F) t3 s' d1 D5 u0 P/ @
  824.               dwTotalFiles=1;" v) D+ Q5 s/ y# y, `
  825.               dwDownLoaded=0;
    ' j: ]; g  e# c4 n" N/ R% i
  826.               bSilentStep=FALSE;8 {0 G+ x( @4 [% y! I4 K8 w
  827.               bCompressed=TRUE;' z" F. c# d2 P) w$ I* U
  828.               strExtLocal=".\\DownLoad\";
    ; i6 m/ i% W6 s$ q
  829.               strFullName="update.txt";
    ( K% e! s5 G4 M2 {2 V: ~
  830.               dwProgramState=AP_CONNECT;
    2 s4 q% @' c! e/ T1 W; t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) @# N2 r6 `) T9 H& _7 F, l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 ?- u$ H: D0 `2 }+ ^$ a+ Y. b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + p) q' G: a8 O3 l/ W7 }8 ?
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 z! i; |2 j# y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ _0 c5 F& N' y9 W$ E/ |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); o, w' a6 O/ \, f
  837.               {. T! H. S: [( G; ]! p+ G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ f( ^+ X+ ~8 l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");# ?  v' c% t3 ~; V
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 S% Z; }6 i, T+ z. H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ J8 f5 F1 _  i( _0 r9 N
  842.                 : S* c% s6 N' E* z. L  [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 l1 Y3 F8 ~0 R) h4 Q+ L5 Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 e1 S# |( R2 O0 e$ I; c5 Y; ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 k  K7 [2 d4 a/ D% j1 a
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . n; ^2 L, ~" S! r$ Q$ {
  847.               }0 o' k2 h$ T' k( m
  848.               dwStartUpSteps=5;
    : J& \  Z7 a: v0 c
  849.             }% a) u3 }8 g! u. `* \8 G7 T
  850.           }
    & k0 z* a4 p6 ]% H% X( k
  851.         }
    $ x0 X& r" J8 q7 m
  852.         else% ~. e7 i% i, D' X4 U5 G
  853.         {, V) S( z# |( I" v
  854.           dwStartUpSteps=3;: }6 V  |  ^/ _9 `. w+ w- q
  855.         }: i2 w: P' W, n1 V
  856.       }
    ( [' x" d2 s! U# p( g
  857.       break;; G6 }1 h/ q5 p; s  o
  858.     case 5:
    7 H4 ]( `2 ^- h: T/ p
  859.       {
    - G( ~( I: s$ w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)7 K+ @2 s2 P% g  q7 b4 V
  861.         {
    0 j9 M  T$ n% d" H& [
  862.           int opt_overwrite=1;$ K! c4 _) t) g, C+ |! A6 L
  863.           int opt_do_extract_withoutpath=0;
    5 ~0 m2 b# Y1 j! ~  Q! a4 l. ~
  864.           unzFile uf=NULL;3 U! c8 M+ t, R6 d
  865. 9 g# {) t  X) z& u% j
  866.           uf=unzOpen("Wsa.zip");
    ( i/ g6 s3 R' E
  867.           if(uf)
    9 t) |# e  n" ]6 d
  868.           {+ K( T) L% _( Z! ?  o9 a/ I% p
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);/ y& i5 k5 {5 I; X/ @0 A/ F2 h
  870.             unzClose(uf);
    ) L* r& s8 l8 w' X6 v
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , h/ K  D( a) P/ W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / v* T4 P6 `6 b% |6 ]. x
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! G5 A6 ~/ ?" Y7 U5 Y9 A% O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , d2 e' m+ j& l+ X3 T$ m
  875.           }% c: L- F* F- K* f( }5 X
  876.           DeleteFile("Wsa.zip" );
    / k0 ~+ v3 [5 _  R
  877.         }
    ' h/ q7 Z5 ]. C) M7 r+ C& a

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

0 m2 a% w- v+ q4 i
$ K% W6 F3 N4 A5 H" D6 l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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