找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
+ E$ Y6 a6 P; W. |% K( p3 O7 q
  1. / RevApp.cpp : Defines the class behaviors for the application.' ]1 y2 L( J0 m* h$ s' _
  2. //
    , E9 a+ d0 G1 I- a" L+ C
  3. ; o* }8 j) `- F' e0 Y& H
  4. #include "stdafx.h"
    ! u# q" s3 T7 I4 @

  5. 2 ?$ P- H( B( \) r- i: n) u+ r
  6. //#define UNICODE8 E- a* g- v& C9 G
  7. //#include <gdiplus.h>* \% X2 N/ D. v+ }5 n5 F: Q. x$ I! w! N
  8. //using namespace Gdiplus;0 k, f4 G( S9 J" X; F# x

  9. 4 x: V+ |  h( ~4 A
  10. #include "RevApp.h"5 l0 f; [9 i. D6 G% o$ K6 R
  11. #include "RevAppDlg.h"* M& {1 G! Z4 j0 @) O  v
  12. / ]( \. K0 g. Z* t/ e/ q- ^* n
  13. #pragma warning(disable:4786)
    ' e- F5 \1 J) {6 E9 I; B
  14. #include <map>  M3 p" A% ~! Q' O8 Q3 z
  15. #include <list>
    * @* W. m$ W8 @2 I- s7 K
  16. #include <direct.h>
    5 B- q) k* d+ o2 d$ I# \4 ]" h2 s

  17. 5 k- k2 s$ k. }  W
  18. #ifdef _DEBUG
    ' N% p. @" \. Q/ b
  19. #define new DEBUG_NEW
    # R) j4 Y2 g# p
  20. #undef THIS_FILE7 w7 Y) \, ~: I: c/ \' }
  21. static char THIS_FILE[] = __FILE__;# U6 Z1 J* r: E# O& h3 v+ E
  22. #endif& C. ?9 S1 Q+ m1 q
  23. #include "SkinResDef.h"
    ( W; c2 w9 g0 G* ^* x, o) w( c
  24. #include "ChangeBG.h"
    5 I  n- I* B3 }* p6 t
  25. #include "AFXINET.H"
    # p: T7 s, U. L# q8 U  ]# ^# E
  26. 9 O( U# W% @& ^- [
  27. #define TRADITIONAL_CHINESE 0* ]% g1 q+ Y3 B$ e/ r9 a. I
  28. #define SIMPLIFY_CHINESE 1
    ) \2 z4 [+ i3 P/ Y# X0 E
  29. #define ENGLISH 2
    $ H  ]- h% {. r( v  Y1 A4 O" W# ]
  30. int m_iLanguage = ENGLISH;
    . ^4 Y- @/ b5 @, J' s
  31. /////////////////////////////////////////////////////////////////////////////+ I. W  M/ B5 X
  32. // CRevAppApp6 N8 s6 S# D1 ^) G
  33. % h; d* M8 w; Y% ?5 h
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 I! x- F& D" o6 d  O$ \
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 R  ^; I. F1 j& u4 Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - c9 E& w2 N+ Z! \* Y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 X" l$ y) I# e4 y
  38.         //}}AFX_MSG
    & Y4 L, h+ k! S6 [$ X3 G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    2 x7 Q6 ^0 @5 W0 D" Y
  40. END_MESSAGE_MAP()" n- W" a5 H  v4 n5 a7 j$ N
  41. ; X: b- z1 a% A6 A
  42. /////////////////////////////////////////////////////////////////////////////
    9 e2 O$ r" K3 V2 G0 q* l
  43. // CRevAppApp construction  L9 {+ l1 U. g. u- t! H
  44. $ S& L7 c+ T) h; c- l
  45. CRevAppApp::CRevAppApp(): ~% N: x( V% L6 o  X
  46. {
    : ?; a) x9 [, q
  47.         // TODO: add construction code here,
    ! H- R2 [! n7 ~* n: W, K! [7 T
  48.         // Place all significant initialization in InitInstance
      \1 m% a7 h+ g$ |* e7 }- d
  49.   bDisplayIsBig5=FALSE;0 M. v1 B8 I2 K( ^
  50.   bRestartUpdater=FALSE;
    . Z7 j7 L  |" \+ z7 u% I* B
  51.   bFinishUpdated=FALSE;
    - [6 ?( N, p, Q" Q/ Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    5 V( ^$ {* P3 P* X2 `( j
  53.   InitChangeDataBig52GBKS();( b% g% `6 z0 N' ]% [- g$ l% {# ?
  54.   InitChangeDataGBKS2Big5();( e) b7 q  I- ^
  55.         //
    $ Y4 C. o/ {, v# d" _
  56.         bClickRunExe = FALSE;2 {( r5 O: ^' D" W
  57.         //
    8 P% N' G5 t6 {2 b3 w$ j
  58. }
    4 c7 O& k, b2 K+ q' R; R7 K
  59. / M# Q( S2 i0 f1 P
  60. CRevAppApp::~CRevAppApp()
    4 P: N3 b& z( G9 `$ r( X
  61. {) I; Y! P( W6 y5 @4 N
  62.         // TODO: add construction code here,
    3 @  I! r& b2 e7 `$ p
  63.         // Place all significant initialization in InitInstance' c% p4 o, z. e6 z
  64.   EndChangeData();! ]9 p4 y9 {& [3 G& W- Z
  65. }! j& S; A- k" S
  66. % X0 V2 l4 w7 ~/ P) R; j! @2 h& s
  67. /////////////////////////////////////////////////////////////////////////////
    # J! p8 j3 q( Q& n0 c7 F' d! H+ e
  68. // The one and only CRevAppApp object
    ' X8 {' X% v1 H

  69. % R5 @8 @( L  Q% R- E
  70. CRevAppApp theApp;3 i" O  G/ b3 J& F
  71. 3 y2 j9 p/ X6 A* e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" H: B1 W; v) J1 w, z
  73. {: X; c3 M1 z& y/ a! C' T
  74.   int iEOF=0;
    3 V! U% K/ {$ V5 k) Q/ X5 D; y
  75.   char szTempName[MAX_PATH];% e* q) B) _) a! Q
  76.   *szFileName=0;+ k0 m/ u7 X) m& t+ {- T
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 q( ?& K0 F8 B- o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , J: |' F4 x0 P2 r7 h
  79.   {4 V4 g& ~! j# P  M
  80.     strcpy(szFileName,&szTempName[1]);
    2 u" F7 ?+ y0 a+ ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / H# g% @5 v5 }
  82.     {6 E. Y4 a: _( v" M) \
  83.       iEOF=fscanf(fp,"%s",szTempName);+ a$ K- R$ u$ Q; H7 L
  84.       strcat(szFileName," ");
    8 M& g4 }+ O# _7 Y* y0 v) C9 y
  85.       strcat(szFileName,szTempName);
    + }. ?; U0 L( I, ?
  86.     }
    # B0 U( u% Q& T) B6 a# y" U
  87.     if(strlen(szFileName)>=1): Q4 D$ \7 Q3 q$ t/ Q- z
  88.     {; k: B9 k8 P/ _: V4 E4 n6 o1 }+ n
  89.       szFileName[strlen(szFileName)-1]=0;
    2 T2 L9 c$ \( @4 U
  90.     }' w/ c. N& b; u: U! H
  91.   }
    5 I. I6 _# ~; \" J
  92.   return szFileName;. i' r, q  A* S* x$ i
  93. }3 t$ [! m( W9 d) f0 ]

  94. ( p. B5 T8 E! \! H0 b) k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), o2 i+ I2 G8 F: `
  96. {$ p: U* g/ ?" L6 y9 p
  97.   FILE *fp;
    4 e# r, @" r1 @! S1 l
  98.   char *key=NULL;# `' d$ [$ ]3 Z
  99.   char version[MAX_PATH];
    4 s. c+ f7 ]* z5 B4 Y; q1 C5 T9 S4 {
  100.   LPUPDATEFILE file,olds;1 m- U- \' o+ F! I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( c- S& Q/ Y% Y7 P: R* F. b' R7 s
  102. 2 r9 K  l$ U5 p5 V
  103.   UpdateList.clear();
    ( E# b# f5 U2 T( J
  104.   UpdateFile.clear();* P4 l+ J3 o$ n! {. g5 M
  105.   if(GetFileAttributes(filename)==-1) return false;# V) a0 {% v( |+ `& V" g; e2 Q" ]& N
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 i5 V6 @% y. S; E3 H
  107.   fscanf(fp,"%s",version);
    : t" `! b1 q# z9 x- w6 C3 E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; @$ R, B6 J6 l1 [1 U+ y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; U) Y7 k; N7 T4 \7 u4 P
  110.   {
    2 ?" v0 M9 d% X( s5 U% w( T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 {3 ^3 Y9 J# Q! }; _9 o
  112.     fscanf(fp,"%s",file->path);' B# F* b* ~) `, ?  e4 \) _# ?
  113.     ReadFileNames(fp,file->file);5 O" y8 b. C% m: x- R8 X' Z
  114.     strcpy(file->full,".");1 f" w" L4 M. a1 z' ~
  115.     strcat(file->full,file->path);) h5 {4 E# @- }/ \. S$ E9 B, E
  116.     strcat(file->full,file->file);
    , v4 V' v. q- [! w5 F- ]" F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; f1 Z2 l2 D6 k! |* ?2 `  w: d
  118.     {
    , J- {+ y# i6 ~/ _/ t- {$ `4 P
  119.       file->vers=(float)atof(version);
    / y! D9 s; Y1 a, `+ }
  120.       UpdateList.push_back(file->full);
    8 ], m0 f. C, |# @, n) g6 b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 y# m  `6 n3 \) {% n- R5 a7 f
  122.     }
    5 O' ^# O$ @1 d- X5 p
  123.     else1 w- x5 |# H; y0 Z
  124.     {5 S1 H! {9 o) a% r; p8 M; |
  125.       olds=(*p).second;8 v0 A4 C; j, o5 {
  126.       if(olds->vers<(float)atof(version))
    ! t' A9 J) E) ~' M( w: M
  127.       {
    ) \3 v/ u& ~7 |/ [5 {
  128.         olds->vers=(float)atof(version);
    * H4 e# H/ E+ H: @$ t/ c
  129.       }& x2 O) F, K" s0 d/ L
  130.       free(file);
    1 f5 y5 F8 ^* ~  `3 y# v3 D; m
  131.     }9 U0 t4 n0 e0 L/ B$ d
  132.   }$ }; }' x' Z( L! F/ K6 U' u6 Z$ t
  133.   fclose(fp);( q. |4 W3 @5 h# r0 h
  134.   return true;
    # L% [( }, A: a6 a' X2 l; S
  135. }
    # Z  L# t3 d9 c, y; I

  136. - S& S1 {) k9 D+ ^! u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ y3 z  l8 j% P. K
  138. {$ \2 b. J8 N7 A! p8 ~& L2 K
  139.   TCHAR  szFull[MAX_PATH];2 [. d; o- K: }* m; @# Z! A
  140.   TCHAR *token,*inter;
    . N; i# o1 o& I; m# K# x
  141.   *szPath=0;
    ) }; w# t- K! y/ A
  142.   strcpy(szFull,szFullPath);
    8 N' }; @3 T- J$ P3 N6 L. }
  143.   token=strtok(szFull,"\\/");
    8 G1 A" N+ x9 t/ M2 n% w! V& }
  144.   inter=token;' O. u* W- H9 i/ S( c
  145.   while(token=strtok(NULL,"\\/"))% h  N2 \8 B0 ]: y
  146.   {  B: S/ s1 r& ]: d  o% z: s
  147.     strcat(szPath,inter);/ ]) `% F6 @" b" s% J7 V
  148.     strcat(szPath,"\");
    " p. E; ]  u2 P; X- x. M  X
  149.     inter=token;! V- u3 q! Z0 I4 o
  150.   }9 q) h( j) b4 j+ S# n: \- B6 o2 J
  151.   return strlen(szPath);
    % i# Z. o* l5 g
  152. }9 W$ R2 M7 `, {  [5 f8 T7 ^
  153. ' J# Z5 ~: ]" h/ p$ |1 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " E5 ~% ~8 E0 I% g3 B/ K* s! U2 \0 L( U
  155. {7 g0 ?" k9 y7 U: R
  156.   DWORD attrib=GetFileAttributes(Target);* i$ ?9 y- U# V- b! i0 ^+ d2 u; O# y
  157.   if(attrib!=-1)+ {9 z1 N$ E& V2 y2 J* _
  158.   {
    # f, Z* C& x% f# A- Y. d1 E, Q6 p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 o9 r6 m: o" C* L) h3 z& e8 M' Y8 O4 ?
  160.     {6 C& u) d2 [* u: J' o- P  g
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 [; S: S; u3 k+ j  T: h5 }
  162.       SetFileAttributes(Target,attrib);* |# s. k' \( N) P! m3 J
  163.     }" v+ H! I8 X+ K
  164.   }
    3 q8 p2 {$ C' P& `& A# ]# ?
  165.   CopyFile(Source,Target,Erase);7 X) i) i2 J' L0 d; P" j7 W
  166. }
    6 O8 ]4 n" N) A4 d

  167. ' o9 {  |, G! J/ S3 }5 g1 m
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; {8 {# p4 \+ [2 o3 V1 e5 s
  169. {  D4 @, R2 E1 H$ o
  170.      FILE *fp;
    . _% g& s  _9 P6 j6 U7 ~- T6 K
  171.      char  szBuffer[8192];
    , C) k8 F: Q! r/ v4 S2 }" v/ W
  172.   va_list  argptr;
    / \2 w4 v3 J( `% |) A* [, ^

  173. ' s( t6 K5 h, v* F2 E2 G: P7 n
  174.         va_start(argptr,message);
    7 L* C  e1 C3 A' Q6 J  Y
  175.         vsprintf(szBuffer,message,argptr);( C) F$ L+ F% u6 g0 u# P0 g. c
  176.         va_end(argptr);5 N* X! O1 A2 ?/ W
  177.   fp=fopen(FileName,"a");
    . I% w6 v6 K% \3 E+ R0 {0 }
  178.   if(fp)
    3 A3 \$ _/ e! }; {
  179.   {8 u/ ^; i9 {+ `
  180.     fprintf(fp,szBuffer);3 k% F4 g# v9 L% b* Q0 f9 w
  181.     fclose(fp);1 N% E9 I, P1 {0 F! D
  182.           _flushall();
    , I+ V6 T/ u6 j0 Z7 G2 s
  183.   }5 Z) v# [" `' k" ]
  184. }
    # y2 h+ p- F* q* }

  185. 9 j% y) i% i: X" @2 E' o2 S
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ A6 v3 N7 N- V7 X
  187. {8 S) l- r/ Y8 i! L+ V0 l1 m
  188.      FILE *fp;
    9 E5 G0 s0 N) p& r
  189.     DWORD  attrib;% G, {! k4 I& ]1 z; ]
  190.   attrib=GetFileAttributes(FileName);
    ) ?! P9 Q. m/ n0 J; `0 H
  191.   if(attrib!=-1)
    9 |) G% M1 c4 j4 ]
  192.   {0 W( S0 v7 b- ^4 X# g1 m* }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 m% m/ P9 [5 D; n; c, i9 x
  194.     if(!SetFileAttributes(FileName,attrib))
    . I# A5 ^( z% r* N
  195.     {+ \- K: G0 A5 i# ]: ^& u6 H4 x, D
  196.       return FALSE;
    : n, w* k* `- w
  197.     }
    0 I, y% l3 R# v5 g6 c" k, x/ @& Y
  198.   }/ Y7 e! u( ^) n9 i$ o1 u
  199.   fp=fopen(FileName,"wb");: f, [4 W# N8 m$ F. [
  200.   if(fp)0 J$ K% d4 A' ?- `  n5 u
  201.   {
    : }4 P! @( [6 c* ?' o
  202.     fclose(fp);
    4 z. f" F8 `: v
  203.   }; J% k2 N. t* T3 A0 D% `' l) L
  204.   return TRUE;
    ( e+ f) z! v8 Y$ S7 I$ |; y! k
  205. }% ]+ h; c1 y' D1 U

  206. , ~: W, v" Z, p- }8 s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ g  t9 w' B* l" Q, `7 ~
  208. {
    ( x1 l) S3 K6 b6 C0 S$ G
  209.   char filename[MAX_PATH];1 J% q' ^# ]+ T
  210.   LPUPDATEFILE file,olds;& |0 ?7 k% ~# q: O4 x, c# A" u
  211.   std::map<int,CString>::iterator i;
    ( L- S7 _5 P0 T/ Y( t* B* p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 T: B8 C) H1 v# G
  213.   std::list<CString>::iterator l;
    ( N  L" H4 d: ?2 ]* k8 f

  214. 5 X" w9 M% D. X( P3 d
  215.   if(bFirstUpdate)
    % v! c8 r4 _. B/ h
  216.   {
    5 P, K6 O& x* h0 a2 P% P1 I* N
  217.     dwCurrFile=0;/ N3 {* s4 v: P% c& x5 H% ]# O
  218.     bFirstUpdate=FALSE;
    + K' s' {; [% |# k3 [2 f, u$ r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ |3 t9 E) N' o! Y9 ~
  220.     {# u5 S1 |; b0 M! R" I5 K
  221.       dwTotalFiles=UpdateLocal.size();
    ; M, X# ]. U3 @& w( D
  222.       dwDownLoaded=0;
    ( e$ y2 Y; \! [; Q
  223.       bSilentStep=FALSE;5 }4 ^2 T  ~8 @  I) x0 h
  224.       bCompressed=TRUE;
    1 Z1 h7 D: Z' C* d. }3 k  c
  225.       strExtLocal.Empty();+ U; |# n0 R8 `# g& F# K" V  {
  226.       strFullName=(*i).second;' C) A: ]: K4 b2 N. R
  227.       dwProgramState=AP_CONNECT;1 i) n+ M0 K" ?) w
  228.       return TRUE;
    ; D3 q+ R9 A+ g+ @; m0 `" b+ Q
  229.     }
    1 p0 t3 Z( p3 q( [
  230.   }
    & w; e# l0 m+ c. {8 S6 J) @+ z
  231.   else if(bRestartUpdater==FALSE)
    + k4 n- ^3 \; ~7 \
  232.   {
    / H8 r4 g5 ^( j7 F; s# Y. Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 ?: w" N) e5 J1 M
  234.     {7 f# T# ^' i5 n+ x* R# q; E; j
  235.       file=(*p).second;
    ! \" A2 w- {) @3 E. j. z  p6 J1 I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' [% [; A% U  F. B! ~. v1 G4 W
  237.       {) Q8 q7 Q) Q" ?) l2 ?* D
  238.         olds=(*p).second;% h% X$ {2 I) T1 q* j2 g
  239.         olds->vers=file->vers;
    2 V8 H( u# X& r' u+ _7 I
  240.       }
    8 ]! e: Q4 l1 E# i* _
  241.       else. [  c! w1 j; G' Z& ~& o
  242.       {2 X- |( H: p& Q6 c4 s' K3 i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 B7 f& |' {( `2 ?# ^3 A/ [3 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; ^# C: G3 y  B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 v1 ~, [; N) t5 B1 b8 J0 l
  246.       }
    5 Y9 i" a; x: J# i, n
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  O( [7 n! {) k/ g; e
  248.       sprintf(filename,"(%s)",file->file);/ {* h3 K8 p5 Q% y& d3 M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 }$ ^3 [5 H+ Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- R' a6 q, \, C8 ?
  251.     }
    + X! \6 U/ ?) t; A) K( Z
  252.     dwCurrFile++;+ n% Q. L) k) T/ t2 B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). L7 N0 y; C0 ^
  254.     {
    % x0 I. o: f  H( s/ P: Q
  255.       bSilentStep=FALSE;
    ; P7 E# J3 h$ \
  256.       bCompressed=TRUE;
    8 I# Z- Y. H7 O' O5 _. K! H; R
  257.       strExtLocal.Empty();
    2 O" _, M1 D  }% G  s
  258.       strFullName=(*i).second;, w) `! q* }! v( M3 x
  259.       dwProgramState=AP_CONNECT;: G" ]0 f9 i# J  W
  260.       return TRUE;! A" E( p" ~+ C$ _; x
  261.     }7 Z& G) j( @$ K, ?
  262.     if(!bRestartUpdater)
    : e1 e6 S+ x- x2 a
  263.     {0 {- `8 ^) _/ B6 {/ l  L
  264.       int iCurrSize,iFileSize;
    / {7 O2 |; ^! }
  265.       iCurrSize=0;
    8 q/ T4 v) t  N2 h1 B& j
  266.       iFileSize=UpdateList2.size();
    , e/ M, b2 _- H# c4 a. `* Z0 J: Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . ?% ^: U$ Q0 Q, V2 ^* C6 a5 \  A% y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 X5 w# `, ~0 {3 S% h6 l& u, W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 y: p0 c/ F, [5 L9 p2 [1 K$ r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : n  e' ^3 c9 y. g# N) U
  271.       Fclearf(".\\update.dat");( T3 k9 x0 v. r. @4 q# G
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 S: ?6 T4 P* R# R) f8 y1 y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 s5 M% M$ J/ M8 d4 @" T6 W
  274.       {: O4 g$ M+ H9 t: H( ~( D  S
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % }- L' I: {7 B+ H2 M2 R( W
  276.         {( m; P4 U0 Z" q
  277.           file=(*p).second;
    ' p/ J/ Z1 B, H# U( P/ O1 J& [
  278.           sprintf(filename,"(%s)",file->file);
    % m, c8 q6 h  K  o1 [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % f/ R; v- r% N: g. C# d/ W
  280.           iCurrSize++;
    + D' Y5 B4 T; o& Y# I: k! M( C4 w+ ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! {* C' X6 t! Z- \# R6 G3 [9 y
  282.         }
    + k5 V( W" \5 |* _
  283.       }
    * ]5 S; T! ^9 _: R$ b
  284.       unlink(".\\update.txt");3 E  U& S: y; f
  285.       unlink(".\\update.tmp");
    , o0 O& c3 ^6 i7 U& j# L
  286.       Fclearf(".\\checkversion.dat");5 c1 E  B2 }( D9 K9 i; ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# z5 Q  b9 n0 y5 l) g) T
  288.       if(UpdateLocal.size())5 I% n& r1 A3 U. ~) m* U7 b
  289.       {
    + [1 X% H* R1 Q' D
  290.         UpdateLocal.clear();
    + d' ~1 n5 K7 J! P9 i6 O1 h
  291.       }& x$ @) ^+ n& F# |
  292.       if(UpdateFile3.size())
    & h1 q) P. X1 Y2 M
  293.       {
    . h3 c' n. c) ?6 ]* U& r: n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # [9 i% ]! u: {8 \1 r
  295.         {
    , d( C6 N: B7 L; B2 S( x4 ~
  296.           file=(*p).second;
    . T, [) l1 r( x/ X
  297.           free(file);9 U: A3 T. X$ X3 c4 J5 }3 ^
  298.         }
    6 J/ x+ s1 g. C3 E' {" [
  299.         UpdateFile3.clear();( y! }' S' ?# C: Q
  300.         UpdateList3.clear();  N3 _$ c# _- R$ @, `9 q3 |
  301.       }
    - J6 r0 ~" S5 |. [/ ]8 o. v
  302.       if(UpdateFile2.size())- @0 H8 r/ }* q1 _1 N4 }
  303.       {
    6 |' n7 v, E/ Y7 |- w& f  l2 M( C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" @9 }  R# {9 j
  305.         {
    ) D. i: r5 G  r7 O  B
  306.           file=(*p).second;
    ! x% l$ E2 b1 I. O9 }  G0 |
  307.           free(file);
    ) h2 c8 N' u8 p) ?3 ?
  308.         }
    # B3 L$ P6 @7 d: R! g5 p0 h) I
  309.         UpdateFile2.clear();0 {* S1 ^- w( ^: T! x2 I5 ?
  310.         UpdateList2.clear();" p* b. Y9 e" b4 _# t
  311.       }
    6 l' H) z2 t8 }; J8 x6 M" Q
  312.       if(UpdateFile1.size()). I0 Q* {$ J9 |7 E9 i6 ~- K
  313.       {
    * e$ b1 [: m( }& U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + Q: ?% W) p  {* @+ c
  315.         {
    & u& j, L6 W6 a$ C: B* |
  316.           file=(*p).second;9 k  \4 Q& r$ b1 F! i; H9 |
  317.           free(file);: F5 J5 L! |' h4 d/ r. A' `( q
  318.         }; @- `; t% x! s" H/ V$ o* N5 @' e
  319.         UpdateFile1.clear();
    5 i- A1 I; i3 `+ c9 |
  320.         UpdateList1.clear();
    $ r+ r, ]* g& B  X6 Q" D9 u
  321.       }  i) E( b6 w1 W/ O/ x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ u) j. N5 f5 T: C. y: A3 ^! ]
  323.     }4 V! r: b  `9 W2 J9 i- z4 _
  324.   }1 k: M5 `2 G" i# ^& U$ a
  325.   return FALSE;
    : ^0 h" U% s/ p
  326. }
      ?+ j7 G) l+ \0 ^

  327. 1 t$ E3 f. R# K; ?6 s. I
  328. void CRevAppApp::ClearAll(void)1 c+ c1 d+ ^+ ~2 B, q) t* Z) H* C! O
  329. {
    6 i0 U( \7 x$ e# j& G, h4 o
  330.   LPUPDATEFILE file;: E; L2 Y$ q$ I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) N6 k+ `' [2 l# H
  332. 6 N/ U. d( t) U1 j/ R, T) ~
  333.   if(UpdateLocal.size())7 ^7 T9 s) h2 a6 z3 n5 v
  334.   {
    9 H& X7 ^' a. r) j
  335.     UpdateLocal.clear();1 c1 y" G! E$ {: j& G' U
  336.   }
    , P1 z* v; s) {9 L: Y% ~
  337.   if(UpdateFile3.size())9 n1 A! G( c8 a  a7 \
  338.   {
    : H) b( N8 b8 k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- r; ?5 `8 T! t: u' B
  340.     {
    , M0 P! X2 {# d+ a& F. c" F
  341.       file=(*p).second;
    + f9 n! I" c9 M; ~2 F
  342.       free(file);
    6 H- E. J8 _$ e# @. l3 s
  343.     }
    + w9 m2 @6 D- ~
  344.     UpdateFile3.clear();9 y% V0 {0 ?8 Q$ g0 `4 e
  345.     UpdateList3.clear();
    # a& w) T6 _0 f2 W8 n8 b  B
  346.   }
    4 Q+ t" x1 |8 w
  347.   if(UpdateFile2.size())( H4 I  t2 |0 o% ?' a" N
  348.   {) f& i# s$ A; w% c" ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . Y3 k( D/ u& B1 T: ?! n" O
  350.     {
    6 Q% G  z) j1 V* b7 \
  351.       file=(*p).second;/ R. V: S0 P, h% s3 }$ R) b1 c/ q
  352.       free(file);* G4 ^! c  H+ `
  353.     }
    ( A% S1 E$ a" k# m
  354.     UpdateFile2.clear();
    ) [6 l' k6 O6 n+ i. j, y6 ]
  355.     UpdateList2.clear();
    $ I4 ~4 K6 F4 w! f4 k& u" I
  356.   }
    ; T0 I: l' ~* M1 y* a( P
  357.   if(UpdateFile1.size())
    $ X; d: x$ x9 P/ P2 }" `6 E  w
  358.   {) Y! J: Z1 S. n$ }4 q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # o  w* P7 Z3 S
  360.     {
    * [/ W. i/ t; j0 X5 A
  361.       file=(*p).second;
    3 G& Y6 \( v/ x  \- i6 v) s: ]
  362.       free(file);3 P- _2 B2 u: e3 @# h7 F& S* g! o
  363.     }
    0 P! O0 X5 N7 f4 p
  364.     UpdateFile1.clear();
    , N2 Z2 r  `( _; X  t9 w. I% d! Z/ [
  365.     UpdateList1.clear();6 y9 s% O) g: Y* z6 [& v
  366.   }
    0 g  s7 X' Q' n  S
  367. }  # g" c- z4 E/ H3 s4 ?" P: L! D* C
  368.   : `# z6 D0 U/ i4 m9 m) b* Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 m* K% T  }! w! i; F! r+ s7 y( M  Q
  370. {7 q% ^7 |( ]: X4 t
  371.   int c;( u. d6 ]8 W- b5 p4 ^, v# r
  372.   LPUPDATEFILE file1,file2;! O+ C0 p9 }6 |( q& n2 e& G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: r; x- o8 T& u6 n7 G
  374.   std::list<CString>::iterator l;. q8 W; {2 S) P
  375. 0 {- h9 y5 A% I; O
  376.   UpdateLocal.clear();5 k+ T) H6 h) c4 q3 j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + ?5 k8 q+ m) T3 S5 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 l8 D0 `/ f8 v: P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      H" J. k+ @# H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 }) ?5 ]  U" U
  381.   if(UpdateFile3.size())
    : A6 _9 b$ Y/ h# k' L5 B0 @5 Q! B
  382.   {
    % I* \( k7 B( y1 `4 W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 i6 S* _& w/ P8 @0 Z
  384.     {" O6 D1 d7 w+ n' D) f0 b
  385.       file2=(LPUPDATEFILE)(*i).second;' O4 _! C6 Q# f2 U8 Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 G! O& y/ D! C/ T
  387.       {% g! L, n( ^  |3 A. ?  Y; D5 \
  388.         file1=(LPUPDATEFILE)(*p).second;* d1 N- }+ z7 b: n$ q1 d8 w! T% F& P6 a
  389.         file1->vers=file2->vers;4 y8 C% m" j0 u# M# q
  390.       }
    6 R6 j( ~9 T$ H! C! H0 @
  391.       else
    # a/ Y) ~* {! Q4 z& V  k
  392.       {1 R5 G- a( j9 t  S3 n5 B/ q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 z* ]# Y" c. c4 g, S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ v# v/ w$ q! m+ H: H
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- x- P0 b' e& y7 Q$ U  T/ P/ o# R' g
  396.       }7 v7 n' j' h  e/ e# O% h
  397.     }
    ( T9 q; U! [* @& X9 L! v* w
  398.   }6 ]& a4 ]7 v; H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& X3 Y) Y3 u$ _/ X
  400.   {
    & D# c1 }+ v2 h+ {& r% B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - M9 _5 ?! ?$ p5 u1 y) u. Z
  402.     {9 l' H7 p8 X. k$ p, [) o
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 Z' u  ~5 J2 c* {& Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / u/ I- b. `8 ?- z# x3 U
  405.       {
    9 H9 I5 X# Z! j/ C% {4 T% ^
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 b; V. z# d4 z7 B' m4 m
  407.         if(file1->vers!=file2->vers)
    7 ?8 {$ ^  D' ~' C# \  Q2 I
  408.         {( \' a  x9 ?) V3 {1 I3 l3 e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' e* S+ g7 j) x* K$ P8 N+ Z# @, H+ [
  410.           c++;
    9 s/ ~! L+ J( f
  411.         }
    . C. [- }( I, P7 U4 {
  412.       }
    ! Y4 l- E7 l4 Q- X
  413.       else; V2 M2 H& J4 ~% R  u: e; g8 w
  414.       {$ q; q0 Z/ f# s; ^( s5 N6 N, X( q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 M( c0 d" k% d" ]" f
  416.         c++;. L! K1 r5 O; B2 z% J3 _; V$ g% R
  417.       }
    2 Z/ v' h" ^0 @/ u& [: C9 N6 r! \$ {
  418.     }
      A& @; C, O1 b- w% q9 x5 t; _, B9 S
  419.   }
    , g7 k$ w2 S; w" h- z9 X  O& D- H2 t
  420.   unlink(".\\DownLoad\\update.txt");" Y* \  i# ?/ M9 X1 Y6 N! p
  421.   if(UpdateLocal.size()) return TRUE;
    & U% L& ]( S" j8 r, @! r. ~. o
  422.   else                   return FALSE;  r, G4 Y' I9 O/ J. ~$ i' q  Y
  423. }0 C, ~' R( ~+ E7 v* T9 I& S

  424. % I7 h; V1 K6 {) N& S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    . J* X9 ?* n: D# f) T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 L7 d' b7 S2 Y
  427. 9 v3 t1 h0 L% h2 i

  428. 8 F" `, C/ e9 K7 t
  429. # P* ^% I9 m- N: D! M6 T) r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; M# \3 O5 X  D# {
  431. {8 T0 U1 B6 G- J4 P! N( m/ n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * ?! H# e, l4 }$ L$ }7 A( I6 `7 c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 {7 r$ A( L, a6 R- p3 [4 P
  434.   {
    5 {, F$ `7 F' ?* B5 D
  435.     char szLanguage[50];4 v5 s& ]# C* l( B, X; M" e4 e# I! k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. L0 p# J5 q) u; L) G3 G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * N" [6 C" Q2 \4 h6 d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 x' U; j2 w  Z- k
  439.     else                                   m_iLanguage=ENGLISH;' }# Y6 C! B) j, m& _. J
  440.     char szRegister[100];
    0 l8 m' w! j, v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      S4 C, ?) ]" F& _
  442.     strRegsName=szRegister;! r% E. e1 }1 P( D
  443.     char szPatchURL[100];
    , z- X4 L9 K$ {& Z% H6 \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 W$ e  X- Y3 h/ F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. g0 k) x8 {6 Z+ |( w
  446.   }
    6 g$ L& K+ J# q5 P4 z* w3 {6 }
  447.   else
    ' ^4 ^8 n6 W/ o9 p* Z" U
  448.   {
    1 U) r: q. H& T; @& R& a$ Z1 T5 k6 U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 U9 \# D4 h' [  B, z( _
  450.     strRegsName=DEFAULT_REG_URL;# c3 V* l  W& k: b- w
  451.   }# I. J1 s5 c; v+ V' e, I* T3 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)# T& e# a- l+ {5 j
  453.   {
    7 ?6 V5 ^( x: F; {
  454.     char szIP[50];
    4 X' q! L3 z; |  E0 \1 {7 p
  455.     char szDIR[300];6 Q) b9 D6 I. l; _6 P* J
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    / Y4 @& u9 X8 p! T, a
  457.     {! ~0 D1 ~1 d  u+ M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 X3 v" ]$ u$ s+ a$ z: d) Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 N: x0 S! m$ I! b8 f6 r' r
  460.       strHostName=szIP;
    3 T/ @  S; u) ?) m/ c# p
  461.       strHostPath.Format("/%s",szDIR);9 m* W* P) B; k2 x: n2 X
  462.     }
    " V( W% Z2 L' O- w9 w, f
  463.     else
    - q1 Y  P; g4 Y/ W; ?7 R( p% O
  464.     {
    0 B( C4 \0 F" _: |* X( l* f
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 R6 S+ [) h0 f# w9 e) s; C7 T
  466.       {
    8 J8 W, @6 M. \. U9 ~5 i4 y; Q
  467.         char szLanguage[50];  _- N1 a& z; E$ M- a) n! \% L4 u5 l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % U) ~  J& F) N8 d; N/ w) u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ B% c+ T+ e% i5 ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / x$ a) U; Q8 _2 r, r$ \. ]
  471.         else                                   m_iLanguage=ENGLISH;
    ' D/ M! H3 Z5 u$ E; f1 E3 S
  472.         char szRegister[100];
    # S4 O" s+ J3 S  _* r) Q) ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " @5 w% a3 G, F, M3 S4 X
  474.         strRegsName=szRegister;
    6 l& Z- i- P, P
  475.         char szPatchURL[100];( z1 t; e1 S' P+ @' K4 v
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% `. Q$ |7 ], E; r5 [3 M6 D* U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: c. ^" F. A' w" P1 e7 R0 B% ^$ `
  478.       }
    - c" h3 K9 s$ }( ^) s$ R1 B0 r4 q
  479.       else
    " N8 X9 F$ P  Y1 p/ Y& {5 E" u
  480.       {
    , l/ ], f* G1 U' L& q9 F& h0 k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 W& ^$ d- c+ X$ m
  482.         strRegsName=DEFAULT_REG_URL;
    ) k4 ^, x  b- o: O" o. M
  483.       }
    3 _1 P+ A. t( z& n
  484.     }( O4 H6 i" E8 E( A' y
  485.   }
    + C0 H/ x! t- _' R% X; @
  486.   return true;
    8 M) {4 _5 }3 k5 M6 W* [
  487. }
    4 N% g% |7 A& N
  488. & R! X; m1 ]4 g
  489. #include ".\ZLib\unzip.h"
    6 {' @2 M1 i+ L; r. @1 n1 J' x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 Z$ _/ t, S/ ?/ a
  491. /////////////////////////////////////////////////////////////////////////////
    ! u& R; K0 `9 e  R
  492. // CRevAppApp initialization; O0 }% F* t9 r0 ?( U

  493. & f" B$ {$ k5 K+ U5 q
  494. BOOL CRevAppApp::InitInstance()
    & X9 W) E2 e5 F4 `* |& I+ B# C3 ?. y
  495. {
    7 R7 y1 ?6 l9 S( h2 u5 K4 R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& Q$ F9 N* c, p. n

  497. - J2 c+ B( B! B
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " `) R1 v4 w/ v+ y% j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 `& t# h# G+ Z( H8 t& e. i5 ?- B
  500.   {
    4 z4 O+ W7 e, @( R) x" I& m. f# a' F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * e$ Q+ _/ Z# T- A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: }9 t& a& C# Y/ z! ^. K- ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - ]" q1 n7 u/ D! U8 z
  504.     {
    5 e+ |9 b; F2 Q! |) `! n
  505.       strcpy(szPath,szPathTarget);7 v  ]0 T2 O* A/ ?7 H* s
  506.       SetCurrentDirectory(szPath);( B7 Q) C& \* [1 }
  507.     }/ K; v# ]  q% z, |! j8 A7 c
  508.   }
    % Q0 {3 W4 v% a+ H9 [
  509. #ifdef _DEBUG* t2 a, ^8 |# H2 V+ B' Q2 U" {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      p3 H# P  v, z4 H
  511. #else: {1 B# k. \+ Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) \( r/ A3 u4 n
  513. #endif
    % I" M2 i1 f! @" L9 w: E
  514.   {
    ( }9 [4 H6 V5 \, g
  515.     char tempFileName[MAX_PATH];
    ) [. N* q3 _4 H' \8 e
  516.     strcpy(tempFileName,szPathSource);/ v: |9 a8 Q3 Y' c  I
  517.     tempFileName[strlen(szPathSource)-12]=0;' X: A2 ~/ b0 J/ R3 b, x/ s
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * s; v) n* C, W0 c9 x2 B
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( y  q4 \- @( V) Y  a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 M7 l2 ]/ I1 c% P
  521.     return TRUE;
    3 X9 l8 e8 X0 ?* H4 C$ L" @3 p
  522.   }
    5 T( q7 c( Z6 d) s. {
  523.   // Nuke 0118: Delete run.exe7 H, A7 n1 y  {% Q/ C9 K, c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 z' |' n3 }& U9 I2 E, A* h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' X  }( Z+ D# {' G
  526.   if(!ReadCfgFile("Config.ini")). }% n" r) N- Q  j! s9 K( C
  527.   {# _, s* z1 M1 e, D% E
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 q& |2 p# u0 d7 ^! z
  529.     return TRUE;
    & F; g  g+ y. u$ @3 [; Z% D/ W5 L
  530.   }& c( B3 e% M/ s7 y
  531.   HANDLE mutex;8 L/ E$ h! C8 G" D/ I2 B5 Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      `, L+ T; K  c; f* ]$ R: j( D
  533.   {
    6 U6 ]+ o9 S! h0 W3 {- R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 q% V9 b" Z- `" `1 _2 D, ~( p# v% u
  535.     {) k$ g- H% W% ]% c! l. N
  536.       CloseHandle(mutex);! _/ w% R! G! n$ b! C  ?4 P5 [; r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " p* I% r3 F) C0 i  u/ D% f2 m
  538.       return TRUE;0 H$ W7 ?, Y  e9 S$ X
  539.     }. X. w. q7 z" n6 f* x* E
  540.   }  
    1 h- K$ _  C2 j
  541.   CloseHandle(mutex);
      H" k4 R- M( R, j- G1 f/ h6 D
  542.   j# i) A& m/ M6 g# E% Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 N4 Q& }3 Q' w
  544.   D3 V* p5 d7 l+ \5 K; W$ n
  545.         AfxEnableControlContainer();
    9 k) A" B# ^! \( j: y

  546. 6 r4 ^2 X7 f: @: t- v
  547.   bCanUpdate=FALSE;/ [) M; y: W4 o) |  M# `. _# y+ z- t" z
  548.   dwStartUpSteps=1;
    / \: ?1 Q3 D; x2 {; g$ n. x3 V+ e
  549.   dwProgramState=AP_NOTHING;
    " ]3 _* v' j1 s! y/ g+ P4 b0 T
  550. " _& ^! X1 J( l8 v- U# ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. F# t* b  m. J0 Z

  552. 2 k9 a/ a8 J  N! ~. k( u0 M
  553.         // Standard initialization9 {" X, T$ a. t
  554.         // If you are not using these features and wish to reduce the size. Q9 Q  U0 w- N7 f+ l* j& j7 v6 q
  555.         //  of your final executable, you should remove from the following# f: \9 _/ R0 h4 B" u" w9 k
  556.         //  the specific initialization routines you do not need.: h( k# O6 F# P- J8 Z

  557. , |$ W  `6 I2 D. A: u! r
  558. #ifdef _AFXDLL7 @- T' N/ N1 b' ]; b9 C. `
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 q0 Q! o3 E, Z' S3 y
  560. #else
    2 [* D$ t# C+ F2 K5 h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 A& z5 O( y; D" a
  562. #endif
    8 F! i9 O; q$ p' z- u! m4 }

  563. ) T- {& {) d1 z' e, p* y8 ]
  564.   dlg=new CRevAppDlg;& K8 S/ Q6 }; {( E" H! o
  565.   dlg->Create(IDD_REVAPP_DIALOG);' F( T* ^# k, d/ K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 S2 A; W3 C- I
  567.   m_pMainWnd=dlg;3 a4 A% \4 B- p  d

  568. $ b( E- D5 K+ ~& U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 N* q1 o8 ~# r* Z

  570. , j# l# ]3 W( u' ?8 M" L
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - l5 t% [3 n% K
  572. //  ULONG_PTR gdiplusToken;0 f0 s) \# P5 I1 t6 D8 Z! a1 M0 Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 ^* ]+ }2 f- {

  574. ) s1 B' o! N: H* \" X# A
  575. //        CRevAppDlg dlg;. B1 o% @# S) F; @- V
  576. //        int nResponse = dlg.DoModal();: Z% ^' O$ ~, G$ ?  h/ a
  577. //        if (nResponse == IDOK)
    3 a# K9 S& q! c  N5 O- ?/ r
  578. //        {2 ~& x/ Q% B& O, Y" L* A
  579. //                // TODO: Place code here to handle when the dialog is
    / U7 j3 }- \- o% V
  580. //                //  dismissed with OK2 x# ~% V+ t# K) u
  581. //        }
    / W6 B5 _$ m1 Q, b. A
  582. //        else if (nResponse == IDCANCEL)
    ' _: z. B' N4 j+ g- f
  583. //        {
    # U3 T) j6 |1 @; i
  584. //                // TODO: Place code here to handle when the dialog is
    & `4 r$ h* C8 K) X7 l: T% p  q- g. \
  585. //                //  dismissed with Cancel9 h( S$ s2 {8 H- e3 e
  586. //        }- i  n9 x& l+ @4 a! X

  587. : J9 R5 x' f9 j. ~0 h
  588.         // Since the dialog has been closed, return FALSE so that we exit the! _0 B; k$ |" J! [$ x. i0 p
  589.         //  application, rather than start the application's message pump." |- H0 z/ w- N! E. n5 o) R# l
  590.         return TRUE;! z! ~8 t2 P  X- q' T
  591. }1 K$ \% c& ]- ~3 X! y( M" W
  592. # y- [8 y1 h' Q0 V9 a% T7 q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 r# C/ _. E. W0 F' n, x) b2 L" n8 g
  594. {9 b) \. l- w/ A
  595.   int i;5 @; a; _; |# }* u4 C
  596.   char *szRet;4 I' S% {. Q1 s( x

  597. % F5 u/ Y6 d' R
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    . c2 Y8 f* e4 B  O5 u
  599.   if(sztoken)+ X* [% H8 t" r% P  \7 D" C
  600.   {
    % |5 l* a  |: I
  601.     szRet=&sztoken[itoken];
    2 Y4 F0 i0 u! W7 o% b7 d5 G
  602.     while(sztoken[itoken])  z: H! s7 Y7 ^- C7 [5 E+ r5 K8 d
  603.     {/ `2 r# c' G4 d! i) M4 [" a$ q3 e
  604.       for(i=0;i<(int)strlen(token);i++)4 w& F  _/ l* X2 i  J3 c! Y( X
  605.       {" W3 j, Z" s! Q: t+ v9 e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ) f* H1 q5 a3 {1 R: Z/ M6 {
  607.         {
    / N3 j* j: `$ \4 R+ Y8 C: _! N
  608.           sztoken[itoken++]=0;
    0 _, \- C' h" u4 e
  609.           sztoken[itoken++]=0;
    ! L$ ]  f+ J- z; H
  610.           return szRet;
      V* `8 h2 X9 ^
  611.         }' m( A  @/ v0 r# e. Y- i$ m
  612.       }
    5 {; b, }8 P% X
  613.       itoken++;( y6 j+ d; L2 e+ b
  614.     }
    0 [* D& [- f9 D2 w7 c
  615.   }( T8 p; |! |) M* H: `% Y( v
  616.   return NULL;
    9 L, z0 s( }( g$ q) D, D1 _+ T+ {
  617. }
    ! b# ~- U$ c( c" t$ v) G5 u# x% ~/ c' ]
  618. & I" v+ n0 n7 ^* |
  619. void ProcessProc(long Total,long Current)
    $ O4 b' U9 l3 R. `$ j1 P
  620. {
    " S- I! K% g2 W- P! j
  621.         MSG msg;
    . g; }4 z, F% i* c3 X- V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 n  G, u/ F# ?9 t% e" f; ~3 U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 X& H0 O) I" L; N
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& g$ O5 N* C7 S, V2 j
  625.         {
    * D6 s5 p- }( X! F
  626.                 if(!GetMessage(&msg,NULL,0,0))% s( M% K( ^. t0 Z7 D& Z
  627.                 {
    - V- b. I- }; q; D8 i& p( ?
  628.                         return;# U+ e( C3 p0 R* c2 R- ^) i) t# g* e
  629.                 }
    2 @1 l. U' Q- N9 ?! U! k& a- l
  630.                 TranslateMessage(&msg);! ~) K& j+ N8 A
  631.                 DispatchMessage(&msg);
    . T# p) T( G: l/ R' c
  632.         }        ) g, j: F* k+ q. p
  633. }0 u6 C9 m. |3 j+ z
  634. 9 h0 ^+ \" B: i( m
  635. BOOL bFirstChar=TRUE;. W6 Z% Y, o1 c* F* O
  636. + L% _! }3 n! e/ D; q$ c  r$ V, _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 C$ Y$ l: U' _1 s, d
  638. {1 a6 E1 M6 L3 G( {8 }& Q9 z: p
  639.         // TODO: Add your specialized code here and/or call the base class0 b! Z6 ?6 p0 @, ]: Z- C4 e
  640.   switch(dwProgramState)
    * U( s2 Y  ?; f  j7 s
  641.   {
    : n# v3 k/ x# M8 [3 W; @: U
  642.   case AP_NOTHING:9 J# E$ g2 S" q' j( q
  643.     switch(dwStartUpSteps)" g6 Y, M* h. ^, X& V: c8 A; U6 U
  644.     {
    8 |+ R2 ~/ I4 E2 g/ ?, r
  645.     case 1:* M4 B. O% N/ p% a7 H; {0 ]4 M" U
  646.       {
    9 }5 _# u/ Q, \, k
  647.         int i;8 k8 t! k2 y! t3 B( t3 S; y2 a
  648.         CDC *pCDC=dlg->GetDC();$ K9 {& Y4 H* K+ q+ ]
  649.         HDC hdcwnd=pCDC->m_hDC;1 h5 E; E. A- i' }; i6 v. \
  650. //        Graphics graphics(hdcwnd);
    7 \  Z$ ?0 t1 F1 [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    7 `9 I( f, A* X. _) X/ `
  652. //        INT iWidth=bitmap.GetWidth();
    $ S2 p7 ~% {: l
  653. //        INT iHeight=bitmap.GetHeight();2 F2 ?  e* }3 ~3 i6 w* q& P* b
  654. //        Color color,colorTemp;
    6 a7 z" ~/ }+ Y6 G- X9 g
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . y1 a; O! l- H9 Y
  656. //        {3 ^9 l5 d% w) b; X1 ^  B" ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 a' [( _" ?* ]& e5 x8 F
  658. //          {
    5 G4 U, l" q  g$ A0 Z. f; g
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: g" U3 ^6 C4 C( `2 j) m
  660. //            colorTemp.SetValue(color.MakeARGB(7 y/ |; J8 @( D# V
  661. //              (BYTE)(255*iColumn/iWidth),
    / ], Z7 B, Z4 x/ A
  662. //              color.GetRed(),: G$ ^; s- _6 M
  663. //              color.GetGreen(),# z  s4 Y- i$ f  A- c- p
  664. //              color.GetBlue()));
    - Q4 ~3 H1 S* Q  I% g- o% H5 E# d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      ?9 @5 Z+ _  _8 p
  666. //          }
    9 p: U" t( v- \
  667. //        }, u. r( Q) S) l% N/ P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. U1 H" C8 i: F* F0 V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 ?( U1 w/ R7 ]2 g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 d: n3 s! L6 G  v7 b" D8 j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 G. N8 [8 ~! U) Q( t
  672.         for(i=0;i<240;i+=8)( [; {  T  M3 A
  673.         {4 s/ R' E) n4 z$ t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * n( @6 \  ~8 O: \8 K/ k$ \. r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 C8 i4 b( h. _) }. _  ]* S1 F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- R, \. s$ @8 {  ~3 m, b, A3 Y
  677.           Sleep(33);
    " O9 n5 f, ^* ^0 J. h
  678.         }  Y3 X1 e2 j, a4 i& i  }& q3 R6 B
  679.         Sleep(1000);6 r8 O# K7 O9 ~9 s) t) g
  680.         for(i=240;i>0;i-=8)
    ! R2 i0 w. r' D2 Y, l7 i5 H! ]
  681.         {" M6 d& @: Y% o2 \3 y
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + }/ A+ V! f9 K1 @9 Y% H. t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * c' w' m# R. o8 P4 Q9 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 G- j/ U0 T7 x8 M& }$ F+ [8 [3 Y' `
  685.           Sleep(33);
    : f( x% n! E. \; c6 `& m2 z
  686.         }
    3 b5 X  s% b9 x  M$ u4 M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 p- T! J" p: V, l$ P
  688.         dlg->ReleaseDC(pCDC);
    ) O; N& f! n+ P3 S
  689.         DeleteDC(hdctar);2 }$ x* Z- ~( k; J0 J4 k
  690.         DeleteDC(hdcsrc);! Y" J* s! d, q( Z4 r% B8 c6 ^4 Q9 t! [
  691.         DeleteDC(hdcorg);* _* F8 i4 R9 f7 H7 Q* X
  692.       }
    ; _* V* l+ h9 ^1 R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 z9 I, L* x! a/ d
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" \' v8 k6 z' \2 n  S0 g
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : C! U+ t' K% z4 _/ }9 d+ y; ]3 w
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 u' Z* u1 L3 A! D1 N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & m" S+ G- _! g) k, W' B
  698.       if(!Dn.Connected())+ m9 f+ K. _- q1 ?
  699.       {
    . V. o( _! k, s/ G5 q
  700.         dwTotalFiles=1;
    3 R3 B, k& r) b. @9 H
  701.         dwDownLoaded=0;
    4 J& x4 A! B5 e% y
  702.         bSilentStep=TRUE;
    + }% T; q6 H1 E5 R! E1 @3 K4 B
  703.         bCompressed=FALSE;+ O: S! a) {1 k8 I* {, S
  704.         strExtLocal.Empty();8 J! k+ ^! d9 ~, `: ]
  705.         strFullName="readme.txt";
    0 z# [$ l8 P  m. P
  706.         dwProgramState=AP_CONNECT;5 o& E8 e! o1 O* G, ?  [
  707.       }
    7 y) m* [3 K- n- z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : E* W9 d5 t3 Y/ |0 ]! I
  709.       dwStartUpSteps=2;' _: T" B" m" j
  710.       break;
    0 i6 O( r$ m0 P! P* X
  711.     case 2:8 {" a2 [3 w' A# R% E" u; b3 `
  712.       {
    . I# p. j: g3 g& f& g; U, P8 R
  713.         int iEOF;* C( G0 ]6 F3 r9 N" S7 Y1 w9 d
  714.         FILE *fp;. e- d7 U) }; q5 A, c$ j8 i
  715.         char szString[512];
    $ n5 `! _8 b! t' E# M6 }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 V: T$ P! q0 m# d" I- L
  717.         if(fp)
    3 m0 R# B/ |7 A
  718.         {
    $ ]) B4 L3 [$ Y2 S: A
  719.           do/ H+ z5 h5 R; K9 r2 k( c( ]
  720.           {) }7 y- B+ w& u* ^* T# D
  721.             iEOF=fscanf(fp,"%s",szString);- m; R: G* O4 c8 c
  722.             if(strlen(szString))
    4 ]2 M, ~/ x2 ]9 X, h7 X4 i
  723.             {
    5 \1 y% i' Y( @" m- d/ H& ]6 z
  724.               if(bFirstChar)9 S3 b/ w8 m9 `! M% Q" k
  725.               {
    + ^% P* ~5 k3 J& [- D! O
  726.                 bFirstChar=FALSE;
    & q% ?" K- |( p& a! ^6 `- |
  727.                 bConnectIsBig5=FALSE;5 W; l& d% L. f  V. T# C: l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * w) f. a' Y0 S: Y9 B8 g+ \2 v5 s
  729.               }( \5 P( Y. V8 }% I5 x( E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 _- L9 H+ j9 A& |& Z3 b5 z5 B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));+ W* K0 r3 J, u# l7 D
  732.               dlg->m_ListText.AddString(szString);4 ~- z1 C; S4 K' \7 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: `$ u" _% S, l" c0 S
  734.               *szString=0;6 _4 a0 @# W4 s- ^
  735.             }
    & L0 H1 C/ r5 x8 [* s) a
  736.           } while(iEOF!=EOF);8 y1 o$ _1 D# n) J9 G& H- G, _
  737.           fclose(fp);
    7 {, c2 a) J( _( j* ~
  738.           unlink(".\\DownLoad\\readme.txt");
    - i" N& l, A- I0 s! h. k* s8 g
  739.           dwStartUpSteps=3;2 l; ]6 K5 w1 G: I) b8 I
  740.         }
    ( k; |" k0 w, D: z% N
  741.       }& B# ^* x% q7 `/ i" S! P
  742.       break;
    - p8 y( Z+ Q6 J# i3 {  p* b
  743.     case 3:* i% W3 \) ]) u
  744.       if(!Dn.Connected())
    ; s3 T6 p4 E4 O9 \( N
  745.       {
    . l) b# w* B) x1 W# }- N5 O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 g( b9 p) D! a* l- I2 G9 q9 l
  747.         dwTotalFiles=1;
    # \$ T7 a. s$ ?6 z) R8 {4 }
  748.         dwDownLoaded=0;
    2 m5 i4 w7 k3 |
  749.         bSilentStep=TRUE;- m- t; T4 M3 j
  750.         bCompressed=FALSE;
    ) Y) S0 T$ X/ d1 \  Q
  751.         strExtLocal.Empty();
    / q3 F6 D9 M1 D; n, v; Z3 s  T
  752.         strFullName="checkversion.txt";' y1 `5 R9 q4 T2 G/ A
  753.         dwProgramState=AP_CONNECT;: b* f/ B* l! {
  754.       }" U. [& b! m# N: g
  755.       dwStartUpSteps=4;, U/ a2 a( {; r5 M0 K
  756.       break;
    ( y* p& K6 k  T. ]
  757.     case 4:: L& |3 M9 ]0 l. U' {
  758.       {& ~" z$ m- i$ j+ o+ M: b( [. O& r
  759.         FILE *fp;
    - Q# Z9 a6 s0 e( y& x. b) b- O
  760.         char szString1[128];
    # L# U' ^8 s" t" q$ y
  761.         char szString2[128];
    ) l6 A! u3 }: W( W# Y6 u( ?
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # g, u- z: \9 s" ^& W
  763.         if(fp)
    4 w4 ~, Y. e( i- F7 a* w
  764.         {
    & U- L: e3 ?7 Z
  765.           fscanf(fp,"%s",szString1);% G$ ?/ {0 |& y8 C# A- U) e( P
  766.           fclose(fp);
    ; y  i! E( ^+ z! W0 Y
  767.           fCheckVersion=atof(szString1);: ]' d# B) u: q5 y6 h3 n, f
  768.           fp=fopen(".\\checkversion.dat","r");' l. G3 \: M) ~& z+ r% q' F
  769.           if(fp)
    ! c9 N9 v+ e3 N" D. O
  770.           {/ D* t9 p$ @7 [9 O; A
  771.             fscanf(fp,"%s",szString2);
    % Z" y' F7 T- x& ?( y! c  m
  772.             fclose(fp);9 g9 I/ d4 [  W; F
  773.             if(atof(szString1)!=atof(szString2))
    * `4 b, A2 [' Q0 O) A9 Z* W. f
  774.             {9 F; M# `: c: T$ R
  775.               if(!Dn.Connected())3 Z) e9 O2 ]$ Q' |" g8 U
  776.               {# A/ R4 }5 [1 Z9 X3 K
  777.                 bFirstUpdate=TRUE;
    9 V/ S. g- u7 u# u8 A5 H* i! V! `
  778.                 dwTotalFiles=1;
    9 S6 B9 U) G' R5 N" A
  779.                 dwDownLoaded=0;
    8 j& Y$ f" O# P  o' K4 o
  780.                 bSilentStep=FALSE;
    & k- R; @3 H  |8 V9 @. C$ T
  781.                 bCompressed=TRUE;
    / T  Z3 Y! ?2 S* w$ H
  782.                 strExtLocal=".\\DownLoad\";+ G* d. H# N4 o7 D0 R) O) ~" U
  783.                 strFullName="update.txt";
    2 m$ C0 a$ j# k1 z2 H, G) V
  784.                 dwProgramState=AP_CONNECT;
    9 z3 j/ T) J  ]& A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * m5 m# i5 f. n( \9 N  T/ q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 B- W3 K* S( r3 W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ |/ {% b% R# f( Q3 J6 X* W1 k

  788. 9 [5 D2 c5 r9 O" }
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! I7 `" K8 |7 x
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 I3 O" v' T# ]- Z# y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); O* L: F2 g5 v& M- d& Z
  792.                 {
    : C  B4 n4 L$ X2 T% p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 P: c" D6 I( Y! ?, Z; J$ F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 L2 V. J8 Z; P6 r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) S1 I5 E4 E" k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! C+ ?6 M. o; ~. y  C
  797. 5 S$ }, a# X2 |# r5 n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ w5 `, A& z6 A; e7 Y" b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & R7 O, E- S1 ]; B
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# T; y2 t; o+ F5 x. s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 X7 X$ a5 J: z* I" C
  802.                 }
    5 I) T: u7 v0 Q% r
  803.                 dwStartUpSteps=5;4 ~0 \2 `: |+ ?. ]
  804.               }
    ) j  x  b6 E/ ~  T& r+ _( F
  805.             }+ Z. N5 G& g* L
  806.             else1 v" [+ w/ V8 L3 B
  807.             {
      X' J( h* x& w
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 E8 f4 [# |4 g, t9 \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & ^& I( X/ @  A0 ~8 i! Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 q4 y/ O" J2 M. k3 t  z& B
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 Q: c0 q/ L% z% x# ~
  812. 3 ^; {2 y1 ?2 j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 o' b2 @1 s. z9 f# P- J
  814.               dwStartUpSteps=99;
    # }8 [# o2 T( |9 Q& A% A( p3 Z1 g- ]
  815.               bFinishUpdated=TRUE;
    6 Z$ V  Y' D7 z$ [1 _/ ?: O
  816.               bCanUpdate=TRUE;
      j2 G2 X2 V: I9 e! o
  817.             }6 O4 L; @" c: H. j9 T3 D0 n
  818.           }) a5 V: {( x( `( ?& F" s; z5 Z
  819.           else
    0 r3 [2 q$ v3 t$ C) `
  820.           {
    9 [9 u7 a' h, v9 ^
  821.             if(!Dn.Connected())
    % q3 d" t( M( |8 d9 `: {
  822.             {
      y/ y: [- h4 I& H
  823.               bFirstUpdate=TRUE;
    $ @5 ~: |' o" p! d, m
  824.               dwTotalFiles=1;
    0 G& b- F, c% {: |
  825.               dwDownLoaded=0;
    4 m9 I! U- V+ g8 y6 {& Z2 Y! W% e% G
  826.               bSilentStep=FALSE;
    , R) j1 w$ q3 F. s' g3 j
  827.               bCompressed=TRUE;
    ) Y% W) `" H1 g. j( D3 m
  828.               strExtLocal=".\\DownLoad\";
    - _% l6 k9 `4 c
  829.               strFullName="update.txt";6 _1 t' B  q$ b: l4 w/ d3 T' ]
  830.               dwProgramState=AP_CONNECT;6 A* a7 x/ @* Y0 N* r/ R9 J: P+ }5 l
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( L5 i$ N6 Z+ T2 |+ s& x  o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , l% Q- R) k6 \7 ^, v  H8 t
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 q9 p/ \& v; ?% _) B; n% n& [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - v: g6 z. c, I
  835.               unlink(".\\DownLoad\\checkversion.txt");8 H) C1 b0 T6 g0 j% V
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    / O6 o, R, z" |3 J( L( t. C
  837.               {
    9 J4 A1 K4 n7 a; U+ S5 E0 y7 M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 P$ ^6 d" I* ]+ ~4 r' Y( _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ W/ b- X: f. K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( i. d. B$ \2 E. c8 f% ]# C
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  m1 z* ?) H. N  n  V
  842.                 / {; c7 t. w. Q' `+ j# J) p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # ]3 \: {9 ?) |# I9 x# Q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% d0 C3 {# F3 F! ~4 _7 v2 J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: W: \7 A+ J9 k. R1 f; i9 D6 j8 @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : K  Z. S3 [' I- ]$ X; b, \
  847.               }. C* j  D5 c! g" w* J. U7 [
  848.               dwStartUpSteps=5;
    5 {. w& r5 ^5 L0 q+ w5 @
  849.             }
    * P- p, o# M( n6 u
  850.           }
    ! P" T" A7 P9 k* d
  851.         }1 _6 J+ F& [+ i% p' C; k
  852.         else
    - E, f& ~7 r8 k
  853.         {
    % n. p, u9 ?% @5 d3 a$ q; j
  854.           dwStartUpSteps=3;
    4 K1 `4 a. f  ^
  855.         }( @4 j: [/ A& G6 }. p
  856.       }
    / U: H4 h# y, T' i2 |( i0 J0 s, v
  857.       break;5 x2 T3 ?. f% d3 i  ~4 {4 K; d1 m
  858.     case 5:, t, k- t0 X5 _* p
  859.       {
    2 i9 G6 T& @' k- o7 a5 B8 `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)# r) \$ G) @# w- ]1 E$ I$ t' `! w) ^
  861.         {
    ! k/ U; w9 Y4 X
  862.           int opt_overwrite=1;" l! s$ u2 j/ p$ ]
  863.           int opt_do_extract_withoutpath=0;- N( _9 {' o! Y% {1 q* H0 ?
  864.           unzFile uf=NULL;
      C* x2 n3 A: S  p
  865. , d) Q% @/ H! k) [2 Z
  866.           uf=unzOpen("Wsa.zip");- @3 c9 u' O7 {7 q" H
  867.           if(uf)
    6 S- d* Q% x. T! n! z- E
  868.           {
    ! @) R7 t, q7 ?: o) _, o7 S$ b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* o+ q2 R! L1 f+ P' i$ C
  870.             unzClose(uf);
    " z+ Q- d# ~( s! I2 V6 Y( ^
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      ?: K4 r8 ?% X" ?' P/ L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");; y4 J$ z0 H+ F/ I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. `$ Y9 z  [- e9 t/ }+ ~9 h
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& y4 _+ C5 F9 ?
  875.           }- E6 t( j  y4 e: h2 P$ T( m
  876.           DeleteFile("Wsa.zip" );
    3 Y% x3 a. i* R
  877.         }
    9 T. E, |+ h) W! I5 N; [4 c- t" N

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

+ @- @; Z, C& H; W: R6 x% z; P* z7 L( L

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-14 08:14

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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