CSUpdate.exe源代码

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

, Q% c; k  Z6 t* y' i
  1. / RevApp.cpp : Defines the class behaviors for the application.
    3 e" c/ {. z; s4 Z
  2. //. N( Y& p" F+ Q2 \
  3. : |2 T+ }0 z& ~( _3 _2 g  [+ k
  4. #include "stdafx.h"% c2 H9 {- }7 U' J" B- A; a
  5. ' O) \2 r! N. {
  6. //#define UNICODE
    1 e3 I( \% n4 v$ h3 @
  7. //#include <gdiplus.h>
    4 E) G: p' y& C' p
  8. //using namespace Gdiplus;
    6 I9 h6 H9 g; a3 H" q

  9. 7 U4 E& J7 }/ J' ^
  10. #include "RevApp.h") ]4 a4 W0 i, q1 @6 G6 @
  11. #include "RevAppDlg.h"
    5 u& {0 Y; v& O; S
  12. " ^1 _2 j' v) e6 Z7 j$ q. C8 h
  13. #pragma warning(disable:4786)4 C+ t0 m+ ~$ m
  14. #include <map>8 k- E; h/ d* H2 T; i
  15. #include <list>
    ; w  K7 Q# U3 e; X  }& w/ h; t
  16. #include <direct.h>
    % N2 S- E5 \; a: S5 W" X

  17. , {" I* r) f8 d% |5 E* m  Q' I* V; j, Z
  18. #ifdef _DEBUG% ^7 @' C5 L2 p" I
  19. #define new DEBUG_NEW
      [% V! t# G! D  u
  20. #undef THIS_FILE
    , c9 x4 E8 u: x5 J& I
  21. static char THIS_FILE[] = __FILE__;
      D# N3 l1 h7 P/ c6 i: P0 _: H4 |
  22. #endif
    3 n# v  S8 Z' b& l
  23. #include "SkinResDef.h"# a6 J8 Z3 S; w3 z5 t6 e
  24. #include "ChangeBG.h"/ E, `# ^% C! b. p6 f  b% `
  25. #include "AFXINET.H"2 y* i! _  Y: p4 X
  26. ' ?. d8 g1 q: u' o
  27. #define TRADITIONAL_CHINESE 0" L3 O6 S0 k& _
  28. #define SIMPLIFY_CHINESE 1
    & {( Y( u% m' @
  29. #define ENGLISH 2
    4 J7 j9 J( M. P/ `. {. A' Z
  30. int m_iLanguage = ENGLISH;
    / P6 P, Y. [! X
  31. /////////////////////////////////////////////////////////////////////////////8 m3 Q+ p3 T2 P5 ?9 F, q
  32. // CRevAppApp# m, `) L* s+ O- @  Y' ^
  33. 7 D0 \. L# Q/ h7 y6 q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 U" F  w- _/ [& f, v; O
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - S" w, v# }6 ]9 D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / f& {$ A. ], w) s7 s6 l. v4 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- U: F4 h9 g4 M* U
  38.         //}}AFX_MSG8 A  d1 M0 g/ @& U! j% h4 R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) B1 f1 T4 c1 X, F. `! W5 T( y
  40. END_MESSAGE_MAP()6 W$ J, N. U- L4 ^
  41.   O5 L* j4 u  v- d
  42. /////////////////////////////////////////////////////////////////////////////
    9 S! y/ }9 j5 _+ R' L: ~
  43. // CRevAppApp construction3 e' G& {9 |! n; u9 l2 ?* a& P
  44. # r1 o! d8 O* x& E# W, C5 @2 n
  45. CRevAppApp::CRevAppApp()
    ) b. }4 A$ ^* f. t3 h
  46. {; u: Q* u1 |5 T& k6 V, ?% v  K
  47.         // TODO: add construction code here,* W+ q6 G3 f) o2 ^" K2 v
  48.         // Place all significant initialization in InitInstance
    / ^' L; ?1 ]7 y
  49.   bDisplayIsBig5=FALSE;
    4 D, ?/ }' r# ^  J- N' l8 l
  50.   bRestartUpdater=FALSE;8 C4 z' D( n# G# k
  51.   bFinishUpdated=FALSE;4 M5 f) F3 s7 ^8 N4 u+ {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    5 F( G1 ]# ]  U* N+ }. q8 p
  53.   InitChangeDataBig52GBKS();1 B( ?  |5 f' @& U
  54.   InitChangeDataGBKS2Big5();
    5 M& s% }$ s3 |4 ~
  55.         //
    ' U: z% Y* s$ v6 j% \# u
  56.         bClickRunExe = FALSE;5 T2 T/ ?  d; x) N
  57.         //
      V7 S; E$ ~2 U9 L7 [
  58. }: J- \' O5 k7 }( V- B6 o9 n
  59. " T- a! M2 {9 A4 f7 B7 r9 s
  60. CRevAppApp::~CRevAppApp(); C" I" ^8 Z7 v8 l" E" W
  61. {! N* }% c5 I# m% t3 R4 k
  62.         // TODO: add construction code here,
    ! E: T2 h* Z: c6 [) K' ^& V, X% y9 d& ?
  63.         // Place all significant initialization in InitInstance* s( w0 ^) Y0 c5 }$ B
  64.   EndChangeData();: o/ ~& P& \$ C3 q; p9 C# c
  65. }; k$ z! C2 a# v: Z! z: S

  66. 4 G3 |- D& t/ p# o5 a+ M2 b5 o
  67. /////////////////////////////////////////////////////////////////////////////
    ; P9 ^1 E" K5 Z9 R; D
  68. // The one and only CRevAppApp object2 N* U9 r9 _) z# A: t0 m9 P. |6 p/ A
  69. 0 ~' W. h5 e) ?; k$ [
  70. CRevAppApp theApp;4 \$ C$ d- }8 {; P2 w6 v9 b  E
  71. , r9 Q  v/ W. S& f
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : W% X* p* B) q
  73. {
    : J. h+ R$ H! m" G- k
  74.   int iEOF=0;* K; n1 P: l! H$ w" B
  75.   char szTempName[MAX_PATH];
    6 K: A4 S' Z& l; _' F( f+ o
  76.   *szFileName=0;8 u- P2 ~- B& Y6 O& d
  77.   iEOF=fscanf(fp,"%s",szTempName);6 M; |5 }  O, W' }* T" D- e; B
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& B& D" b6 h4 B/ n
  79.   {
    9 v! d1 M, I/ O7 ^, T# G" r/ {
  80.     strcpy(szFileName,&szTempName[1]);9 X9 T  B7 _0 t1 m0 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)2 W, F) W" ~' C/ V; ]8 t
  82.     {/ _2 A( H$ J' @, Y# P# \1 c
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & D/ m  Y' W: }5 o+ a( P. [4 v
  84.       strcat(szFileName," ");- R) ]( P2 j% r! p/ S+ h4 }0 f
  85.       strcat(szFileName,szTempName);6 g9 t# j# n# L! j
  86.     }
    * C* b- ?: c9 q0 M/ y- d
  87.     if(strlen(szFileName)>=1)3 M& f  p- M4 W" {" f: ~: v& @) y
  88.     {
      c3 [* `4 V* P! K
  89.       szFileName[strlen(szFileName)-1]=0;# d: G1 [# B3 b- Y% W
  90.     }  Z& a! c1 y. B/ w5 Z+ Z
  91.   }
    % L; b3 f5 |, |0 M  k8 j, W5 o
  92.   return szFileName;
    * t, _) Z" q8 [7 C2 O; V
  93. }0 O& w0 i1 ~( b+ v( }

  94. 9 ]/ \# S$ l2 ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" B" Q4 A, y6 w& x2 _% r" z
  96. {
    * g! @: [* x$ k: g2 ?$ A2 z1 ?, }
  97.   FILE *fp;7 E% V/ y5 t! w! Y
  98.   char *key=NULL;
    . `2 Q) z; l# |0 e3 L+ X
  99.   char version[MAX_PATH];
    7 w7 R; `' f: R$ M6 `" g
  100.   LPUPDATEFILE file,olds;
    5 @0 `: `4 s7 S; J% t" |0 f+ k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 @* N4 `. H' |
  102. 0 ^! f" J. c4 P5 k2 i& }
  103.   UpdateList.clear();8 E9 V. F$ @9 W8 s) S
  104.   UpdateFile.clear();' y: }) p, e9 U5 T& k, }
  105.   if(GetFileAttributes(filename)==-1) return false;/ z4 x  b# c4 o) A% a- M
  106.   if(!(fp=fopen(filename,"r"))) return false;8 I  A8 J/ I: w3 G& U
  107.   fscanf(fp,"%s",version);
    9 y7 Q) S7 o  @# I9 @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & f5 x7 J9 I- o; W- T
  109.   while(fscanf(fp,"%s",version)!=EOF)8 y3 I' }( q9 S# @9 K8 u0 b% c
  110.   {( b5 F$ i: n4 H* g8 s! h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) Q  V7 N( J. }6 }* g8 h1 i
  112.     fscanf(fp,"%s",file->path);
    . t0 ?) c6 s' _6 P) K1 y
  113.     ReadFileNames(fp,file->file);0 l6 h/ R! O9 I5 j# G# L% j8 i/ b+ R
  114.     strcpy(file->full,".");1 K9 k  x! `( W( q7 l
  115.     strcat(file->full,file->path);& k! m" \3 h& R
  116.     strcat(file->full,file->file);
    3 G/ X8 Z3 T+ j' U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 ]- U2 r- U2 I% ]) r: t
  118.     {2 g6 ~1 @; Q$ X4 j
  119.       file->vers=(float)atof(version);
      S- _. Q4 O3 U
  120.       UpdateList.push_back(file->full);
    " @) ^, _  X9 U5 v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + w6 t8 p6 v/ s" b
  122.     }9 ]; r6 @2 F) R
  123.     else
    ) Q+ C9 Y8 U% e9 o2 G# a
  124.     {( l) D3 d' z; a7 j
  125.       olds=(*p).second;* k& ?, v3 A4 h! r$ G( ~+ d+ _
  126.       if(olds->vers<(float)atof(version)). p+ j) o" x7 B3 g
  127.       {
    2 A" {% y/ ?* P9 I7 ?0 j. c
  128.         olds->vers=(float)atof(version);
    ( Y; y  O3 b2 b* I8 A% ~
  129.       }
    : s: O3 F8 P5 e4 q$ k
  130.       free(file);
    ' g+ Q9 _: Z" x* S& D5 i
  131.     }$ t9 i+ V0 U2 @0 ^- R3 H
  132.   }( A9 r# v( d; @  {
  133.   fclose(fp);
    ) N' F5 m+ L- v0 V4 y6 P
  134.   return true;# C9 A8 p) M9 z
  135. }
      U' i) ~- K* W4 j3 o8 o

  136. . N4 b. S* a* p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). Y- ~+ M+ j( {9 ]1 g: q+ m
  138. {
    1 i8 h- X, B* l) W; M, u) F3 m
  139.   TCHAR  szFull[MAX_PATH];
    * d$ `; y8 T. f6 ]
  140.   TCHAR *token,*inter;: x: }. ^. Q' k0 h
  141.   *szPath=0;
    2 }1 G) ?. e/ O2 y* S; y
  142.   strcpy(szFull,szFullPath);
    7 V5 A$ G- g2 N
  143.   token=strtok(szFull,"\\/");4 S0 N" `/ n" ~7 D( I5 M  h) u
  144.   inter=token;
    5 k) J; y. [( P  c% V7 k
  145.   while(token=strtok(NULL,"\\/"))
    * l7 v* |$ h4 n6 C& r& p- _
  146.   {8 Y8 Y& M- H( S0 Z9 K
  147.     strcat(szPath,inter);( u2 L6 E) q4 [. N& F
  148.     strcat(szPath,"\");
    0 P9 g# e! ]+ _& `5 D
  149.     inter=token;7 c) t1 P& @* a* W) P
  150.   }8 Z* H2 j8 I" ^
  151.   return strlen(szPath);
    2 U0 B% e) D" c: |4 l" Z
  152. }
    , N. X) h$ E0 N5 x/ W8 I5 Q6 _

  153. ' h/ l& x1 j3 m2 B; z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), [4 s( |% x' S
  155. {3 _8 X1 o9 ]9 d) p0 M* x& q
  156.   DWORD attrib=GetFileAttributes(Target);2 b" r; X- t' z" j. n
  157.   if(attrib!=-1)3 K( [" q4 |! m1 q; h
  158.   {
    3 ?+ Z3 K# `4 w9 N( q$ J5 s. [9 w
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% g6 Z  p- ~" c# u$ X, B- L8 m7 }: K
  160.     {
    & {  x( z: O/ N, `& G4 `: r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 {' a. T) f' L3 U# D8 v
  162.       SetFileAttributes(Target,attrib);' W& c8 P# i1 ?# [' S7 b% A0 a* q
  163.     }
    & G: P# s/ E) m1 g) F: m# V
  164.   }4 t9 r3 H- I: i0 T& }0 B. M6 y0 e
  165.   CopyFile(Source,Target,Erase);
    ! _# c: U3 A: V
  166. }, I* x$ b; A. _# T

  167. $ m6 G  u# p+ {( F6 I2 S4 w
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" r& G6 q; t( n5 ?+ L& v- T
  169. {% j" a' g- `5 A
  170.      FILE *fp;
    & D; _; _  B2 b$ E5 P
  171.      char  szBuffer[8192];
    , q: U6 X3 Z; m; t: f: A% f; s
  172.   va_list  argptr;
    , \8 ], G; G) f1 b# t1 Q

  173. ! d/ D3 x5 y% Y* w* c0 X
  174.         va_start(argptr,message);
    . M6 O2 c4 r. Q
  175.         vsprintf(szBuffer,message,argptr);
    8 \- A4 Q% [/ l: I' J
  176.         va_end(argptr);4 h5 `3 {2 L8 `, r- M0 }6 C
  177.   fp=fopen(FileName,"a");+ F: S6 M$ O/ h  b8 y6 u6 V6 O
  178.   if(fp)
    - s2 Y! I% l9 V- U8 J0 y
  179.   {/ Z( L, F; ?3 Q* ?+ j4 Q9 O
  180.     fprintf(fp,szBuffer);% I9 t' ~' s, B, Y: d4 G
  181.     fclose(fp);0 ~1 t- z! C- Z* Z( J5 b9 A: A
  182.           _flushall();( W8 ?. K1 h2 p- h" x
  183.   }& c% Q9 S$ a. }$ w5 v' T
  184. }
    . y2 w. @* L' T% L; K
  185. ' G% a4 X" @( Q( {
  186. BOOL CRevAppApp::Fclearf(char *FileName)! q. Z  @9 I3 c8 B1 `
  187. {: c$ n) m, j8 G; Y
  188.      FILE *fp;0 E) j, _3 N7 C! R& U3 B% C
  189.     DWORD  attrib;
    + D3 y9 c2 d5 Z" e) J9 t7 Q- Q
  190.   attrib=GetFileAttributes(FileName);
    ) H. s  n7 N1 A, M
  191.   if(attrib!=-1)
    $ X1 j" b: ]) b1 ~! h+ ^
  192.   {
    # H. y. d% m! q- f- n+ b
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( j5 V7 y7 S7 J6 g" ]4 t9 L
  194.     if(!SetFileAttributes(FileName,attrib))8 g0 @: K6 @( A5 d6 @
  195.     {
    . w2 O* y) p2 W  V1 o: v$ N
  196.       return FALSE;
    : D8 o+ M7 e) ^, `) E+ X! r
  197.     }4 n& o! J0 [- z2 P6 C
  198.   }
    4 D1 x: l! H% y; O* O7 T/ u
  199.   fp=fopen(FileName,"wb");
    ( Z, {/ e2 O0 b1 o7 Z& L
  200.   if(fp)
    % T2 F( N, k+ [( ?
  201.   {- k3 r: o" {2 Z. W+ e
  202.     fclose(fp);
    ' ?- @, v( {0 J. Y8 A6 x
  203.   }7 `/ Q" q+ S! t) t% {( ^% F
  204.   return TRUE;4 O9 M- r8 C5 N) h" O4 a1 `  F: c
  205. }
    3 E; Y% I8 ]' b) Z+ ?( J: j8 O9 \# ^; a

  206. 6 V" @4 Y- P+ ^7 s: T* A, d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 Z  h# X* n# I* q( {
  208. {% d6 L! d' V! d( e8 }$ T
  209.   char filename[MAX_PATH];
    1 e6 n- W4 \2 Q5 w1 j9 G& [1 F
  210.   LPUPDATEFILE file,olds;
    7 I4 x+ Y5 l, q8 I! g6 f8 H
  211.   std::map<int,CString>::iterator i;
    6 {2 F; U( s# C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 ~- T+ p  Y8 d& D( H% V
  213.   std::list<CString>::iterator l;; ?2 ^) V3 A. E+ T

  214. 2 v# F8 t; b# q! G8 T$ [( t8 ~) h  X" o% _
  215.   if(bFirstUpdate), {" k4 r! J6 @* X* P1 f
  216.   {
    : ]4 R- h  F" f7 I! C
  217.     dwCurrFile=0;' V, _2 g3 ~: T) m3 ]
  218.     bFirstUpdate=FALSE;
    6 \. V' f% Q1 k2 }8 L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), F- \6 Z! E8 {
  220.     {
    8 e; X- n0 B, Z( [) {5 _
  221.       dwTotalFiles=UpdateLocal.size();2 ]7 |" `, e1 r7 w/ {  R) d  w& \
  222.       dwDownLoaded=0;
    ' U6 h$ R% {4 u2 @* \$ A
  223.       bSilentStep=FALSE;; N1 k' ~1 H5 v: ^' E$ k' K
  224.       bCompressed=TRUE;' f1 h4 r- G; a2 _
  225.       strExtLocal.Empty();0 I& m  ~  ], A; T7 c: n: s6 k
  226.       strFullName=(*i).second;
    $ g3 N, b* b. x; l7 b+ r
  227.       dwProgramState=AP_CONNECT;
    9 I8 c6 p6 [6 M. e% l
  228.       return TRUE;
    & n/ ?8 s% C/ m6 w
  229.     }. T5 @$ l6 z) c+ K; D' _
  230.   }
    * Y7 X3 Z! W& D& D" B  j
  231.   else if(bRestartUpdater==FALSE)1 a0 o1 `/ X% Q% h; n5 N
  232.   {
    5 E7 @- R' I2 z3 L! B- P: |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& d' g/ V# j" \) l" V: e- _
  234.     {# ?7 @' H/ H) k" k& Y( `9 F
  235.       file=(*p).second;2 P% K# H" M4 ^" D, k( Y9 \6 d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- i% w+ g: G0 ?  f
  237.       {
    ! u, K0 J( K% t+ `3 Z
  238.         olds=(*p).second;
    5 R! t; U( ?! i) b1 @1 s+ l
  239.         olds->vers=file->vers;$ B$ j+ ?( T' m9 e5 t& U+ k
  240.       }
    ! I& c# A2 A! S
  241.       else: x1 s) V8 f/ O' m* m9 |; W: a
  242.       {$ t0 A; \, E  K0 Y, }4 r: ^3 o
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / l1 b1 R( R0 b$ j, B- X5 _
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 M% Y' V+ R$ c$ [! x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ k7 z/ B1 e& X  L& g
  246.       }
    " W, }5 l( _0 }# _( S  n0 g# G7 f! z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * ^6 z8 o3 l, N
  248.       sprintf(filename,"(%s)",file->file);, \4 n3 x; X$ T. ?7 ~2 y9 y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : O* v8 h) ]1 z8 R- D/ q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' L. M$ S, ^4 ]" J2 `
  251.     }
    + i6 v: t8 m9 k5 _
  252.     dwCurrFile++;
    6 T3 A9 J, q* w4 ]( Y, p# }% j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). {0 b  @; V+ z8 |( Y
  254.     {2 R( x- _2 R' `- Z$ Q
  255.       bSilentStep=FALSE;  ~- b; t# i5 `: T
  256.       bCompressed=TRUE;/ `9 ^$ A# ]( a( p% d' c% M# a
  257.       strExtLocal.Empty();
    ( g6 Z) Z- N+ T7 W. B4 I* ~+ W
  258.       strFullName=(*i).second;: ?/ v6 [7 S- n
  259.       dwProgramState=AP_CONNECT;
    " Y) S# ]4 ~* `) B1 g) M1 e- @
  260.       return TRUE;8 o2 b0 c' {' h+ W: Q& v
  261.     }
    3 I( {  i5 f: z4 T/ r& A9 ]
  262.     if(!bRestartUpdater)0 y1 L  I- y+ h1 _1 C" T
  263.     {
    " ~! Z& ]5 B# Y: E, `" j$ a: K
  264.       int iCurrSize,iFileSize;
    , Q  h/ g6 q' f6 D+ `; r& `
  265.       iCurrSize=0;; b% m# y. l3 m7 F4 l
  266.       iFileSize=UpdateList2.size();' O1 @; [6 }3 I0 i6 r$ J0 m1 Q1 ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");4 Z# R2 R1 z" Z3 H+ Z) q' a: ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' Q  w  q) ^6 o  G. ]% b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ m/ B8 O& E4 U* k* U- B  X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 j7 L& U( I! ^! \& t2 T
  271.       Fclearf(".\\update.dat");
    7 f2 f# T4 d) T, C) Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + T1 ^  }0 g6 W7 x& z1 X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 `" K0 [: G; c; W! v
  274.       {
    * a/ ?& Z9 O1 i' _2 b- r/ o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())% Z+ E& L) G. {- o; e
  276.         {7 h3 I2 R% u. U4 Z' [
  277.           file=(*p).second;) H+ R. ^! j+ w- b
  278.           sprintf(filename,"(%s)",file->file);
    ) T- V5 b# f# I5 W% ^4 o
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 V! v/ j4 M' z: s9 a
  280.           iCurrSize++;
    6 \/ G6 |0 G) M  ^7 D
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + [, f: N9 d/ ~* Z/ u
  282.         }
    " N+ Q! H/ ~  h+ V& \9 D
  283.       }# A; I# V$ [! b% {7 V
  284.       unlink(".\\update.txt");
    - [* U) R: ^: V6 c8 ^
  285.       unlink(".\\update.tmp");3 Q+ `; a( M4 P0 j
  286.       Fclearf(".\\checkversion.dat");/ {3 B) V/ s. J: n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( N/ K6 S: K( \
  288.       if(UpdateLocal.size())
    . [6 H/ K6 R- |% q+ ?
  289.       {$ @6 l$ B( \5 _- V3 a
  290.         UpdateLocal.clear();
    % N; a! i3 d; Q. M: f. R3 d- P1 q
  291.       }$ f+ p& O; U+ K) |
  292.       if(UpdateFile3.size()). a1 ]6 [0 n8 |9 E, Q( R
  293.       {
    8 p" H; b) n# ]# U9 B( ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 ]. a1 I3 G2 x" f+ T+ Q* c
  295.         {# |4 I- ?7 ], `* [. [
  296.           file=(*p).second;7 B+ @$ F. L$ S: a$ Y# K5 M; W6 d
  297.           free(file);4 x2 h8 u. F2 \+ a9 R
  298.         }
    & Z$ ], N& g6 l6 F% U/ v( Z
  299.         UpdateFile3.clear();5 k4 ~7 r  P4 n. d: T9 Z# v
  300.         UpdateList3.clear();
    % U* o! X  p) ]' u
  301.       }( i, e6 k7 F1 e$ a! A; t
  302.       if(UpdateFile2.size())* Y: G& i& C' @' r/ z$ p  t
  303.       {: d3 e$ y  g! P) W/ J# T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), M4 y& ]% B* L
  305.         {- v* b2 f! {# X1 j  `( Q  \% t
  306.           file=(*p).second;
    1 o( ]* }% f2 N1 _5 t
  307.           free(file);
    / m) r6 ~. `& ~
  308.         }
    $ Y9 [% K- {! o3 _, i: Q9 a& e5 a
  309.         UpdateFile2.clear();
    : N+ g% P/ F, J* A( A0 \. H- i% {, V
  310.         UpdateList2.clear();
    * g: z$ W' A: x. m8 S) e
  311.       }
    0 U1 g0 H( t- Z  G, t+ G
  312.       if(UpdateFile1.size())
    * `2 U" l& F$ s& Y# {
  313.       {
      x. p- A# F; n3 z0 O: U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# I" E, s/ |5 {2 Q9 ?
  315.         {# \' b: H" A0 ^5 t! d8 z- v' r7 M6 g
  316.           file=(*p).second;: i, B. Z: x7 E
  317.           free(file);+ ?; A4 i3 R+ G2 I8 `
  318.         }
    7 Q& [7 b' q7 b
  319.         UpdateFile1.clear();
    6 w7 O+ S& F1 ~' i+ ~. k
  320.         UpdateList1.clear();
    $ `" B$ h) l  D
  321.       }
    0 c" f  Z' b7 ~5 Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ( k6 k, w6 [7 n4 f) z- s
  323.     }) J2 ?+ T$ x2 V4 w% v. m% f
  324.   }- c% ]9 d1 ~% s* L- [
  325.   return FALSE;8 l& V5 T: I0 g0 l
  326. }% T- I5 C) p, a% L$ ?* |7 _
  327. . N) E' A; g( \/ F, s8 j7 r  s7 @3 b
  328. void CRevAppApp::ClearAll(void)
    1 d+ G- e# h  d3 y. C
  329. {5 N: T$ x# O8 E( J; s
  330.   LPUPDATEFILE file;
    , S/ {. X. }& g' l; s6 u7 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( a# ?7 ?) e* f: o, ?* O

  332. # S8 G+ a0 f) |! w) N
  333.   if(UpdateLocal.size())  }7 {$ z. y# G8 y- f
  334.   {( z& D5 E$ C  C& F3 O2 O
  335.     UpdateLocal.clear();
      |9 `0 K( t3 Z# N
  336.   }
    ! n3 a  m" M0 m' p+ y& ?' O
  337.   if(UpdateFile3.size())5 H1 [# v) p  a# o# n2 l; A
  338.   {
    0 Z; L- w5 G! N5 b- ^6 C/ D, ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + q/ k  m' {( i. @+ e6 l* G
  340.     {
    , L; ~+ `: S  T$ s: L
  341.       file=(*p).second;& B4 e# j) }1 z2 E
  342.       free(file);
    ) X1 e  `! e) \2 U
  343.     }8 V7 M' s: p- |2 q$ b! x8 ?; R( r
  344.     UpdateFile3.clear();# G0 Z7 k# p1 o2 g" v
  345.     UpdateList3.clear();6 R$ ^3 S. d6 Y4 a0 a4 F' a% M0 L6 l) L# k
  346.   }
    $ e- b" F  V. N; J! L. A3 p# g* @
  347.   if(UpdateFile2.size())
    ) u- M3 y+ O: r: E* Q! Y- v7 D+ ?
  348.   {
    5 _: |. a, ]6 ?5 X* ^, o' ~% Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) C. G) s$ {% @% {% m
  350.     {, M5 O, H" J3 m0 X* A
  351.       file=(*p).second;
    1 x7 E) S# s7 U7 x3 b/ O, w. }+ W) y
  352.       free(file);" i) z8 E0 C# P' M; u  }
  353.     }1 \. P' z8 M2 K2 a3 X: g4 ?) ?! b1 H
  354.     UpdateFile2.clear();
    2 l2 s  R3 b/ }1 K8 A5 g
  355.     UpdateList2.clear();
    5 f/ m( m# ~2 E( D, H& K- ]/ H
  356.   }
    & ^# p5 u, \; y( B! K  M
  357.   if(UpdateFile1.size())& m" P% I' W" X
  358.   {) f: k+ G4 W! E6 v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- U# F2 r  T$ `. t0 w
  360.     {1 i/ {: b. `$ f3 `  l
  361.       file=(*p).second;
    4 T# I, A" p4 b8 F4 O; [8 A' x; {
  362.       free(file);
    ) y( E0 Z7 C; F
  363.     }. f( b4 N5 @0 h: ]. ^$ Q7 Y
  364.     UpdateFile1.clear();  U% m  d# L- C/ _" j
  365.     UpdateList1.clear();7 ?) f8 _- w, Q7 ~
  366.   }
    3 W" J' [8 O3 x$ H# }
  367. }  
    9 e* [' z% @1 T, u5 A, T
  368.   ( [% O2 ~' }; W. x& _
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' l* b, f- v: h) s) Q
  370. {
    " Y$ r2 O9 s7 I2 ^
  371.   int c;
    / U. ]3 v* M, {) F7 I$ `8 f4 h
  372.   LPUPDATEFILE file1,file2;' V- D8 T1 G: K# j; n2 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# D' h! M7 ?/ ~* J' z0 P
  374.   std::list<CString>::iterator l;
    6 ]4 x/ [' v7 Q+ f$ \8 r- |
  375. / c1 d" d. V; D4 e* |
  376.   UpdateLocal.clear();9 F# g' e4 K. n1 ?5 t5 l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& I% p4 M% B7 c  i7 f3 y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 D1 C6 q6 G6 I0 J. m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 v7 j& I& f3 W; c/ _/ Q6 I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! R% Z( K2 t& L* b
  381.   if(UpdateFile3.size())
    . |; K5 r' S) n. S, {
  382.   {2 l4 u, u  I! C1 t, _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      p( t' {7 T" J* y9 y; t
  384.     {7 U/ H/ u- W; v3 X
  385.       file2=(LPUPDATEFILE)(*i).second;8 U$ i$ [/ B$ q, ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 ~& T" {1 u. [* p
  387.       {5 P/ u2 D. |* W% R3 ~2 ^
  388.         file1=(LPUPDATEFILE)(*p).second;
    / X' e2 s; z9 Q! J5 M% b
  389.         file1->vers=file2->vers;
      A5 x# C0 t+ w2 Q
  390.       }
    5 [1 G3 P: Z2 ?% I
  391.       else+ j2 [5 l1 D! i* A& p
  392.       {1 N* N6 v/ H6 [9 R+ ^& }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 J- i( S, P8 M6 z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 H( M' {. `& ~& A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ @& p3 l# e2 b4 t* T' X1 Q3 k
  396.       }3 u2 P2 E* D* x2 S! F( r* T
  397.     }
    8 M( {( m& D9 H) [9 `
  398.   }
    6 ]# A4 Q: f) f! V
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 \9 _8 ]) ]# w: Z6 R1 S
  400.   {! \& w- P" W2 [% {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 y7 g: g$ `8 P1 n$ M+ N/ i9 t
  402.     {
    2 G$ V0 V$ F& Y) C4 c& Z
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( U) j* S! ]0 q. e$ K3 ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 e7 P( H. k( \' r
  405.       {6 T* ]1 l" z6 B; ^  w* b1 w5 L
  406.         file1=(LPUPDATEFILE)(*p).second;
    % z3 t5 @6 Q  F( Y- F
  407.         if(file1->vers!=file2->vers)
    ( L2 t0 \4 u0 z7 r
  408.         {
    * h& s+ j& S1 y- h) x% j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) P7 _1 I' s, t  j' K, ~% z
  410.           c++;8 e, R2 N; i6 }: J2 C$ h
  411.         }
    . r1 b( Q$ P  x8 T, x
  412.       }
    & F2 ?% v( a* k& s
  413.       else
    ( o& V* z0 M  @( O- C; L! ]
  414.       {
    + I: M# T' X( a( d, o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' e0 N" s% b# e3 ?, q8 l; g
  416.         c++;# Z% N' z" b. a2 {* d" z- \
  417.       }
    4 T" m$ r" l; Y! Y8 T
  418.     }8 o5 F. G3 j* D
  419.   }
    2 |8 O' e4 M! t  v7 z2 q
  420.   unlink(".\\DownLoad\\update.txt");
    ; O, K* {2 W) b' A' s( I$ W
  421.   if(UpdateLocal.size()) return TRUE;4 a2 t& X- A% E% b3 ~; p( A
  422.   else                   return FALSE;
    ' J* w5 A5 h3 H0 }7 a+ N3 a
  423. }
    . z$ v: s8 v! @" Q8 a9 A. `

  424. . p& @5 ]3 b+ ]+ S9 B- M  F
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 x; r# k4 Z$ E$ w) c( ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 h3 g9 B2 d/ t0 }
  427. ) K: w; b( j; b
  428. + k- F2 ?9 N0 \4 l7 u

  429. $ @, |5 d( q! n  Q: {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 `; D+ Y* x  X
  431. {$ D1 O2 H' ^  p4 V$ n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 e( d, k0 z1 N" d) \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 e, c" x6 H: ~, @2 f
  434.   {
    5 O" s# t* e7 W/ U$ V. P
  435.     char szLanguage[50];  W5 ~6 T: b. D- C7 v# b% w! E6 g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; k6 _4 O: C* c( {& _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 i* L  r9 t: Y1 }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 f: g, y: r- e
  439.     else                                   m_iLanguage=ENGLISH;# Z7 c* e0 e- l9 ^4 t) e' m5 y
  440.     char szRegister[100];# @0 R6 C. n5 E$ _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 Q1 {' i. g1 y$ U# \# b6 w5 \7 C
  442.     strRegsName=szRegister;
    * m' n) `8 v- R/ T, @6 ^8 Y/ r
  443.     char szPatchURL[100];
    : f; @4 X! C. e# Z- [& y" ~. N9 t) k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 `* r0 o% G) j8 |) S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , e' {5 x( y# Q7 E7 [
  446.   }& ]7 G  e8 {/ X( E
  447.   else
    $ m8 P0 o, b3 ]* `4 _
  448.   {
    % G( _! h- Z0 R$ P( i' k# g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 x* d! E7 ^/ u- p
  450.     strRegsName=DEFAULT_REG_URL;" e/ X: k" ~- p6 B
  451.   }
    " x2 x$ R6 ~. S0 o; S, n' x3 ]6 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * T1 v! y+ v+ I1 |) n  p
  453.   {
    4 ?6 L, L- d6 C# w
  454.     char szIP[50];+ C+ G8 H& @6 p  v% K5 q% q
  455.     char szDIR[300];' a* H% h6 k8 t  K( Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 f8 B/ z1 \0 t3 o
  457.     {
    # j* V- N0 X  @; M6 |+ @$ h) F$ r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# I+ }" b* c1 N) w+ _+ @! N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , r( N- x; q6 S- W) `
  460.       strHostName=szIP;! v! T2 p- h' M, n) g7 W4 A1 t
  461.       strHostPath.Format("/%s",szDIR);+ I7 u0 [6 g+ k+ L9 l! ^9 `
  462.     }
    2 C' q3 `' Y5 D( u
  463.     else
    3 C) a! |9 l3 c) F+ a- ~# F+ ^
  464.     {
    . W4 p& S" ?/ e" ]3 A$ C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): _6 U) P$ ~6 n- v
  466.       {
    ) ^; R5 R( `9 ?3 v% o, }
  467.         char szLanguage[50];4 Z( _' v% J* _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' }( V9 E+ n2 ~! ~; Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  n/ ^# V9 T/ L+ V8 X, ?, J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . K( T! c! z, }9 W9 N
  471.         else                                   m_iLanguage=ENGLISH;
    - H+ E8 ]! p/ t' |9 k1 q0 D; v8 B- v4 m
  472.         char szRegister[100];
    8 A/ c: o6 E" l5 Y/ |' \& ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + m9 ~, n. F+ L
  474.         strRegsName=szRegister;' e5 L* C7 H+ Y: z
  475.         char szPatchURL[100];% ^  `# c* X* H4 c/ }* g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 _4 ^. g: r2 @" _4 t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . B# d/ W5 ?) u$ Z- }: Z8 M
  478.       }
    ' `; J3 r5 K' n0 @
  479.       else' J1 p( n2 J( v9 N; j, B8 U
  480.       {
    5 N$ r( I; |. i+ N1 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' R- j; c% m% i/ m% z/ Z+ z" o
  482.         strRegsName=DEFAULT_REG_URL;
    5 r5 `, l% G& [0 N
  483.       }
    5 S: x/ v$ g# s) [+ T# g8 D. H
  484.     }
    : m% _9 [4 P9 O+ W4 p2 ?" S$ `
  485.   }$ }- o  S5 D" B" u$ y
  486.   return true;
    : J7 J1 W" r. E) _
  487. }$ O4 f: ^, g. F' h: V
  488. 6 Q; U% u: y2 e& h* y
  489. #include ".\ZLib\unzip.h"
    0 ]; V3 N" Z- @  U+ b* `$ F) \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    . f: c+ D% b! D5 U' L- s
  491. /////////////////////////////////////////////////////////////////////////////, O7 P2 t/ a/ h/ I( b
  492. // CRevAppApp initialization
    ; ]8 q) B# Q+ C8 V

  493. / p4 U/ d* W1 Q5 [# Y- v9 n
  494. BOOL CRevAppApp::InitInstance()! l& O. @5 K( I* i* v! m6 s
  495. {
    / g, x. j1 S' i1 E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 \* D$ @8 Q7 z  u: z  d- Z/ n( G

  497. / S$ A- D5 b9 R5 Q) `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " d" r* q' {- d" P0 O4 Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 c9 ]" Z+ k9 Z, f' P7 q- E* W- p
  500.   {! `# D0 w6 g. K" @# o0 w
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , n4 Q* K+ [; g* Z6 W. D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  S: D1 {: k# x+ W7 {4 l" G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( K" v- ^% V3 V  m
  504.     {
    8 ]1 T1 ^* d$ ^$ }/ Q4 S) P+ t
  505.       strcpy(szPath,szPathTarget);
    . v# S4 z# f4 u# _* Y1 Y2 B
  506.       SetCurrentDirectory(szPath);/ u; u) o) Y1 V" }5 G* b* @
  507.     }
    + F' c: R1 B9 ~# c8 M
  508.   }/ N+ b. E7 }! G/ ]2 N! f3 J7 G$ j+ x
  509. #ifdef _DEBUG
    8 D4 x8 a2 [* [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . z( ~9 m  W; K% w9 }, V
  511. #else. ?: s6 ]- c% q$ {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! d- g& t- i2 _* s+ j/ v3 N
  513. #endif
    ! d3 g2 M# q3 p  q8 C7 ^
  514.   {
    ( ?+ _" _+ W; h% R* ]9 Q2 f
  515.     char tempFileName[MAX_PATH];& Q  ]) X) p- w' F6 j
  516.     strcpy(tempFileName,szPathSource);9 C! O$ g4 d# B# o. q$ V* R
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + R" n4 }$ t1 a' `& y$ i/ `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . H! l( s" F/ V" G/ [* D  a& i+ ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% g6 f2 m. F& x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 n3 q6 A$ A! o
  521.     return TRUE;
    & Z8 |3 x5 q' n' F1 _0 m
  522.   }
    2 n- r& N" {* u% ~
  523.   // Nuke 0118: Delete run.exe: D7 c: k0 ?- y0 B" m. z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 H$ j% \+ K" A$ b2 d: ?" r, R- p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' N% \; Q! k# K7 U" S* F
  526.   if(!ReadCfgFile("Config.ini"))8 O1 W5 }* M* }# T! ^
  527.   {" d% D8 ?9 f; m& J7 T7 A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 s* S8 f9 V' ?9 L. P! t
  529.     return TRUE;
    $ E$ _" S( m9 J" I
  530.   }
    # x0 R( A2 W9 A$ Y6 X/ D: J8 x; K
  531.   HANDLE mutex;
    : d: O. K7 W9 S! x3 B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 h, n; f% S; A9 \2 @
  533.   {
    5 A$ q% h; t5 Z; c, E5 e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % {3 p8 z" y  v2 N% l% s3 _
  535.     {2 D+ {, l- c  f
  536.       CloseHandle(mutex);/ g1 q$ W6 d4 b  U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" |! z, }% t( H3 f8 M9 K' x
  538.       return TRUE;9 }# v  S1 C3 ~! h
  539.     }
    6 c+ t: t5 ^% ~! t  x+ U" y
  540.   }  9 g) K! @. }$ q. L( t2 e
  541.   CloseHandle(mutex);+ I% \+ e9 q/ I4 y( Y; ^% S* d
  542. 4 r- v! g2 L5 R, o, Q9 r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 F& e" ~* Y6 L0 a8 g
  544. ) y6 _& `$ ]; h: s! m( ^9 e
  545.         AfxEnableControlContainer();
    4 n1 Y# j- N7 _. ?' W+ R0 q% @0 ^

  546. 1 I( K6 f/ }# v1 F
  547.   bCanUpdate=FALSE;" B* j" I1 x- v0 w8 U
  548.   dwStartUpSteps=1;* f5 M6 c8 X: c! {4 Z6 K: f
  549.   dwProgramState=AP_NOTHING;9 j0 |. w, y% N3 d

  550. % N' D: J# r& u9 Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) B4 b8 H$ T9 }
  552. . ~4 K: c/ J; j% X" M6 g' p# k6 z
  553.         // Standard initialization( t3 j  w  b8 M. w
  554.         // If you are not using these features and wish to reduce the size) x: D; p' x- j% B2 d. X) {5 ]
  555.         //  of your final executable, you should remove from the following
    4 |9 @( x' h" d
  556.         //  the specific initialization routines you do not need.
    " w0 M- v# p: j( y& D' r9 E

  557. 4 H' r1 H6 \+ c! D
  558. #ifdef _AFXDLL
    ! l) N4 Y  r, [4 h4 m
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 \6 H. u, r0 p6 y/ I) M6 w5 ~
  560. #else
      C8 m3 L- J$ n( P0 g2 d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: O* M1 q% ?; |; n) @
  562. #endif
    0 r7 f' Q" f9 |( e3 b9 F
  563. 7 {9 x2 c3 L  _) b% q  Z( X, O
  564.   dlg=new CRevAppDlg;
    " j! E+ W6 n8 w
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , p; I, }8 ^6 r/ }+ V9 P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ @9 c4 T0 [& N; _0 ]( D
  567.   m_pMainWnd=dlg;
    9 s$ [  X7 a" E+ b! Q' {% K6 B! l

  568. 8 }0 \) K: }$ y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 {- w" F$ C8 {2 N& S4 ], E& }
  570. 9 P7 `$ r+ {1 j* q1 J  n
  571. //  GdiplusStartupInput gdiplusStartupInput;( h8 X+ {# c# l+ E6 R3 g5 m% h0 r9 u/ k
  572. //  ULONG_PTR gdiplusToken;/ F2 e$ l  J' u; S: H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    9 e2 |6 X1 X! n

  574. 1 T* N4 d8 m- Q: _' d  B" Q
  575. //        CRevAppDlg dlg;
    7 U* Y: Z  A( F, {, Q
  576. //        int nResponse = dlg.DoModal();. U) K( Y. g% u0 F# T4 E
  577. //        if (nResponse == IDOK)
    , [0 D. C, ^! S% g8 H8 ]' ~
  578. //        {
    - W! F$ C! U. p4 z7 R
  579. //                // TODO: Place code here to handle when the dialog is& N% t6 L" a3 G1 l% {  D
  580. //                //  dismissed with OK0 A1 V) ]1 j: t/ x( A
  581. //        }4 K( N4 F4 L4 Z- {$ l3 N
  582. //        else if (nResponse == IDCANCEL)
    . r' s3 t; R. R( z+ y
  583. //        {
    : w$ A( g2 s0 t4 c1 j# W1 u  K* g
  584. //                // TODO: Place code here to handle when the dialog is7 d" n: N: [  @' G& \0 ~3 p1 d
  585. //                //  dismissed with Cancel
    , n" h9 Q! J5 \" Z* M6 w: ~7 T
  586. //        }
    ( v, r* C; r- N8 Y' l% y7 g6 H
  587.   v' g6 c  }/ @/ l, p3 K* {
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 _# o0 @1 C9 Q5 V
  589.         //  application, rather than start the application's message pump.2 r; ?) z7 i4 b! G0 X
  590.         return TRUE;
    % ^$ v0 K5 F! Q( i/ `% I4 Q
  591. }
    ! \& |4 k0 W5 \& _) v8 L
  592. / Z5 P% ^# \7 E, U& z; r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 ]& H. T% e4 `% P  J/ ^6 I0 x
  594. {6 @7 N& X% z) i* g2 o0 y
  595.   int i;( |# ^8 ]+ C: B5 S' R0 e% b) U( o* V
  596.   char *szRet;
    # q) s! e6 t8 J' @" R1 k' @
  597. 0 w8 H+ S$ o+ v' ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }( T3 y$ y, x' ]
  599.   if(sztoken): b3 P1 i0 k5 ?: @+ P
  600.   {
    ( v% p% r( W" Q) G
  601.     szRet=&sztoken[itoken];
    - i6 Y+ E4 W: r9 w- `) }
  602.     while(sztoken[itoken])8 I( j. }- O4 K' f
  603.     {! ?# h% r' ]- P5 e. |0 }: B  D' u
  604.       for(i=0;i<(int)strlen(token);i++)* o. X) u  `; w0 O- A$ H
  605.       {& F& R) `% H/ U" H5 I3 ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), \. r/ s5 v7 K8 k; D6 Y" e
  607.         {
    5 l6 v* b8 a1 e% i0 O
  608.           sztoken[itoken++]=0;$ D& g1 l; E- s1 l* S3 J( k. z
  609.           sztoken[itoken++]=0;
    0 M, S: Q5 E) m* [
  610.           return szRet;
    9 |; l2 y6 ~4 e- R1 Y3 J- ~$ c
  611.         }: z3 l$ D7 ?# i0 }+ P
  612.       }
    & j: q1 {8 m6 z4 i% {* Z
  613.       itoken++;
    1 L+ ?) j! k' _9 G  z6 k  z
  614.     }: c  N) q9 w2 P
  615.   }
      ~) s' b5 Z# Q0 n
  616.   return NULL;
    + v' L0 k* E! {* M) w
  617. }
    & v( T" G! H' l/ [4 M) H6 I, g
  618. , ^2 M8 O( h: p
  619. void ProcessProc(long Total,long Current)! D/ Z$ C: z+ m( y
  620. {
    3 s3 {: P/ R5 J" U- {
  621.         MSG msg;
    ! h5 k  g0 b' T2 m7 D, t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);! w1 ]  }" a- ]0 T6 e, z* F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + j: C0 y; }0 R; u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 ^5 Z6 b  Z# a4 ]5 ]
  625.         {  ?* m+ X: {" p. j' a2 X
  626.                 if(!GetMessage(&msg,NULL,0,0)); J% q" U! Z( G& X" c) H2 C$ }- S
  627.                 {
    ' ^& O, Q( f: l
  628.                         return;
    ) t. d9 l! @+ E/ c6 W$ y5 f
  629.                 }) x: m8 C8 T' |
  630.                 TranslateMessage(&msg);
    - r$ {, g) A% N, h* i4 s
  631.                 DispatchMessage(&msg);
    ( O* r0 B3 P- d: c
  632.         }        & F. }$ r: v# w+ a6 A5 A+ Z/ N
  633. }
    $ k; o3 y! B$ f8 Y/ D) Q5 w

  634. 8 E1 I3 L6 \6 R8 H( i6 w8 C
  635. BOOL bFirstChar=TRUE;
    $ ?3 Q% C8 A6 n6 s5 j+ d/ @
  636. # [4 P+ A- J, [- Z. f4 z9 R5 a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 [1 z1 ]1 y7 E5 E7 u
  638. {$ t" z# ^7 l5 {5 O) @
  639.         // TODO: Add your specialized code here and/or call the base class
    & Z7 i0 ?7 B& P9 A) D" T5 ~
  640.   switch(dwProgramState)
    + [/ ]7 R/ Q/ r7 M" P. `6 `1 j( ~
  641.   {
    , Z1 c6 O% M5 |: j& P. r5 W
  642.   case AP_NOTHING:
    0 P5 J8 E+ Z8 U! f: p/ H
  643.     switch(dwStartUpSteps)6 b5 J, k) w, q$ v7 `( j+ S) a
  644.     {; V( U) z; A: e1 S+ O
  645.     case 1:
    0 X( I7 ^4 @' `# v
  646.       {
    / w. }2 g% `+ r) G
  647.         int i;
    . w" P6 z8 Z6 x3 p+ _) m
  648.         CDC *pCDC=dlg->GetDC();/ x! f: N0 J) ^, G
  649.         HDC hdcwnd=pCDC->m_hDC;% j) F1 u7 A5 n- c4 N) x0 D& K7 O
  650. //        Graphics graphics(hdcwnd);
    ; S# u0 u* V/ @( v, U  Y2 r3 a6 {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . R7 E2 Z$ N8 f# C6 ]
  652. //        INT iWidth=bitmap.GetWidth();
    7 L$ P/ w8 ~& K
  653. //        INT iHeight=bitmap.GetHeight();
    ( d+ ^* v0 @$ h) c  a- |
  654. //        Color color,colorTemp;
    ; B: V/ b& ]- V  `9 i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): `3 U# A7 J0 g8 C+ C: O
  656. //        {, V8 B7 O: f3 x- X0 {# Q, e9 L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; M, ~3 {9 _* W  X# {
  658. //          {
    2 v% U0 v" m0 P6 Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. x* Y. a& H) F% r0 X% V
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 V0 W$ N6 g. z# t: T* y* B0 Z
  661. //              (BYTE)(255*iColumn/iWidth)," j, U3 f. z- ?% m, O
  662. //              color.GetRed(),0 M) w% w8 o1 X5 L$ {7 l
  663. //              color.GetGreen(),
    " L$ P8 C4 s& j! G) Q
  664. //              color.GetBlue()));
      k8 B* `& x) q% X* k" K. ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) X+ v/ `) z! {" }1 {; x
  666. //          }
    3 o( l7 v+ X1 V  m" G
  667. //        }
    & Q. }% M6 C+ E" g
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# W7 u. X& U. j: f- J# t  V! x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 i8 Q9 Q5 g3 Y% m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 [2 R5 U8 u2 [/ S7 j# a& h- N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) e3 U+ A  h' ^+ R. u+ g6 y
  672.         for(i=0;i<240;i+=8)
    - i+ C5 T  R! ?! x" v" W; K, z
  673.         {
      N4 R" B, F& w, W9 N% |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 N' t+ X8 I% m. _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # Y+ ]$ w% G8 a. D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" t7 d. k3 x8 N/ |# i
  677.           Sleep(33);
    / `2 U  z8 K0 X( R# c  d8 S9 _' v9 H
  678.         }( F/ E5 C9 T( G, N2 c0 u9 W2 W
  679.         Sleep(1000);
    ; q/ i/ H1 a1 v/ [
  680.         for(i=240;i>0;i-=8)9 O6 I% P" N, l8 q
  681.         {
    $ [5 }& B2 v3 L  _. S, y1 a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - n1 W' V# C& f# v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  P- B8 c) a$ t* j# \/ Z9 q- T- i) k* o
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # g  m$ b; M6 ?
  685.           Sleep(33);  R' z. ~' N0 P: G) i4 e
  686.         }
    1 K( g7 e. G8 W( R' e2 x" B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! ~$ h0 D; p& Q) D, ~' M7 p& h
  688.         dlg->ReleaseDC(pCDC);
    $ k. y8 f8 J  N3 s) b: p4 P3 o
  689.         DeleteDC(hdctar);
    * T( ]' G# n+ }1 s
  690.         DeleteDC(hdcsrc);/ p0 S. H  O: U7 R/ r# Q$ e
  691.         DeleteDC(hdcorg);
    7 t+ ^. _, h& e8 J' c0 K$ i; z
  692.       }# E6 x! {3 j% F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " d8 }  C, w  _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 x* m- F* X2 l# N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 m. P4 }. g& @  P! L0 _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, \- I: w1 d2 I( h9 f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 c" y( n/ ?$ J# p2 \9 Y
  698.       if(!Dn.Connected())
      ^+ v! C, r% g' W. r
  699.       {: G( t5 W/ T9 _) q2 `$ ~6 l; E" Q
  700.         dwTotalFiles=1;3 r  M3 K+ v( t1 {  r
  701.         dwDownLoaded=0;2 X7 M! r8 `) v$ I& c% o$ B
  702.         bSilentStep=TRUE;1 n7 y9 O. m0 n+ d
  703.         bCompressed=FALSE;
    0 \* i4 h* Y8 g1 _8 ]8 S* u4 m" @
  704.         strExtLocal.Empty();
    9 t  ~7 C. t9 X9 D
  705.         strFullName="readme.txt";
    1 E1 o1 O) z2 w, m+ F
  706.         dwProgramState=AP_CONNECT;
    ( F' O1 P- T2 h% F) G2 y) o
  707.       }
    ' e/ F; r/ i; X9 U% |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - Q! }: B8 w0 z
  709.       dwStartUpSteps=2;
    % d9 @9 B5 G* Q/ r9 @4 Y7 U  W8 ]
  710.       break;4 u" K0 C: a5 m, f1 Y4 c) E/ O
  711.     case 2:
    8 H1 n% n7 ^  d
  712.       {
    # d/ j. v5 [4 f7 r
  713.         int iEOF;
    0 E* J$ n* ?0 \/ d$ ]
  714.         FILE *fp;
    3 |. x  F* ~: v
  715.         char szString[512];. H2 t' R& K5 H( k* d' ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! O/ I7 ]* N. q; K) c
  717.         if(fp)
    - `( \5 {) P. b( I  [
  718.         {' `4 @- G- ~+ r6 D$ _& i' C# y% |# M
  719.           do5 Z- E# x8 B' W/ ]# d; e: B
  720.           {
    9 B- }8 s; v9 K$ w- e9 m" f
  721.             iEOF=fscanf(fp,"%s",szString);& ]" D1 L. Z5 \: v
  722.             if(strlen(szString))6 p, U& T& G& u, i! x
  723.             {
    , B0 f* s- P) l4 X
  724.               if(bFirstChar)$ U3 _$ T; d0 K4 P8 i5 o
  725.               {
    4 |% I  x3 I8 i) Q% B, D2 d( v5 ~
  726.                 bFirstChar=FALSE;
    * N0 r( t4 n* l) a
  727.                 bConnectIsBig5=FALSE;
    ' ]7 w& p( ~5 k7 Z3 n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 b) q; T6 }  s5 ~
  729.               }' T% X4 F6 W# v7 k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + J7 t3 o' P, V7 |4 Y6 ]# h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    4 |" w+ I. m$ w0 r
  732.               dlg->m_ListText.AddString(szString);
    ( F# R/ }% p/ ~$ ?& G6 h2 v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  X8 y; S2 a1 C6 M
  734.               *szString=0;7 L4 A- O1 N; j7 T/ }
  735.             }
    ( A/ J0 {& M- G1 ~- x: q
  736.           } while(iEOF!=EOF);* u# H4 ]& q+ l4 ?" ?' m4 Y7 k
  737.           fclose(fp);
    , F' l& p/ n- K  Z' \' ~$ L, y
  738.           unlink(".\\DownLoad\\readme.txt");
    8 a' G$ l  G+ ~  E! S2 D/ ~( z" f9 ~
  739.           dwStartUpSteps=3;
    + p# e( J; t$ F( a9 q; d+ w: _) A
  740.         }7 W9 A4 D6 W  j8 T
  741.       }: e4 @$ |( ?9 M0 T& U
  742.       break;
    6 Q3 X0 p" @8 N8 j0 {9 m
  743.     case 3:
    ' @1 S5 S. ]9 i0 P5 I" z7 k
  744.       if(!Dn.Connected())9 V, q8 m) U: A
  745.       {
    ' `4 K) c/ m6 m( _  b/ y( a/ q; Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # v% C! Y! E+ j8 d. R6 X
  747.         dwTotalFiles=1;
      s# Y0 J  g8 D3 V3 d0 k
  748.         dwDownLoaded=0;
    4 X& ?7 h4 d3 t& K' u/ j
  749.         bSilentStep=TRUE;' V' ^% S5 B! m9 g5 _/ J6 J" p; X
  750.         bCompressed=FALSE;
    ' Q* H2 F  i* ?2 c/ u: m+ }
  751.         strExtLocal.Empty();
    6 z# K) S0 |' P
  752.         strFullName="checkversion.txt";' M+ B( ?( r6 Y! a* a( r: Z
  753.         dwProgramState=AP_CONNECT;
    " C0 U& Q3 o! p! F- F! U
  754.       }
    - k4 m4 ]1 M: G/ z6 F; I9 a
  755.       dwStartUpSteps=4;
    2 U9 D3 X  u, q1 I7 n; g
  756.       break;
    7 f) B; {: P, Q3 {" v: i" Q7 y% [
  757.     case 4:8 g  q5 U9 u* z8 H
  758.       {
    , h. V2 ^, Z; C2 {+ V3 {
  759.         FILE *fp;
    7 o6 ^; m& `, g6 D1 \; m
  760.         char szString1[128];$ Y  O' r% W* N
  761.         char szString2[128];2 ], l9 S& X4 {( Q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 |9 @. J  [6 H) |7 p+ F
  763.         if(fp)
    ' m( m- V8 Y) \9 M" {, c
  764.         {
    % P! g# P9 F% y3 u( x
  765.           fscanf(fp,"%s",szString1);! K3 g5 o) O- T3 K# r& s. K
  766.           fclose(fp);
    6 o; `" Z. u' z! l) i# A7 W
  767.           fCheckVersion=atof(szString1);5 E/ f; @) O8 G
  768.           fp=fopen(".\\checkversion.dat","r");
    ; ?' b& D4 r  s/ E3 l6 ^0 V
  769.           if(fp)0 R0 r$ L) R2 u9 I( Z1 @
  770.           {) k6 |8 C( |2 V, M7 l
  771.             fscanf(fp,"%s",szString2);
    + r+ \0 Z% J* M, k& P
  772.             fclose(fp);3 i8 V. ?* v  {' x+ \" l( {
  773.             if(atof(szString1)!=atof(szString2))
    ) o* W% x$ G  x; i
  774.             {
    3 f+ Y3 {5 W& u! E* d/ ~4 u
  775.               if(!Dn.Connected())
    2 S5 A# h% M. h- n& [7 w- Z
  776.               {1 F+ N1 Z0 W0 O* ~% D# K
  777.                 bFirstUpdate=TRUE;5 p0 S( S7 l3 q, d
  778.                 dwTotalFiles=1;
    " a! l8 D5 D" s4 j
  779.                 dwDownLoaded=0;
    0 z3 ^) m5 \8 [1 x3 a
  780.                 bSilentStep=FALSE;! C$ @# B0 V, Y- x6 K3 Y* {. K  F
  781.                 bCompressed=TRUE;- A' k- A! |# i& i* @$ f% u' u( A. J
  782.                 strExtLocal=".\\DownLoad\";
    ; k7 I- r: i' P8 i+ R9 B
  783.                 strFullName="update.txt";
    * A# V6 d* R/ o5 C: z
  784.                 dwProgramState=AP_CONNECT;* U- n7 a- j6 }# M( r* u4 S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  `) r3 v; y; i, F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# s! P9 k+ d$ ?; w( B# q' z3 O! t1 V- \
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, o. x9 y9 e; h; F' b* J" Y# h( _) `
  788. ; t, g8 E' [# p% Y* a" O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) m6 G; N8 |0 V6 A2 _
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * E9 b/ D+ c# M+ m9 x5 L8 U
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    + k  }7 b$ s" ^6 q* u: \( T+ i
  792.                 {
    7 t/ A$ }- x% l& P7 H, ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 Y( T5 T. ]  Q; m0 g9 k' s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % k6 p* S. C& b: a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 g( I2 z3 Q( U1 ]8 |; a. t$ J/ {
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) c/ d* b$ h3 ]
  797.   G% Q, o0 ?/ K7 m' N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; F8 X4 C; A: r, C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; g( d8 z( ^% v9 D3 k* n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # U1 ]( o4 k  {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! H! Y/ n8 q4 q. ?
  802.                 }
    8 J( v0 _( F6 r8 i( R, O- r
  803.                 dwStartUpSteps=5;
    - w/ h5 i" b- Z  k2 |7 X# K5 f" f: X
  804.               }
    9 c( a$ l/ Y! S: z+ d3 {
  805.             }/ k" A4 E( p# r* b3 G+ ]
  806.             else
    8 L1 h5 H+ H+ O% u2 z
  807.             {) g) Q) \" t) {$ m6 f" }0 p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . z& [3 F- C: `; u$ ^1 T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- R! ]/ Z1 v7 t' v; ~  C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* j/ ?3 |- [, C  w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; r" V4 H6 V4 d) q: f9 Q7 y

  812. ' H+ h2 g3 i, {$ R; E+ c0 _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; L4 h5 c) U! U7 R4 t
  814.               dwStartUpSteps=99;3 M, r9 I; e  }! F' \0 ?
  815.               bFinishUpdated=TRUE;0 Q" X& ~5 G+ \! S- e5 r7 \( @2 A% c
  816.               bCanUpdate=TRUE;/ L% \3 k3 t" y7 M: a
  817.             }
    - e1 x2 y5 m4 l0 x2 i0 V) k
  818.           }
    ( |! t* j: a! C# r% ]4 ^
  819.           else
    ! F  F5 I% W- l1 X  _( |  t8 `
  820.           {, R3 O  Q0 t+ \. C
  821.             if(!Dn.Connected())6 K8 H9 m' J8 d" q# W, v
  822.             {8 C+ c/ u) s' v) W- W
  823.               bFirstUpdate=TRUE;( Z/ ~& i$ ^% }: [6 o. G) [
  824.               dwTotalFiles=1;
    2 \% j# B2 X) r: v
  825.               dwDownLoaded=0;
    * h8 T; o( ~) u# D" b& Y: P
  826.               bSilentStep=FALSE;
    7 E6 z7 N! T& u" i4 \
  827.               bCompressed=TRUE;
    2 F+ C# `+ k# Q) f- o4 ~
  828.               strExtLocal=".\\DownLoad\";
    + z/ ~# `7 J0 i3 f0 s' }
  829.               strFullName="update.txt";
    * d4 C2 K8 W6 c  ]4 m9 T
  830.               dwProgramState=AP_CONNECT;
    * k) x3 Y, C3 d5 ^  o$ k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 H  M! H2 F( t( ]3 a! Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : u0 Y% W/ R8 k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: S; ^. Z/ n- X4 {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " F" l' ?) x, G) z  q, m- D
  835.               unlink(".\\DownLoad\\checkversion.txt");) W/ L( ^3 N3 y) P, O4 G5 y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ' ]) z/ Y9 L  c
  837.               {$ I8 a4 X) _9 k9 @2 ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      F+ s+ s) |' ?3 l% H) e
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 L1 \8 c/ x+ |1 u7 C. Z5 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# ?2 K4 S- C  w: W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* S  Z( |; x% {% J
  842.                 3 W& z  {  G! G3 H! r1 A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 s+ M8 m/ ~0 D( E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 n/ l, o% a9 o1 t' Y0 S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / K0 W' ?4 C8 [9 x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % g# Q& \7 ^4 A! V
  847.               }* \/ E& z3 x* D* q0 ]
  848.               dwStartUpSteps=5;
    4 \( i  o: [( @& _# T
  849.             }5 Y- t5 h7 D! r+ }/ t% u& m
  850.           }1 A, s5 G2 ]5 Q/ I% g4 j
  851.         }
    # j( K+ d* i3 q* o" b* L7 S) k
  852.         else- i3 N$ Y4 s" r: E; w2 A
  853.         {
    5 `7 B* S0 N! F4 `
  854.           dwStartUpSteps=3;/ r$ n6 _3 O6 _) V( z
  855.         }
    # Z& H) w2 U9 N8 E
  856.       }3 H! |+ h" j# E% Y: Z' H
  857.       break;
    % ~9 e1 e; m' U' k2 [
  858.     case 5:- m! [7 b! G5 x! Y) @2 f7 I
  859.       {  f0 d  R$ _' X8 |/ u; O6 f# d0 {  q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 Q* {, F% a: h, H, U. q
  861.         {
    " d6 M) u4 q* _- x8 Q4 d
  862.           int opt_overwrite=1;9 _" S: P7 N$ O7 V; K* }, @0 p
  863.           int opt_do_extract_withoutpath=0;- u% y( _- `& K: _2 k# ?  b- v
  864.           unzFile uf=NULL;
    7 r; X# ]3 J, O* x$ v
  865. ; z8 F: w6 o% w9 `) p2 L2 e
  866.           uf=unzOpen("Wsa.zip");& w6 C- S3 S# J2 L: o7 }5 |  q
  867.           if(uf)
    3 U2 {% E0 z) o/ }
  868.           {
      N! L" H" y1 k6 ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 D3 j/ i+ B8 k! ?1 r% F- K( C
  870.             unzClose(uf);
    : x+ u( r, C/ Z7 C( n1 h* S  G  v
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , l7 ]% W( b  e) m" b0 g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . M8 b" d- E4 V5 O& I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' y9 H  h- t$ X8 l" N
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! C/ v$ r7 z; }4 ~
  875.           }
    ; y  M5 _# a% _0 _* _+ k
  876.           DeleteFile("Wsa.zip" );
    , a1 ]3 L5 ]) k6 p8 M
  877.         }
    2 V3 Z2 N( o) Z* l8 \

  878. - u% B- f7 l6 Q2 _. J$ y
  879.         if(CheckLocalVersion())- u% }7 ]- q7 o' z4 C  D. U+ P
  880.         {( e5 u5 U* \' w6 }, \$ N! A9 i6 A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ {9 m. H9 }9 A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    7 t4 b# x& C% _0 d% p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    & ~& X* }% k5 j$ n! G3 ~8 Q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 @, v  `3 q  S; @, u
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ( k, ?' h# ]" E
  886.           dwStartUpSteps=99;6 p) D" K4 G" D2 p
  887.         }
    / S0 ^+ X, s* l+ n0 C$ o! z+ a/ I
  888.         else; L% l9 U# V/ K  J( o
  889.         {1 ^) C" {5 T$ I1 r
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 v! L5 i1 e- x
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 F  e. q& O) m( l  O# R
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: e$ P" `( e* R. P( v

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

7 I! z' b6 G% Y/ z/ L
( C) X. |2 N! E7 A

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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客服返回頂部