CSUpdate.exe源代码

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

: j+ l5 b: ~; z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 ~4 g9 g' O: \6 _; l/ u. z
  2. //
    . Z) |/ o% ?! E

  3. 8 k3 P3 m, v2 f. ]1 \
  4. #include "stdafx.h"0 x9 }+ C# T% K2 b$ f! r
  5. / O  v; R$ z7 s( A8 r6 m  b0 e
  6. //#define UNICODE
    1 S5 h% I, N" G5 ^1 n
  7. //#include <gdiplus.h>$ [# N' {7 [. q/ s
  8. //using namespace Gdiplus;. \+ t1 [4 ~! q( w) \1 Q

  9. ) y0 Y7 z& N: u( ~+ z2 p7 G% @
  10. #include "RevApp.h"
    0 B- w5 C! Z! u, Z! w0 P( [
  11. #include "RevAppDlg.h"% x; Q7 y! }; C- W$ g* T7 A3 U) k

  12. / L( U, Z' w8 Z
  13. #pragma warning(disable:4786)/ W4 H! ?, {$ }
  14. #include <map>
    % f5 C6 r* @: C. _
  15. #include <list>" O# @/ K# b0 H+ W9 r; X& {& e$ ~
  16. #include <direct.h>
    $ G  s. k# k! M: v% H4 S2 ?3 i

  17. : B* g, N" A& w: `2 V0 M7 w5 U
  18. #ifdef _DEBUG9 t/ J/ Z5 v: Y4 L$ {" j0 K# U
  19. #define new DEBUG_NEW& ~4 W) [0 z! F5 X' s
  20. #undef THIS_FILE8 h) P( W3 X; k
  21. static char THIS_FILE[] = __FILE__;% U+ A! j% q' c$ d
  22. #endif6 i; Q+ c+ U2 c. _) U, w$ k
  23. #include "SkinResDef.h"
    1 Z' R* C8 S# h' Y7 O( ~( H
  24. #include "ChangeBG.h"
    ' q$ U5 P2 z- M: M, @: B, R
  25. #include "AFXINET.H"8 m3 t$ j0 k0 b" Y
  26. % s7 _3 w. G( w9 j5 c5 c& k
  27. #define TRADITIONAL_CHINESE 00 J, l" a3 ^, w" m6 R5 U. A
  28. #define SIMPLIFY_CHINESE 1* x/ V7 ^" a/ o/ t8 F
  29. #define ENGLISH 2, o) @; |0 Y+ P+ l& T3 `
  30. int m_iLanguage = ENGLISH;
    - l  a1 k9 s( D0 D; c
  31. /////////////////////////////////////////////////////////////////////////////1 a+ t) ?5 \0 \# @5 s/ l/ y
  32. // CRevAppApp2 s! D6 A# ?1 q( u
  33. 9 {; _" z4 l+ B$ E4 L6 R( e! `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " F8 r( _$ [1 U4 ?* U
  35.         //{{AFX_MSG_MAP(CRevAppApp)& b$ j: n4 Q& K6 K6 U; y! J0 _; V
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& j1 C7 b$ u5 ]7 S) g
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" @% J/ K" O1 T" ?+ m
  38.         //}}AFX_MSG5 e9 C2 Q" c, O" T; H
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 L* l" ]; a  H# y7 E( P
  40. END_MESSAGE_MAP()% l6 m- N% i# m( ?

  41. ! b6 Q+ [& C: w
  42. /////////////////////////////////////////////////////////////////////////////4 E) @1 d* Z* X1 m! F& _+ e6 _- G
  43. // CRevAppApp construction
    7 u" b6 z. c+ D8 ^; u+ r+ G

  44. 2 p& V% e1 Y6 h  F1 Q/ N
  45. CRevAppApp::CRevAppApp()# `& H8 L$ P% w* }1 O
  46. {
    6 W" X+ `/ c8 T: Q1 O
  47.         // TODO: add construction code here,. D8 x2 i1 ^$ ]8 P) c' V
  48.         // Place all significant initialization in InitInstance
    , i- ^, a' C8 K; e2 ^" ^/ }
  49.   bDisplayIsBig5=FALSE;
    # z, N" {3 \; ~: _. r
  50.   bRestartUpdater=FALSE;/ P$ j# E' d  d* m; G2 [9 y3 }
  51.   bFinishUpdated=FALSE;7 \* j. X9 }0 ~2 |8 V- ^9 X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , \/ }4 X- F6 _1 g
  53.   InitChangeDataBig52GBKS();3 w8 s5 j2 @! ^! A
  54.   InitChangeDataGBKS2Big5();
    : t. s/ d7 M5 X4 P* S  q
  55.         //
    8 b7 Z: F! ~+ r1 i/ G
  56.         bClickRunExe = FALSE;. }3 E/ t$ s- q
  57.         //
    5 t& L  [1 J0 T: `8 s  B
  58. }( {+ D( D1 F" O, Y% a* u3 N
  59. % ]8 e: R+ |( n5 t  @7 @
  60. CRevAppApp::~CRevAppApp()
    ! c$ t- P* s* }/ a
  61. {( w8 b0 h* V" [( |
  62.         // TODO: add construction code here,
    9 G! k7 ?1 A4 F8 ?
  63.         // Place all significant initialization in InitInstance
    : y( C9 b3 \) e! O" b
  64.   EndChangeData();8 l  I! j+ Q# J# r$ [% t
  65. }* `' {+ U/ S' I# z* h; Z# f

  66. % P$ C% ]3 s" P  B: M
  67. /////////////////////////////////////////////////////////////////////////////& N3 C; m2 S1 D  a, F/ x
  68. // The one and only CRevAppApp object6 h# u- k% T0 G9 v7 L5 w8 h/ x$ r
  69. ' |6 w6 S+ r; l
  70. CRevAppApp theApp;
    ! z2 O3 R9 {- ^, f
  71. 3 Z; w7 H0 l" c$ P" O& N( Q! r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 Q. I  c$ \/ k# p; f9 v& o" b
  73. {
    % p/ d( K! p8 e" q2 A3 F/ B: Z: |
  74.   int iEOF=0;4 r7 V5 A- p8 {0 y. q0 U
  75.   char szTempName[MAX_PATH];
    $ F6 e$ @4 O+ {& [1 h( q0 U
  76.   *szFileName=0;
    $ P# |. [! p/ S6 o; v: q5 |
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - [. M$ V# z! ?5 S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 f: |0 I% d4 C* T" Q
  79.   {
    & i* L5 e4 }& K/ O5 D( w& j
  80.     strcpy(szFileName,&szTempName[1]);
    $ v7 u/ A: q5 Y9 R) F  {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 g- \% `2 P! }. x; w# x
  82.     {3 C3 V  U8 C0 B
  83.       iEOF=fscanf(fp,"%s",szTempName);5 Y& K( L1 @( ^8 C4 T0 m
  84.       strcat(szFileName," ");
    ! J6 m" m* W0 e7 q$ X% i9 [# [
  85.       strcat(szFileName,szTempName);
    8 }  l$ P8 g* k# V
  86.     }
    0 j0 w* X' _  N) b; v
  87.     if(strlen(szFileName)>=1)# U- _, `- `, {
  88.     {
    4 |" V/ ]$ y+ u2 I4 P
  89.       szFileName[strlen(szFileName)-1]=0;2 k' _  P' C  f+ {5 o9 a; d3 T, d
  90.     }
    ! K: m+ f; F/ U. N2 P7 l0 D7 d
  91.   }( w; c6 C4 l8 k; c( k! r
  92.   return szFileName;
    * B5 a8 C8 I7 G! I
  93. }3 `7 e( j' ?! B: B
  94. / w$ C2 |# B. }* F+ l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 V9 B4 d( H. O2 p9 D' F
  96. {- ?; q2 `3 T5 A) `- V8 _3 M1 {9 R
  97.   FILE *fp;
    ( }: Y& E, w% A# U3 u
  98.   char *key=NULL;" e4 V& S7 P. L( |" D# K
  99.   char version[MAX_PATH];
    2 s( ?5 H; @2 \& a7 o
  100.   LPUPDATEFILE file,olds;
    0 \. w3 L8 S2 t- u! N% q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : P% g+ `: @! X# f, w

  102. 4 H* ?5 H# x9 b1 o  O, r2 o
  103.   UpdateList.clear();" o; d3 N- u5 G" S! d
  104.   UpdateFile.clear();+ h4 n8 g+ y" h* b( A: ~
  105.   if(GetFileAttributes(filename)==-1) return false;1 R8 c" }: [- W; g2 {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # a; O4 n  g! M& \& W# @# f
  107.   fscanf(fp,"%s",version);9 A; C2 H) F  @8 Z0 Z# \% ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , Q+ ~: u5 B. v0 {6 g7 a
  109.   while(fscanf(fp,"%s",version)!=EOF)" h; Q* n$ r/ z
  110.   {
    : o% i. p( V4 E: \+ B' j8 R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( K$ v; `5 I/ ?6 p
  112.     fscanf(fp,"%s",file->path);
    7 C6 Y/ h0 `' D4 _( Q# k
  113.     ReadFileNames(fp,file->file);: P) Q" x; n8 r, c. i! V0 f, d
  114.     strcpy(file->full,".");& V' l  s" M. o1 k1 ?( W/ G
  115.     strcat(file->full,file->path);/ L& ~& \) ?$ p- h3 M- Z
  116.     strcat(file->full,file->file);& S' m6 }- a  d, W/ m+ r8 T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 g4 ^* T7 i" s7 B
  118.     {+ p8 b9 C+ I! [; z  t
  119.       file->vers=(float)atof(version);- x+ E) Z- |3 |- u6 e/ u
  120.       UpdateList.push_back(file->full);
      F8 i" X9 N7 Z- b, O( q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' c  Z9 X8 v$ i; Z7 B
  122.     }9 D+ Q5 Y! x1 j" B1 _7 ~( V
  123.     else
    + r2 E7 V$ D2 o4 i
  124.     {
    ; I2 Z* G+ J; j' ?/ V6 E
  125.       olds=(*p).second;6 j9 Z+ ?/ p4 o. g- z4 a
  126.       if(olds->vers<(float)atof(version))9 b, C6 N5 L. _1 U# T
  127.       {
    0 ~3 q- @! w% d. L) d/ f4 i6 B
  128.         olds->vers=(float)atof(version);
    " }1 O9 S, u! t% Y
  129.       }
    : a& o+ i4 T5 Z: h
  130.       free(file);: l  a3 `6 r4 Z# f- @! x+ |5 i( d
  131.     }
    ' ~6 t# B( J* l6 t2 ]" g
  132.   }
    - i1 q7 |* i9 x
  133.   fclose(fp);8 I( _& y/ k# |8 d
  134.   return true;
    2 f' Z) w9 R% `2 P/ L
  135. }2 W% |5 ~" Y' c- C% X, C% O; f* L- [: w
  136. 4 L6 m2 H) P5 j' w" ^: i& s2 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) ]+ e, A, h, d. R% Y  ]6 N
  138. {1 c% N& p6 h- h: l( O
  139.   TCHAR  szFull[MAX_PATH];
    & `* w3 b  F+ r1 h; [
  140.   TCHAR *token,*inter;& @& R: z9 }$ R: x
  141.   *szPath=0;
    ; V& y# o% k4 y
  142.   strcpy(szFull,szFullPath);
    * f! r% g7 K0 d7 U/ b" f" f
  143.   token=strtok(szFull,"\\/");' b3 R) k* l" i
  144.   inter=token;2 g- U+ w5 f$ H* Z+ O
  145.   while(token=strtok(NULL,"\\/"))0 l( \* }4 m3 D, I: T. B; }
  146.   {' Q0 l' O1 f  C  O# u
  147.     strcat(szPath,inter);. w, l6 P/ s/ M6 s
  148.     strcat(szPath,"\");
    ( B7 x5 t( R" q& B
  149.     inter=token;
    0 z! Y' `" G% W
  150.   }% h4 K+ z, p4 J7 J# t& E
  151.   return strlen(szPath);
      P7 k. K9 K# g0 `7 s5 B) q* D& k
  152. }& q0 m: Z+ V1 ?( Q; S3 D# n
  153. 3 P) G$ D2 ^3 R+ Q* [; R$ ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 W1 n; E3 l! A' e3 F
  155. {
    # \/ Z; {9 x9 z! i+ F- U% E$ a
  156.   DWORD attrib=GetFileAttributes(Target);: L6 m" o: ?0 P* y1 F! o9 S
  157.   if(attrib!=-1)* W& K0 m! \( {
  158.   {
      k* _: h) Q% ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : X0 g4 u$ K. k3 i- D" C: l( J
  160.     {
    % L  x  F# P6 h+ u6 [: T5 j8 w2 t0 A6 V9 c
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . A! z  G6 x; Y: Y9 C
  162.       SetFileAttributes(Target,attrib);( X  p$ \5 `* Q- H, ]' H/ D
  163.     }
    1 s& v- }5 V4 i" Z( ?
  164.   }
    8 b4 b$ a8 X: {: U& v
  165.   CopyFile(Source,Target,Erase);* A2 [! Q+ |. c
  166. }
    $ q* [, v1 |( i. V# J, J+ S
  167. . w. h( ~+ p  ~* E9 E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); _6 n; {" c$ I" J4 c* _
  169. {
    - Q# G+ O- J' K& [' {: @5 O
  170.      FILE *fp;8 l# d, m3 e  z' ?, ~
  171.      char  szBuffer[8192];
    ( h: _! H& a4 H6 N# E7 a
  172.   va_list  argptr;) q6 S& w% o% S' P- E, F
  173. 8 Z* m+ x+ x) o- j. D  h9 m
  174.         va_start(argptr,message);
    & `1 ~, W6 n: c5 p9 `. W* o
  175.         vsprintf(szBuffer,message,argptr);
    8 v2 w5 i- d, I4 E8 h2 r
  176.         va_end(argptr);
    + N' `) z3 n$ `4 O1 V
  177.   fp=fopen(FileName,"a");: x/ @4 y. n& v0 @6 v! E
  178.   if(fp)
    ( b1 a, z2 y; ?6 ]9 y
  179.   {" C& i7 w9 Z- }) n7 C6 p7 T6 H- L: y  ~
  180.     fprintf(fp,szBuffer);
    " n$ q/ R  |! g4 L* {8 M" v
  181.     fclose(fp);. `4 G3 y" P8 c' J, F( T! q0 ]
  182.           _flushall();. h2 {9 ^+ L. C% a% v# r' J( y2 I
  183.   }
    * s# J. G- C5 \
  184. }
    1 a& q0 I1 U/ A. T

  185. 4 C% e  ]) K7 S: v$ s% W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 C1 z; k6 m, v) @
  187. {2 K) F: N* l( b; U
  188.      FILE *fp;0 z4 L8 c7 g8 w1 s
  189.     DWORD  attrib;0 F$ \7 f4 n, z
  190.   attrib=GetFileAttributes(FileName);
    # {& g4 }0 l" L" B# j
  191.   if(attrib!=-1)3 [1 c, M8 q4 m; P
  192.   {1 \3 ?8 t7 _+ p! n# [) A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) U6 o- k9 @& O; n
  194.     if(!SetFileAttributes(FileName,attrib))/ U$ K" s4 f& |- t$ G* r
  195.     {1 E# j% p4 B- z$ o+ k
  196.       return FALSE;- a" q! F( r- }- K) |0 j
  197.     }
    ) q( L& E& @2 H- n  v( l
  198.   }
      h" L, B4 t2 |# g1 h! W+ Z# R
  199.   fp=fopen(FileName,"wb");+ J1 z* B6 M( T- R1 |8 h" d
  200.   if(fp)0 t2 U0 u  b" i% h% @& ]  A0 o
  201.   {5 l* K2 p% [% T5 A2 b4 p! Y  A
  202.     fclose(fp);
    , ^. m! y/ f2 s5 s
  203.   }
    / w% W+ x( d% G' |! r4 K6 L
  204.   return TRUE;; u2 T' d, e% P2 Y4 O
  205. }
    + K* z  Q! h! U# {
  206. 6 ]% l( B6 h" s1 L3 B' L; A6 n
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 e: H* K* C) k9 G
  208. {. i- x0 a$ n0 d, O# b* W' q
  209.   char filename[MAX_PATH];
    * o$ w" y: j  d& V0 M7 z3 w- P
  210.   LPUPDATEFILE file,olds;0 t% V2 r3 U/ S
  211.   std::map<int,CString>::iterator i;/ d5 P2 I, g, S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ W. U4 S% z; Y2 B7 x
  213.   std::list<CString>::iterator l;/ g! r2 {  W' O/ p$ I' ?

  214. / e  S. I$ m2 E; c# N  J, S: n
  215.   if(bFirstUpdate)/ ~/ Y. L9 A5 [1 k1 X/ A3 A' b% _
  216.   {
      W& J( h9 y. }! C0 ]0 I
  217.     dwCurrFile=0;; d& c# T$ U( C, E5 f2 f+ S9 G
  218.     bFirstUpdate=FALSE;; i, v  H0 o( l$ A( p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ z% v! X2 E* G2 d
  220.     {; r) `9 \3 A' g1 I, _1 `
  221.       dwTotalFiles=UpdateLocal.size();! Y3 l1 T7 v% m* H+ ~
  222.       dwDownLoaded=0;6 r, B3 c9 o5 g9 t+ f
  223.       bSilentStep=FALSE;
    1 X" {2 M7 H6 w7 `5 j8 i( Y
  224.       bCompressed=TRUE;
    : n! p  X* X5 R2 [- Y3 @
  225.       strExtLocal.Empty();
    1 ^* k8 B& u" Q- r
  226.       strFullName=(*i).second;: d; G1 q# ]. `$ O8 y8 C
  227.       dwProgramState=AP_CONNECT;& Q' c3 l6 D+ t/ J% k; H) L
  228.       return TRUE;
    1 h- [5 T# T1 _, r  d; a0 M. [, E. P
  229.     }
    ' G5 s- X! z5 K1 K, b6 I
  230.   }: _3 z8 g6 t" B+ X, c
  231.   else if(bRestartUpdater==FALSE)5 A- q3 O! y4 L( a9 I( q  L: K! x
  232.   {4 x# Z; A* s+ S: ~- W1 d: D. s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) z7 X1 o9 z/ r& F3 A+ G
  234.     {/ B# F3 I# f. o+ Q4 m) H# ^
  235.       file=(*p).second;
    6 _, W; u- R9 }  }# e- |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ @( y& ~" h: I: I* a+ H* g& f+ h: k
  237.       {) v5 a7 E/ W0 [( {3 h
  238.         olds=(*p).second;
    & ~. m4 L% R6 O7 I8 c2 Q' `+ g
  239.         olds->vers=file->vers;; @$ Z- z* ?0 z, b4 n2 J) F0 c3 q
  240.       }
    $ L$ W2 g+ ?, i- G$ i6 Z$ m- N
  241.       else8 l4 h9 l" M' l/ S
  242.       {
    ' W8 h3 u  y6 U5 d% {" K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: v7 R% K7 s' s5 F3 l3 c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # e  K/ _+ X& j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) g7 e6 t: k: {( f; _8 Q
  246.       }
    ; M! }. S8 \& S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 G! ?* F+ q  @( s: }
  248.       sprintf(filename,"(%s)",file->file);3 g0 w( d- E. [( I6 r" k' W3 M- D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# g+ T) }: T! L7 I
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( N& X2 E+ _& V/ u" W
  251.     }
    + [) G! g7 W5 F5 w0 w! L
  252.     dwCurrFile++;
    5 w* m$ M% f* B+ g3 T# S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - y4 n( i- H7 {; D1 g+ E" H
  254.     {
    % T6 `1 A8 O0 A
  255.       bSilentStep=FALSE;% R8 a$ h$ \% a: _$ Q  W
  256.       bCompressed=TRUE;
    0 }8 E  E$ Q/ N. i8 n- z* J
  257.       strExtLocal.Empty();
    + z( F* O/ t& G* y) |0 S0 f
  258.       strFullName=(*i).second;- \3 D# Y' E. W" f, ?$ I
  259.       dwProgramState=AP_CONNECT;+ H" ~7 y* E& \  X' D2 f% d
  260.       return TRUE;6 Q) ]* X1 n) h8 z5 D  `) O
  261.     }/ ^$ q2 B2 x3 y' Z
  262.     if(!bRestartUpdater)
    2 F  I; p* j% G3 v
  263.     {
    ) [) _8 C, Y' Y" t
  264.       int iCurrSize,iFileSize;
    ! j# M7 L$ a! d4 ]
  265.       iCurrSize=0;! i  ~8 ^9 a5 D* a: }
  266.       iFileSize=UpdateList2.size();- x) f4 r7 f# J( }: D+ ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , ^0 _7 }  f: U& u3 \" ?
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' `1 z: f$ S8 a# b4 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 C' T- n0 G% p: P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  b  W4 r" p6 k9 [* ~
  271.       Fclearf(".\\update.dat");
    6 n5 U0 ]9 \7 C; z; Q" s+ o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    / i# B4 J! y* u' G
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # R& A9 E! s  U7 G" @+ }
  274.       {
    , H* q8 H, q- J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) X9 D. C" A5 n: e5 ?8 H8 [
  276.         {
    * E2 m" H. W1 @2 F
  277.           file=(*p).second;
    4 b8 B' N; i7 q1 J2 M8 H5 Q
  278.           sprintf(filename,"(%s)",file->file);
    4 C" R8 W! w0 S; B; }3 r0 F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 R! i) V8 y7 v' Q+ @
  280.           iCurrSize++;* \- K! J9 p! r3 _2 `  `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % n2 E- P3 W3 m; b
  282.         }
    - ^, w; O3 U+ e2 j+ @
  283.       }
    , X  e" V& [1 H, x
  284.       unlink(".\\update.txt");
    ' B/ ]: q; p$ q+ o
  285.       unlink(".\\update.tmp");% w+ |2 D2 n0 N2 U+ b; F
  286.       Fclearf(".\\checkversion.dat");9 s$ |" S( X5 Y! M4 p# _, u) L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) @& R' {9 B: [1 p
  288.       if(UpdateLocal.size())6 O+ p3 v! T2 ~- l; V4 ~( v
  289.       {
    , v. J( a9 }: q! x, M
  290.         UpdateLocal.clear();
    6 B2 L/ f, h" P0 P! ~
  291.       }3 F7 P! ^0 P% t  z
  292.       if(UpdateFile3.size())
    $ V& @* p4 \4 g9 d7 d
  293.       {- ^* G3 ?+ S8 D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . ~2 I0 Y) [- R! s. E
  295.         {
    % J  U* S8 T5 L" i5 l$ C
  296.           file=(*p).second;
    ; B- h1 ^& Y) o8 i& {' Y
  297.           free(file);
    ' H- v1 }9 J6 q, f2 u0 J
  298.         }- w  D3 k$ r3 T4 B
  299.         UpdateFile3.clear();
    2 p% _7 X6 X. K( I9 r
  300.         UpdateList3.clear();  H; E- N1 V7 V8 Y
  301.       }" a6 t. p7 c' X' i1 [
  302.       if(UpdateFile2.size())
    8 R8 |8 E' c9 z2 W8 ?8 w
  303.       {
    * J. f3 C5 z  `  k: e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 J. r0 _, a: v% l' {
  305.         {8 u1 N2 D. a% w: ^7 ]
  306.           file=(*p).second;
    % |6 r8 J- ^8 g1 h4 b
  307.           free(file);9 g, m5 X) B2 F- U2 Q
  308.         }
    ! N$ J- a( M$ q& a4 t" `0 f+ x- N
  309.         UpdateFile2.clear();
    8 o7 Z( Z1 h4 q% j, h1 @
  310.         UpdateList2.clear();3 ?" w7 W# U8 O' r5 [
  311.       }
    % x" @( N, v7 C9 K' ^2 ?' M
  312.       if(UpdateFile1.size())( ]; l! Q! ^% d" }0 B$ ^% `6 w
  313.       {  e5 {1 n# k* O' u% f/ n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' v7 |8 J: Y  y8 U7 p* a" g* v
  315.         {: t2 Z' t8 `0 I2 p% k
  316.           file=(*p).second;
    " k3 q7 {1 ^" E- |( ]
  317.           free(file);
    " @- \* x4 j( N2 u" V' x/ O: U
  318.         }
    $ I0 \3 h  H( i) G# Z/ n
  319.         UpdateFile1.clear();% E$ l- t) H$ P* E' M
  320.         UpdateList1.clear();+ J9 D/ I) T4 B( ]* n$ S
  321.       }
    2 _) z0 R; Y5 f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      G: {$ d1 x% g% ?. a* {- @& C
  323.     }
    8 Q5 V) t( I+ p( s& u
  324.   }
    * V  t% a  t* P
  325.   return FALSE;; y4 z: @" S& ?1 W! }
  326. }
    , K+ @* b, Y; F" l' A! _: d# [2 H0 _

  327. : O4 A. r6 Z. t# o
  328. void CRevAppApp::ClearAll(void)
    9 [8 [7 I, o8 K9 Y, ]+ }& l+ R2 E' n
  329. {$ t7 O4 }! U" Z; T
  330.   LPUPDATEFILE file;
    2 r! J- x1 M' C. L( ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % m6 i0 ~. J' h3 |2 e$ C8 Z

  332. ; w" K9 V$ E* W+ L) V) N* @+ x
  333.   if(UpdateLocal.size())/ n4 p! B2 e4 ~5 k. m  f  n
  334.   {
    # F" d& D9 ]# o3 h1 p, H9 {
  335.     UpdateLocal.clear();
    4 r! H: E* S- m+ R( I. O' ?
  336.   }
    ) g: z/ l! \( O7 B
  337.   if(UpdateFile3.size())) e& K2 C. Y- V
  338.   {- x! _; s) F' W" j1 K) h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! j# T$ |, ]  j5 u- m
  340.     {
    " j. f- C: a2 ?, |3 C9 T
  341.       file=(*p).second;
    0 o) E7 j# |, x0 V
  342.       free(file);
    8 o0 p# l' n* |% K
  343.     }# R% D7 O6 g" c  L/ T
  344.     UpdateFile3.clear();
    ; ^6 X0 b+ P# k5 l  K
  345.     UpdateList3.clear();6 m$ A- r) a, P/ B( O
  346.   }' K+ S8 l! j- }
  347.   if(UpdateFile2.size())
    ' w; @8 k2 J- s# e. C  K! Q0 l
  348.   {
    4 B& o, k& J, n- x2 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 V! u" A/ A5 w1 I
  350.     {7 I' i! T/ H! F# {
  351.       file=(*p).second;* s/ W' f* A" G3 u# O
  352.       free(file);
    & [  @- `, u: X, {0 V
  353.     }
    3 x% T8 E% E. h+ q' S
  354.     UpdateFile2.clear();0 E% u( N! W% k5 s4 `% L
  355.     UpdateList2.clear();
    * @- `5 i/ C( d/ |, w! P6 g* [' `
  356.   }6 i( T3 M; a9 R  m" n# D
  357.   if(UpdateFile1.size())
    : j) U) h# x' T" i3 ]8 y
  358.   {
    2 F& o# r- R  G" K5 ~! u$ X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  f. B5 j0 Y$ e/ u' I& K
  360.     {
    " I* ^5 y5 {  k$ A
  361.       file=(*p).second;! u: B) @+ f+ Z; }: D+ y
  362.       free(file);3 L9 u/ u% {' p8 z7 y. n  ]+ n% Q+ S
  363.     }" R: A' J6 Y2 f9 e7 x; m& f" `
  364.     UpdateFile1.clear();2 ]: y9 I1 P4 [. x0 e. v
  365.     UpdateList1.clear();
      i) E; B8 B  v9 R$ r! h
  366.   }9 L# G; I  @* s( a/ n
  367. }  
    . r7 p( ?7 p  `* w" t* ~
  368.   
    / D8 `( n; E* ?$ ]; B0 O; ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , |; L$ W9 a2 \/ @
  370. {
    ) c3 c2 d  A$ s! ~! b9 y
  371.   int c;
    6 w0 g) k, U' h( H3 P
  372.   LPUPDATEFILE file1,file2;7 j% x3 ]& T8 N- m4 o! R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + A- A6 ?7 I8 h4 t% i$ S- v$ M7 e& v
  374.   std::list<CString>::iterator l;
    . Q8 S  H1 Z: _, S# u

  375. 3 N; |, B5 f7 G$ Y/ a
  376.   UpdateLocal.clear();
    & i8 f8 S4 S* N& k7 ^$ F" o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# P/ S( \/ @* A& P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; S% x5 g6 O; g2 |8 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' @. T' z3 V/ u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - j/ }0 U& a$ S% s9 q* w
  381.   if(UpdateFile3.size())
    $ j, Q9 r: _# O0 W# a
  382.   {+ Y% c- Z# |) Q8 e( x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ h& y; }4 i+ X3 I
  384.     {
    * ~9 o4 j) F4 a# J7 T" \
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 M: h8 t1 Z& T# h7 S1 ]! y5 P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 p( z# G: |, t4 o: ~
  387.       {" r6 n( s0 U+ g& X8 I
  388.         file1=(LPUPDATEFILE)(*p).second;
    + p( H$ p0 Q6 v; q- S
  389.         file1->vers=file2->vers;1 e1 ?+ g% P; ?- n% i$ B
  390.       }
    ; @0 c+ v* _5 F  `  ?6 V* \- F' Y* j
  391.       else' N3 y  h- Z9 ]/ Y
  392.       {/ r# ?7 y0 [+ Y# o% R3 n! P0 t$ Z" w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + Y+ J/ y6 N6 K' J. Z5 z' x% x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 v- }3 [+ A( [/ V" `. D! B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( g2 d4 ~0 e. Z
  396.       }& D* V- N0 U/ v1 K7 z
  397.     }
    $ U4 |* H% \+ q, U; ^  ]
  398.   }4 o1 \, {% k. s( y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 h' a: O6 z! ~# ?
  400.   {: ?% N8 m, m, i! R+ {0 `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : F3 @" C# S7 x9 \, l. O
  402.     {& R. T/ K' y. v+ C, `5 k( @  O1 u2 W$ R
  403.       file2=(LPUPDATEFILE)(*i).second;6 v+ W8 l& X% w8 Z3 H, d# G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " q0 A7 a: r0 Q  ?' \% H
  405.       {
    & M( _, S" L+ E3 C( U
  406.         file1=(LPUPDATEFILE)(*p).second;$ f- T- u7 D( U
  407.         if(file1->vers!=file2->vers)
    : `& |2 ]* b0 k, f- Q0 F+ n3 {: k% W) }' U
  408.         {6 f0 V+ S( g9 c* ]0 Z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; |+ b6 C* l; w6 ^
  410.           c++;5 I+ U# \2 W( d* T0 T1 @
  411.         }6 d6 R5 w5 ~- F3 h& U. A* d2 e: F0 Y
  412.       }
    8 a( D7 t5 Q' h5 g& a1 t& p
  413.       else) k5 f1 U8 n* r6 Z5 G9 b0 K3 R
  414.       {5 ]4 r) v3 Z5 F& R& t& R2 u+ ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - }! H5 M) H- J* q
  416.         c++;$ k( H& i* j* A; k: _! w' l2 q+ W" \
  417.       }. J" m" N5 c4 `! ?4 ~, s
  418.     }
    8 Y+ H- D- j# Q% s6 x5 |5 Z3 k
  419.   }
    0 Z$ B2 S# U& R  r, g) N
  420.   unlink(".\\DownLoad\\update.txt");
    5 J, I0 |0 A# i+ [$ u( W: M8 m
  421.   if(UpdateLocal.size()) return TRUE;: q6 @5 G; P& n# N3 p9 ?9 Q
  422.   else                   return FALSE;
    * E! j3 z; h1 R) |
  423. }8 z2 h  @, f) ^/ L: O
  424. 7 g' X  ^" n" l- f) s" }8 A
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; g) N& t0 @0 ~0 ]4 b+ q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  G, E% X  ^) ?; O# ~
  427. 1 _: S% }& r+ E' m6 m; l4 e
  428. . n8 [* j7 _6 }7 r
  429. * i' Q/ W8 Z. W: H, m' W, m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 M6 T$ S. m4 x9 ^4 M. L; Q
  431. {5 m7 V, |5 L( c6 P( ]/ U, }. \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 S0 R; L- Z9 Q2 ^- B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " T. u' Y( J" E& p$ c
  434.   {$ X. \9 {$ @# N# i* ?
  435.     char szLanguage[50];/ b( A9 H1 R3 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( E* `9 M; p3 u# b" [4 ~) b; V- a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 Z3 e! s6 k  V$ ~4 W. w+ }$ |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 a2 V* y' [4 S; R; V; D- G- j
  439.     else                                   m_iLanguage=ENGLISH;
    5 m9 l) T8 j4 d& w
  440.     char szRegister[100];
    : T1 `4 J8 E1 x3 a: `' }, R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , t" r8 R# [: I5 `8 P2 ~! V4 s
  442.     strRegsName=szRegister;
    # Y1 p/ ~2 ]2 n: ~0 s( v3 L
  443.     char szPatchURL[100];
    , O$ Y9 B/ l+ r; d) z! E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # q- ~; R( Z% o2 S8 ]; A' r; Y8 ^
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, [9 Y/ a+ `9 D2 T
  446.   }$ z) U5 E( k3 [9 i# a) g& ?
  447.   else+ j0 E& t7 M+ J6 q' o, \! x, o( E
  448.   {
    - U) o, @8 e6 j; r( j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 t/ M; u0 m8 W: c6 K& v
  450.     strRegsName=DEFAULT_REG_URL;
    2 E: }, C- \+ y2 I
  451.   }
    : O* V- a( u$ ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 G0 ?6 [2 ^& i" n1 x( c
  453.   {
    + Y9 y' m3 P! Z! V& {
  454.     char szIP[50];; S  ]0 W3 C- A% m. a$ ~* C8 y1 I
  455.     char szDIR[300];$ L2 Q$ f% u( D0 Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    9 @2 c/ S+ U1 ?4 H7 i6 ]
  457.     {
    / B6 h0 I% y8 g8 G( @: |/ V, R0 p
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* h) W) }/ o' @% h+ a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 c9 R+ C/ G% H  h
  460.       strHostName=szIP;
    " t: Q; ]  E! e0 _
  461.       strHostPath.Format("/%s",szDIR);
      N. j5 X. L9 a( R, P0 O2 D
  462.     }
    9 \) g3 D7 w0 R
  463.     else9 k) j' L# Q8 d  @5 c
  464.     {; q% w7 G  ?7 \9 {1 h5 E5 a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      }" @* D* m2 t) n
  466.       {. A& _9 N5 @" M, I( W) y
  467.         char szLanguage[50];& l# q/ }( c8 E' G4 |2 P) v- i8 Q/ \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 \/ f/ L4 y$ p4 e/ }3 ^7 F: D
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 Q! A" }; N- b* E. T2 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 F. A$ ?3 t3 W5 P
  471.         else                                   m_iLanguage=ENGLISH;
    & h5 F7 @% ^* W. T* f  `4 n
  472.         char szRegister[100];
    & `* _7 _: j0 q5 W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " v6 o  l* _1 D
  474.         strRegsName=szRegister;
    # k* d' T8 B. u/ A3 u' g* r
  475.         char szPatchURL[100];
    % g2 }9 |9 x1 h& s# c. ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% E4 P6 `4 H& }6 Y) U2 ~' N. N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 V8 ?5 i' s* d! J$ j) c% M& a
  478.       }
    + H# w$ S1 D% N
  479.       else
    . s9 Q7 X1 P5 |" C
  480.       {
    ' J1 f' S! n1 ?( {" h1 u5 H  u% c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) w; a1 `( M( p) h) }
  482.         strRegsName=DEFAULT_REG_URL;% o% L0 Q4 P0 R) ?! D( ]
  483.       }
    ' \8 C: p" _' J0 x  I) ^6 _
  484.     }
    2 R: l' R- |, |( ^1 u6 e
  485.   }# b+ x% M3 i( C9 o- e
  486.   return true;4 t. _7 K" O5 \. Q# z
  487. }
    : P5 A$ N- p0 }# T6 [$ z
  488. ' x: r5 }3 C# h0 H' G
  489. #include ".\ZLib\unzip.h"5 [* B" ?; u3 G7 ?/ E" t5 W0 l9 }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 g! \- C+ C( R4 c  y' b5 q
  491. /////////////////////////////////////////////////////////////////////////////
    % E& {7 h3 c  a, M/ N
  492. // CRevAppApp initialization
    ) ^5 q9 b  T' N: d* ?5 Z
  493. 2 ]0 p7 ]; s& H% g6 W* F; a
  494. BOOL CRevAppApp::InitInstance()
    ; c! q/ u. K  |% N
  495. {: l$ U& E$ r1 m) s. e! `
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];4 {+ a: c( N5 A4 m
  497. 0 y% k8 d3 Y( q  N
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 K( V0 {1 F* w7 |3 I+ ^) P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 l8 I2 Q2 D. J- Y
  500.   {
    ( D0 o! ^+ [9 S1 u* y* ?: `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 y6 {; P$ ?7 j1 C" X7 M  H
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: N; Q" y. m3 v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 |, o" p0 i4 j5 p. E
  504.     {  u0 K' T( y- |+ Y* I$ ~: u
  505.       strcpy(szPath,szPathTarget);
    7 M3 f5 y& X0 _8 Q1 `1 \  o! }
  506.       SetCurrentDirectory(szPath);
    9 d9 P0 _. k- [0 q
  507.     }
    ' u5 z+ Z5 `0 g, q; G+ ~1 ~) j" T- m
  508.   }
    ; j- `3 y5 N  r! i
  509. #ifdef _DEBUG
    5 Z7 Y: {+ ?+ p
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 F1 X1 |8 ~# b. A
  511. #else! f& W0 f: P3 q! n9 S) M6 N7 W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! g- e6 E  c: o2 n+ o3 ]' V
  513. #endif
    3 N# J/ F! {, K7 |/ J+ Y. ?' @4 {
  514.   {
      T4 w  {9 W5 l; W# t2 |
  515.     char tempFileName[MAX_PATH];
    - w% ?6 H/ K7 V/ T$ j; a! s3 Q
  516.     strcpy(tempFileName,szPathSource);
    ) m$ a: _! K- \% I8 |
  517.     tempFileName[strlen(szPathSource)-12]=0;  n. P( j+ j" k& V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 b" S- W% w  O( y, f# k6 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. ]: T/ i( w2 A: G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# _& Y. I8 ^+ @4 ~4 k. e- r& v- B+ t
  521.     return TRUE;/ X0 n2 i; H4 |+ V' d2 {
  522.   }
    6 p; Q* C/ t% ^+ D2 [
  523.   // Nuke 0118: Delete run.exe
      f- {* O3 b; [$ p: q; R: h2 u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# R: Z6 D7 H3 U8 H, A3 p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 |) H4 `" ]9 ]/ I4 {
  526.   if(!ReadCfgFile("Config.ini"))3 s9 f/ ?7 y! i
  527.   {
    5 G; q$ G. p8 R1 I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 x3 a8 O8 i0 m! E7 I
  529.     return TRUE;% R8 X1 v& c" v; {3 U- F
  530.   }9 f  J& m+ I0 k  k6 P! K) H* n
  531.   HANDLE mutex;. P+ i* Z, K4 ~; R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! M* t9 e' W, o/ `# ]
  533.   {' s* E2 g6 x+ W  D2 |: @2 ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' s9 K7 a  R  B; I1 s" f
  535.     {+ ?: D/ o" @2 W& ^  Z, |
  536.       CloseHandle(mutex);
    & j* J5 N% R; G- g$ D3 L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);8 E- y) Q! E6 A, y. e0 l
  538.       return TRUE;8 i7 c$ l8 ?# d3 T" C' z& s8 a. t0 e) X
  539.     }
    & [9 D) f. [" V9 J- |  ?: |* c: q6 U
  540.   }  
    6 s. d! V: ?0 a/ e# L
  541.   CloseHandle(mutex);
    # U+ g: e- t, I: q

  542. % K$ o! f( H8 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ E3 m3 H7 s0 g

  544. 2 B' N& M7 W& p" s$ g% N: t
  545.         AfxEnableControlContainer();: t* \/ {5 F; I, ?6 Y9 x3 r

  546. ; j. [0 j7 U$ a
  547.   bCanUpdate=FALSE;; K) L& e) l" E# D: Y
  548.   dwStartUpSteps=1;8 I$ B; q3 y2 W8 v* d  u
  549.   dwProgramState=AP_NOTHING;
    3 n- |% H8 M7 ^: T3 f/ i5 M9 I

  550. ) ^  h8 [- x6 L# _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);* c% p4 R# O8 M; M( I
  552. ' l8 t8 S! A. e8 W% U8 j
  553.         // Standard initialization
    % O& E' U2 g6 {+ k* U' `
  554.         // If you are not using these features and wish to reduce the size6 E& p$ t) p3 j+ D
  555.         //  of your final executable, you should remove from the following$ K7 Q" R! h- k7 z
  556.         //  the specific initialization routines you do not need.
    * v) P+ m7 c. A, g9 B$ J, P+ G

  557. % B2 Z( h5 ~. {$ J
  558. #ifdef _AFXDLL
    2 A' B% Q% m+ K2 [: T* J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' e5 @9 r  i# w7 y( h
  560. #else
    9 D' T& I  W2 p! d% C( ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' T0 P4 W/ p! _& r4 f
  562. #endif4 H% A: p$ e) E1 ~( X8 d
  563. 6 t8 |- s7 T& E( l9 E) N
  564.   dlg=new CRevAppDlg;0 F" i) I) J" T7 I; a  y( T
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ h' ~/ z2 U8 I: ?. b& ]! @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! r" Q6 v# v# y* ~  ~8 O1 U
  567.   m_pMainWnd=dlg;7 A9 h& d# V( ]7 ~

  568. 5 P+ F; Z0 T* ?# \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, ^1 w4 m: ]% e# l- b5 R

  570.   G, s% ?* m0 X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , n, r! D& l& A# D3 H% M/ T/ o3 C
  572. //  ULONG_PTR gdiplusToken;0 {" l) s& @) b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 [# }% ?  j1 _7 q6 H& F
  574. 4 t. U% m1 H9 {& |: e, h/ \
  575. //        CRevAppDlg dlg;
    - ]( l, `8 q& `9 r
  576. //        int nResponse = dlg.DoModal();
    # n) ~/ q. q+ f5 `& F
  577. //        if (nResponse == IDOK)
    ! G, p  u7 [2 T" X+ P& s+ `3 w
  578. //        {/ x9 r' ?2 B! I
  579. //                // TODO: Place code here to handle when the dialog is
    ; p" _( A4 p# v/ O- D
  580. //                //  dismissed with OK
    1 `7 r) }' g+ L% U
  581. //        }
    / C' F6 B6 c* S/ U( e% J5 A
  582. //        else if (nResponse == IDCANCEL)
    % l' ^5 K* W9 w
  583. //        {, {9 i8 e2 S$ o7 R' T+ e$ W
  584. //                // TODO: Place code here to handle when the dialog is) |9 `; V7 |7 N( c2 }
  585. //                //  dismissed with Cancel
    9 ]0 ]" ]8 H7 J* }, [. ~1 m' ~
  586. //        }5 h! s8 @% G7 N+ q
  587. 8 X& s0 d2 R0 Y) C+ F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # n$ ?" g  D* X+ e1 ^# S
  589.         //  application, rather than start the application's message pump.6 `  Y, z$ L2 @. R
  590.         return TRUE;
    ; V& e1 f3 L5 o
  591. }
    . f& B, `9 \) L- `4 T8 b
  592. 2 Z9 k% B/ C0 }# B2 J4 e% ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( o6 f! j4 E0 {, ]
  594. {; \7 F) l: \9 h/ \0 i# |
  595.   int i;/ C0 k4 P3 T5 D$ p
  596.   char *szRet;
    7 O, v" J2 z& [! p" a* X- ?

  597. 2 H2 P9 B5 ]! J6 h2 c9 t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 y8 X$ Z) ~) P
  599.   if(sztoken)0 m2 [* d5 N# B
  600.   {
    - D0 I/ X& w6 J0 @8 b* a
  601.     szRet=&sztoken[itoken];
    8 V8 B: \" V! F/ {4 f  M  Z* u  ~
  602.     while(sztoken[itoken])
    0 _1 Z6 x6 _! s' M0 B2 ^
  603.     {0 I- R  `6 A7 t2 R; r5 J
  604.       for(i=0;i<(int)strlen(token);i++)
    + Y5 \: r8 ^/ n* y
  605.       {
    , c4 C5 s. k* ?8 X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / \* D8 ^5 {/ q  l5 R! h$ ?
  607.         {, D6 H( `; Q3 T2 v! M3 G. E
  608.           sztoken[itoken++]=0;
    9 J. e( |, _% L
  609.           sztoken[itoken++]=0;
    . w9 f  _& h7 l6 Y4 t( W
  610.           return szRet;! u+ j! h+ g! y9 ]; `
  611.         }
    , S! i) x; E! A. ~! Z
  612.       }
    5 j& v) ^& U) W6 Z5 w$ u
  613.       itoken++;+ p& A+ a" h/ K" m) e9 Z% X
  614.     }
    / r- v: P. A# o# v( |$ ]/ ?- V3 A: j: k
  615.   }
      t0 h& s: a2 G4 W, h$ ?2 X
  616.   return NULL;
    , @7 H2 B( S( r9 L
  617. }
    2 `; R' p8 a; F. L" Y
  618. 9 G. W+ ?2 l. p2 {
  619. void ProcessProc(long Total,long Current)# h* J% u( G0 @
  620. {1 ?" d7 L- i8 l$ j, j+ J% x/ U
  621.         MSG msg;
    6 j2 N& e2 K3 s( j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, ]* x2 i0 K1 N2 w! T- P! E  {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  C% u6 {$ a, t" x1 I4 x/ `
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 C/ B% f& d) W, i( ]4 l
  625.         {  J, F1 q5 S$ @* S
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 r+ w2 U- N7 n- B, @
  627.                 {7 s" c$ @6 i; r9 N
  628.                         return;
    * |3 c$ g, R" y
  629.                 }
    & T4 t# x! V+ @- l- {( c
  630.                 TranslateMessage(&msg);  p' A- J, R3 n' \' n; I: b6 ~% E
  631.                 DispatchMessage(&msg);
    ' a8 B8 d& L+ l3 \) l2 N2 G
  632.         }       
    ! n  V- i: O3 [" |
  633. }* `' w8 d- R0 C0 \; T& w6 q$ l
  634. % j+ |8 U+ A2 q4 r9 a& x
  635. BOOL bFirstChar=TRUE;
    $ ^8 o& X- \& V6 f9 s: h  c
  636. , f$ G* K* R) v& E2 g5 C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % r8 e5 f" V  q: P3 |! m& M* v' a% z
  638. {+ w% c% c) c1 R, W; U
  639.         // TODO: Add your specialized code here and/or call the base class; J/ ~% n9 \; J, @  L; ?8 X  ?
  640.   switch(dwProgramState)
    2 \8 ~  r& T4 j  N: b8 N% N
  641.   {
    ! ?: U. Y. Y1 @
  642.   case AP_NOTHING:( ?5 p/ u! M5 f/ j% r' e) g5 k! N
  643.     switch(dwStartUpSteps)
    % x7 E: o: ?& X
  644.     {- g' F& l  M1 a4 U
  645.     case 1:
    5 }8 X- Z5 _! x$ e6 ^
  646.       {+ g( n9 M4 v: i
  647.         int i;' f3 H' B" |  G! I6 P
  648.         CDC *pCDC=dlg->GetDC();
    ( Z. U) L& t% S/ o% p; n
  649.         HDC hdcwnd=pCDC->m_hDC;
    . d3 E' d* {2 e! j) ^
  650. //        Graphics graphics(hdcwnd);
    / E/ e) P+ T: u- e) S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");$ w8 A2 ~1 v9 B
  652. //        INT iWidth=bitmap.GetWidth();
    + F! U. B% c# F" Z9 X8 \+ t
  653. //        INT iHeight=bitmap.GetHeight();8 }. |9 d6 U2 @' [. L
  654. //        Color color,colorTemp;$ k$ N4 [  }# D+ d* i: m" R" w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# h& O. k% m% d3 \0 H% P" r1 ~
  656. //        {+ b! z% h7 I1 J' L1 }# T+ U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). [7 v3 M3 M  f+ W7 U, t" |
  658. //          {( r- f0 w5 ?- F0 [( _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; q% O! M& M5 [' {$ F3 L
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! a$ l" a/ `3 E2 M
  661. //              (BYTE)(255*iColumn/iWidth),
    . o. b& D/ R6 M
  662. //              color.GetRed(),' x# p" S/ h! I  Z
  663. //              color.GetGreen(),/ q! A$ R0 I' j  Z
  664. //              color.GetBlue()));
    & K7 A/ J8 X+ Z6 p$ {' p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + Z1 _7 O# n1 g8 r+ o/ f
  666. //          }
    ! a( C5 C7 Y) V" y, @
  667. //        }
    % f5 }$ X* v% O; \- o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " @5 R  }9 x3 c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 R& \8 g7 I2 V5 _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 A# N8 w) ~6 T, L& q$ \# {: Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 q+ @. \/ ~% R9 \( h
  672.         for(i=0;i<240;i+=8)
    ; }# h8 L. E8 H  D* }# G! m0 x! ?6 F
  673.         {9 g. o4 `: D, w+ S3 j5 B% x7 P, Q! W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( m$ `6 M" ]( M/ O( R; E& `. e5 y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  }3 _. M7 ~, D5 S) Q3 ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& y/ t( A# ?1 {' p0 v
  677.           Sleep(33);
    $ |3 |' G  O$ Q9 O& m5 |- w, O8 e
  678.         }
    ) s5 Q9 w: x) E9 J0 }* F
  679.         Sleep(1000);
      ^" {0 Z( U/ C- n9 e5 n
  680.         for(i=240;i>0;i-=8)  g( ]4 s  T! C- r& p. W
  681.         {
    9 l# n1 j. |+ }) T4 L- `* @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" z) R& _! P' T% _
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 |/ E% K6 f: V9 U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ F* o1 W! o- ]- x$ Z
  685.           Sleep(33);6 |) J! J# p- Y7 N- E' L( o
  686.         }
    / E4 c9 U3 M& ^8 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% k1 |: q! z6 ^( F7 o/ U
  688.         dlg->ReleaseDC(pCDC);0 Y' Z( R, c2 H! M: C) |% E1 y
  689.         DeleteDC(hdctar);
    ( t0 z3 L; m7 i. Z2 T5 T9 w. I4 ^! D8 H7 V
  690.         DeleteDC(hdcsrc);
    % u* a8 F8 J/ x& T/ w8 s+ Z$ v/ h
  691.         DeleteDC(hdcorg);
    * v: m* u: {' M, A1 q1 ~2 z
  692.       }
    0 J& ]! s4 X# ]( s6 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , b* s1 {7 }3 \# n1 r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: W% Q1 Z+ H$ T+ i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 ?  P& s( E$ D- H, u! ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 ?6 X9 a7 }! F5 O1 W5 t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 K5 }5 A: u' s7 J" c  U
  698.       if(!Dn.Connected())
    5 ~& D7 `4 L3 P; E" K+ y
  699.       {) ~8 r. }) Y. d; ]! T
  700.         dwTotalFiles=1;! W4 b1 a0 T9 n. _; {
  701.         dwDownLoaded=0;$ d( H# }; e; v; z7 ?& [0 e1 c% a
  702.         bSilentStep=TRUE;6 N/ ]* Y3 t7 A
  703.         bCompressed=FALSE;
    1 G$ |, c6 U' W  ?
  704.         strExtLocal.Empty();
    * [; I/ J+ r$ L6 z, L4 s
  705.         strFullName="readme.txt";" @. M3 q0 a9 E6 X
  706.         dwProgramState=AP_CONNECT;
    6 J& i6 A  I! J
  707.       }
    ! r* \0 i1 Y" i3 b+ p5 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + c6 T- e% f+ K9 N  Z0 U  D! d
  709.       dwStartUpSteps=2;4 }3 e0 X" b% Y1 y
  710.       break;
    7 E7 \: R/ f; N
  711.     case 2:
    ; |2 o+ d& \3 R' |9 I8 u2 [  y
  712.       {
    * C  x* p1 ^  ?0 r
  713.         int iEOF;$ ~- x. X  m3 `, F( H
  714.         FILE *fp;+ }+ ?& F: X( {: t0 }
  715.         char szString[512];
    % S7 m9 @' [9 }* J& w. Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' M0 l$ N' {" p, S5 U! U
  717.         if(fp)7 E  b! s. e+ [; i
  718.         {1 N' ^3 y  O7 h* z
  719.           do, U7 B$ x, e, W; Y& l  y
  720.           {( w/ V3 i: E, |6 H1 R/ |. w7 O* S
  721.             iEOF=fscanf(fp,"%s",szString);
    / L) h4 V0 ]& m) ^
  722.             if(strlen(szString))
    + l. W3 u( b6 U3 K
  723.             {
    # i6 |- J9 @2 E# j, f
  724.               if(bFirstChar)
    0 }7 x1 _* U1 u: t% Q+ o$ E, Y
  725.               {
    9 a7 m4 e0 f9 J2 d% ^
  726.                 bFirstChar=FALSE;4 |; L" H5 V9 G4 [
  727.                 bConnectIsBig5=FALSE;
    8 N7 T  o; @) u, a5 [" x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 ^' E" J% u+ l; y0 B
  729.               }" h" G' X, o# U- q; G3 Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));8 w; h/ U3 Y2 k* G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 {0 Y& x( [# ^$ J' `5 C, e, [+ r  a
  732.               dlg->m_ListText.AddString(szString);8 E3 j4 j9 N; o4 _: X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 o# b' `0 [1 j' I/ x5 ?
  734.               *szString=0;
    ' _- C& ^9 B4 v( s, k
  735.             }
    ; P* x( C0 {/ D
  736.           } while(iEOF!=EOF);! F8 a- s( u( {8 z5 b. g5 R6 S& i
  737.           fclose(fp);
    ; W, u4 c0 r* z. f& t
  738.           unlink(".\\DownLoad\\readme.txt");$ h* T9 N0 L, [3 N! ^5 i+ K( v
  739.           dwStartUpSteps=3;8 H0 n# j5 b" d* v0 [
  740.         }# `2 j2 k$ [* z& i
  741.       }
    8 Q3 p1 P/ m$ o0 A; p: H4 l
  742.       break;: p- A: [5 U. U' u* N
  743.     case 3:( l+ c: C; b  V7 k8 G
  744.       if(!Dn.Connected()): \& c2 l% W1 U, @. H% x+ j* N
  745.       {% w+ K; H! J7 c# s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: a& e7 W* j5 @- S+ R8 B
  747.         dwTotalFiles=1;1 V# R- W8 {: H, `: r) X
  748.         dwDownLoaded=0;
    6 g8 H$ m; \3 K' P" j
  749.         bSilentStep=TRUE;
    3 i/ b( b1 d' F& R; }$ q
  750.         bCompressed=FALSE;
    & ^9 s& F& D8 U* T/ p
  751.         strExtLocal.Empty();
    , L- K5 C" g, {; J/ {2 Y1 _9 ^, g
  752.         strFullName="checkversion.txt";' a& @- ], q# ^
  753.         dwProgramState=AP_CONNECT;) m3 g8 L3 t6 Z- ]" c, t! ?
  754.       }
    ) B) E/ A" a% W* y2 l5 B# A
  755.       dwStartUpSteps=4;
    ; W& F, b: G0 `0 z- f
  756.       break;/ p. n4 ]5 I6 d
  757.     case 4:8 L) X0 S! [% Z1 R
  758.       {# P0 x# X! b4 H
  759.         FILE *fp;, W0 Z9 m' M  E3 ^; W* K9 @  \
  760.         char szString1[128];
    : S+ s  o" X% r1 d/ ]; z9 w
  761.         char szString2[128];
    3 Z" T7 L' }% _, E( n+ A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; \4 ^; r0 I  x7 g/ d3 p
  763.         if(fp)
    1 m* e, l. w1 T3 J! o; M+ Q
  764.         {8 b; Y0 `5 Q( r& e
  765.           fscanf(fp,"%s",szString1);( V) m: R+ f3 i. N$ c/ g2 v
  766.           fclose(fp);- o5 Q7 L, U" N1 ]6 H
  767.           fCheckVersion=atof(szString1);
    0 C) ^9 {- m! a- [$ P
  768.           fp=fopen(".\\checkversion.dat","r");, R4 A9 L0 N" t" o
  769.           if(fp)+ M7 Y8 d% }9 v  U
  770.           {$ o: R9 B# m2 P1 y8 F
  771.             fscanf(fp,"%s",szString2);
    , o/ a- u( F3 |1 w: G) \/ _
  772.             fclose(fp);
    6 x* Q3 T! w( a! W
  773.             if(atof(szString1)!=atof(szString2))
    " h$ y( `5 t: _
  774.             {
    0 r# p. L( n" y4 B
  775.               if(!Dn.Connected())
    ( g9 B# a! j% j0 {4 p# P7 I
  776.               {
    ; d; e! [. I1 G+ p. l
  777.                 bFirstUpdate=TRUE;
    " j" z, V/ Z" S  [5 i3 x" L( b
  778.                 dwTotalFiles=1;
    ; f) @/ ^" s  m  P9 n
  779.                 dwDownLoaded=0;
    # g' l& l/ H8 h( D, ]7 h
  780.                 bSilentStep=FALSE;
    * ^2 d2 p: g' _$ T8 U' w
  781.                 bCompressed=TRUE;3 A. V' G8 [. D) w# Y
  782.                 strExtLocal=".\\DownLoad\";! Z, x- B/ _$ {' k% A) j
  783.                 strFullName="update.txt";5 e1 V$ w# c# C& E+ `$ c; J
  784.                 dwProgramState=AP_CONNECT;
    ( ~& x- ~+ I7 R& s0 t( b" i% p- [
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & a/ ^+ B0 d: ~* [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) B- l# |) `, b, ?
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, i( @; a" q) _5 ^3 a& N
  788. ( n& U0 H2 \5 L1 y; {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : j) D# t" h* ?
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ V8 x4 Y0 ]/ W3 m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) z2 `( |7 _0 q. z3 e3 |) ?
  792.                 {
    & y; Y' u7 y, c' U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");. m/ g" N0 ?( v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * ~0 t- v3 @! u2 K5 @, y& ?* H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    . V( i# }$ p# I% @
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! j; @* J( `+ I1 q
  797. 4 b7 t, x# @; ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # S7 p( t9 y- k; ]6 Q5 |  j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 d& b9 f+ L; J" j
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% u+ r' l- b- E* V5 o  V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 p( L7 O* {  I/ O: X0 M& o: ?
  802.                 }6 B7 b& D4 j$ j- c1 u
  803.                 dwStartUpSteps=5;
    ) X  [" n9 D. Z( z
  804.               }: W5 u  ?* s+ m- K
  805.             }9 s8 B% Q! ^, B: ]3 k
  806.             else
    8 D* Q" q% ], m0 P# z
  807.             {
    5 W' R, k+ u/ x2 ]. c) w* \; v8 |
  808.               unlink(".\\DownLoad\\checkversion.txt");- C7 u5 G! }9 u* E% r& |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      S: G, |7 x7 U4 S8 i# W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, N8 T: d& L3 t* I* B8 i- m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* }! L/ g: {. H( O  R

  812. $ T! q+ L" _% P9 L6 q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 o+ E. B8 t' P- t
  814.               dwStartUpSteps=99;
    ( R" }, \; s8 d" u
  815.               bFinishUpdated=TRUE;
    . I1 F6 p/ n9 `5 r4 @% f
  816.               bCanUpdate=TRUE;
    1 V+ J* s% q! ^' d% L$ h) ~
  817.             }7 X7 @' \% D  h3 X3 u+ c0 J1 }( h& x
  818.           }9 G9 L# V! _8 G) ~4 p7 x
  819.           else( L: c1 D% I9 R! |9 q  ^
  820.           {
    ! h+ Z# h* s" F5 ~# K. L7 T
  821.             if(!Dn.Connected())! \$ u. b' R" W+ ?+ P) i
  822.             {# X9 E" g9 K+ a7 k
  823.               bFirstUpdate=TRUE;
    ' F) c3 @: {% x. x* t- F' ~9 P
  824.               dwTotalFiles=1;' I7 ]% e7 _7 U! f0 S6 l% T/ L
  825.               dwDownLoaded=0;3 g1 T/ x. F  C& i& s
  826.               bSilentStep=FALSE;7 t0 b$ x* u! ?- }& q7 y3 ]3 F
  827.               bCompressed=TRUE;* x0 X: Z7 h# c# p& }8 l$ @
  828.               strExtLocal=".\\DownLoad\";
    1 ?# F, _1 [9 ?1 @9 q1 z: N0 T. T
  829.               strFullName="update.txt";+ p$ j/ I$ V( O% ^1 g  @
  830.               dwProgramState=AP_CONNECT;5 v& v5 U1 f) t1 d
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . ~- r, _* T9 ~( R& r# D( H
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 w' l0 s$ s5 T! E# M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 r1 T$ Q" @, ^4 X  u1 D% N3 B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 e# D2 F6 v! }
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . Z# n6 I5 Z  d+ R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 P* R8 l5 ?" O3 m0 f8 [
  837.               {. o9 q$ K  e6 i9 o* h) {! H0 h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + j# a- y8 R+ B1 ]* |# }( |7 `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! x% ^$ I  L# e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 w+ ~  g8 g- z: M7 s8 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 E  q3 a9 ?. q2 Q8 k6 l8 T
  842.                
    9 s$ S) j8 K% H& _; s
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' Y$ P# j! i  @; |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) k+ _/ i! M' o! w% Z$ K: {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ Q% U9 F9 n$ r, U5 f/ @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 S3 V# t& Z/ ?, y- U$ `. H
  847.               }
    5 k0 a6 Y% a& U- I0 D1 A
  848.               dwStartUpSteps=5;7 \- L: t& P3 u' B6 K( e
  849.             }
    7 R; _$ {4 w  @4 B; N0 ]
  850.           }
    ' }# X" M1 o0 @! Q8 ~4 p8 a
  851.         }! o& Z8 D& r1 E) D' o! k2 n- _+ D5 b  J
  852.         else7 h0 N! p# y  f8 t* u- z7 S
  853.         {. V! h9 X" W' s3 C3 }& F9 w% s; _
  854.           dwStartUpSteps=3;# x! S, X% p9 o# J( L* }* F' @
  855.         }
    7 W: u1 b3 n% {/ K2 f9 w8 ?
  856.       }  E6 n' G, Z! E+ w# Y' p1 U
  857.       break;
    ) L3 a9 k% |8 k7 r& t
  858.     case 5:" z' W" w# X0 m! Z5 s- S" l
  859.       {6 w2 W4 a/ W+ ]8 {8 J, a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! d7 M9 g4 F" t( X  x/ G
  861.         {
    * b3 w7 Q' u0 O  N) r1 E- A
  862.           int opt_overwrite=1;
    : y$ e4 `8 Z% O8 ^
  863.           int opt_do_extract_withoutpath=0;  Y7 c9 }4 [3 b  \; e# p* R
  864.           unzFile uf=NULL;
    7 j( P& m- H" A( R3 e; F

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

  n- G3 }% G+ D" I" F" \" y
5 {- c8 a# f6 V0 [$ L4 }

評分

參與人數 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客服返回頂部