CSUpdate.exe源代码

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

# P/ l% C& G( b: \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 v( Y* v* C% ~1 f, Z  _, R
  2. //
    4 I) C: ^- k9 c" y2 e& X
  3. * }4 Z% l: ^' G) h% k' p/ [
  4. #include "stdafx.h"
    . `1 O& u/ `5 a/ E  s, k

  5. : N9 P9 v, C. a
  6. //#define UNICODE
    7 |& V- _4 |8 n6 W
  7. //#include <gdiplus.h># t$ ]( n& I4 v- ~4 Q7 s- q
  8. //using namespace Gdiplus;
    5 s' w& o( L) k4 f8 r4 C

  9. # M( k' l+ v1 y+ l0 e% U) M
  10. #include "RevApp.h"  t4 J# ~0 O2 Y) ^, R7 d5 U
  11. #include "RevAppDlg.h"
    ' F6 ?; Z9 c0 m  q0 L  |

  12. ) {( i# k& V- y3 n9 {( D
  13. #pragma warning(disable:4786)) a0 K( }) z) p0 g  i- S
  14. #include <map>/ S% a) Q4 a5 w" v
  15. #include <list>
    9 m) v# M0 F" f; C; j1 M
  16. #include <direct.h>6 G, d" B8 `2 w8 _1 l
  17. 4 a7 |8 A$ K. e3 y: `
  18. #ifdef _DEBUG/ v8 h/ t1 M- v  s$ W% Z& @
  19. #define new DEBUG_NEW
    4 J9 o3 _. f) ]" x! v, G
  20. #undef THIS_FILE
    ! M0 H5 y/ Z# v& S" x. [5 ~
  21. static char THIS_FILE[] = __FILE__;9 |. T; \) L$ v' I7 W* u
  22. #endif
    & k0 k3 g' F3 e
  23. #include "SkinResDef.h"2 y/ N* _8 z5 w/ a( G  S) a1 P
  24. #include "ChangeBG.h"
    * T" f7 \' R$ H$ m( B
  25. #include "AFXINET.H"1 X! V3 _: B$ z% ]: T4 E0 J
  26. * g; K& {7 a( d! W2 a- o$ V
  27. #define TRADITIONAL_CHINESE 03 p8 p: F1 ^+ ?# D! x5 ]
  28. #define SIMPLIFY_CHINESE 11 m* R& T8 y0 R0 j. w: k8 x1 o' ^
  29. #define ENGLISH 2$ D$ c8 G3 V7 g5 j  }& A
  30. int m_iLanguage = ENGLISH;. n# S! g2 ?* c1 A1 n
  31. /////////////////////////////////////////////////////////////////////////////
    ( p9 {: t3 I+ W: N( C8 i- w
  32. // CRevAppApp! p8 r, `& y6 \
  33. # @" u$ p+ r2 T2 ?  G, A6 r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 X3 W9 q3 U* A
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 `4 \8 M( w( c# o& S1 Q  ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' H5 S* E+ s( j# w% Y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 H3 N6 e( L( ]) U# Y
  38.         //}}AFX_MSG+ m: ]7 F+ m( _
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - p) \" R; L0 y' A8 w1 ]* o
  40. END_MESSAGE_MAP(), w6 J7 C. O3 [& W+ i& _, P( @
  41. . f4 y% m- h, q; |
  42. /////////////////////////////////////////////////////////////////////////////
    ' N: {  w9 _2 N
  43. // CRevAppApp construction, m; W6 ?5 u' I/ H7 `# o

  44. & l* u, k2 F% \3 `3 `
  45. CRevAppApp::CRevAppApp()6 c" z# D. |, q
  46. {
    3 \, }5 i8 A+ j1 N  z8 V/ h9 y
  47.         // TODO: add construction code here,
    , _+ D0 g, d/ J9 w+ q5 S. w  C& Z
  48.         // Place all significant initialization in InitInstance
    0 M' }) r- ^  e+ R7 ?4 C
  49.   bDisplayIsBig5=FALSE;
    $ l5 U4 F# Z% i+ g8 h+ o% j
  50.   bRestartUpdater=FALSE;
    $ G0 M* @# `% n, M
  51.   bFinishUpdated=FALSE;
    ! A( c  K# n5 e& c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 Z* \. n  N+ ]9 c! [/ C' W
  53.   InitChangeDataBig52GBKS();
    1 K, ?, x! d8 _
  54.   InitChangeDataGBKS2Big5();" j) p; v. K' G, j
  55.         //# o! c! v9 ]/ |- x" u1 C: w
  56.         bClickRunExe = FALSE;
    . z& k. N( C2 F+ W) o! J
  57.         //( q6 a) H* t  \" ~+ j$ G) q# ~: I, w6 p
  58. }2 h0 h$ m+ t/ b" R4 z
  59. 2 J- q+ ~$ m5 ^9 C% ~% p- j
  60. CRevAppApp::~CRevAppApp(). i+ i! D4 v0 \% |- v+ [
  61. {7 w' w3 Y6 D# X9 V" i
  62.         // TODO: add construction code here,! V" |# K; {* {, S
  63.         // Place all significant initialization in InitInstance
    3 F( l0 o7 z- J( T$ A; A7 @$ o9 M
  64.   EndChangeData();$ ^* J" L1 ~  u" L/ }. Q% C, V
  65. }* |# k' w- M% z& S. ^
  66. ; _" d2 D+ m) o8 l& ]: k. G
  67. /////////////////////////////////////////////////////////////////////////////
    4 R1 ~& v' T5 o7 r7 Q1 F
  68. // The one and only CRevAppApp object* ~$ X9 J9 y' L- i

  69. 4 U  |2 ^3 M! C  d9 c4 M
  70. CRevAppApp theApp;& E/ B; e7 E# e: i  ~# L5 u8 O1 [
  71. ) s3 Z! v1 y/ {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 b7 `9 w* f0 W% @! j; A& ?$ g- l
  73. {
    & l2 B' @3 d8 V
  74.   int iEOF=0;
    . A& Y' r( c  o
  75.   char szTempName[MAX_PATH];
    ( K  x. b4 E2 ^
  76.   *szFileName=0;7 M( i0 ?) G% U3 N
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! M: h+ G' ?8 R$ K6 u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , \# _, e! r: G0 \$ E
  79.   {# H4 B8 k  L' Z& [0 F
  80.     strcpy(szFileName,&szTempName[1]);& c7 q' k! Q! ~$ e6 k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : a2 V3 n( c/ E( Y5 Y# r& v' g
  82.     {
    $ \! t) T  q8 b" A5 R$ q
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! l3 c2 Q/ y3 w0 O9 ^- Q
  84.       strcat(szFileName," ");6 x" f8 V5 [& ]  T4 u! M$ N% g
  85.       strcat(szFileName,szTempName);
    ' E% ~# n% r! V3 _
  86.     }
    ' o. W) u2 ~0 k
  87.     if(strlen(szFileName)>=1)5 `3 y6 X, I9 ~1 ]) K2 U' A
  88.     {- Q" R! \9 |0 @* T6 p
  89.       szFileName[strlen(szFileName)-1]=0;! G' h  y; a( r
  90.     }
    4 y/ K- E" C0 {
  91.   }* X  q5 e- _. k4 y
  92.   return szFileName;) q' \, X" G% Q3 _: H( o, {
  93. }8 x; `2 j: ?; j* o; H
  94. $ ^. C$ v" x9 \, C- V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " j. B' o- ^8 Q5 @
  96. {  W+ v5 y+ Y4 L% j5 G
  97.   FILE *fp;
    1 a& L  x0 K0 ]! ]. s: n3 M( [3 M
  98.   char *key=NULL;
    1 {' h2 \; u* r, F! S
  99.   char version[MAX_PATH];
    & L) c1 D& v1 B6 v) X2 T9 g7 G
  100.   LPUPDATEFILE file,olds;8 ~8 U% Z# y1 q" A! Y( S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 n9 W1 G3 i* g4 J( k; H! F" Y

  102. % j9 d9 I. i: H
  103.   UpdateList.clear();
    ( C& l! l5 R( ?! K8 ~8 k
  104.   UpdateFile.clear();3 [+ w* S+ r$ \9 _) ^6 V4 ^+ t5 j
  105.   if(GetFileAttributes(filename)==-1) return false;
    % w" F7 b9 N4 i1 B
  106.   if(!(fp=fopen(filename,"r"))) return false;- c' p& b. N3 I( \4 g$ |
  107.   fscanf(fp,"%s",version);
    5 p4 \$ ?( x; g* o, v9 h- p  ?/ O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; s" T) ?# R2 f! x2 B
  109.   while(fscanf(fp,"%s",version)!=EOF)3 |- l, V( S  u! t
  110.   {
    ' G8 X* e& e5 G" L- l! r( [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . Q, f6 |3 p+ x; l3 Z$ _' z
  112.     fscanf(fp,"%s",file->path);
    ; {- _2 P( [3 u& [$ G
  113.     ReadFileNames(fp,file->file);
    ( {" C; I) E7 P: o" `
  114.     strcpy(file->full,".");
    * H# J& `, K% ~4 k: r5 m4 O, ^
  115.     strcat(file->full,file->path);
    7 Y* b7 @% q: N( E" ?/ E7 N
  116.     strcat(file->full,file->file);
    3 C' z, b; k# T9 n+ D" r7 ~8 \) S  A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 E+ x6 o8 S" @3 ^
  118.     {
      E5 ]; v' j( h8 B" n8 X
  119.       file->vers=(float)atof(version);
    ; S/ W, N  m2 d4 W
  120.       UpdateList.push_back(file->full);
    5 k  q9 J5 H+ v% g; ^, ]$ V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 @/ [: e3 {/ v# g9 c+ L
  122.     }% G0 W2 |+ V- t# j( Z5 i) c! \. Y
  123.     else& d( G+ F5 O3 t4 l
  124.     {4 i% }, j6 u( E. P: z5 p
  125.       olds=(*p).second;! ]* N# O, u  }# q
  126.       if(olds->vers<(float)atof(version))! Q5 q& [; j6 b7 c' o7 r, i+ P
  127.       {* z4 v6 y! U) j4 N# w5 L: Y: L7 c
  128.         olds->vers=(float)atof(version);
    & p# N; Z, T& f
  129.       }
    & L7 V5 y1 r3 E) U
  130.       free(file);2 x$ K. F# G1 f# [+ e6 m
  131.     }$ t+ D6 w. S9 Q
  132.   }7 A9 D! }/ _6 V0 V% S
  133.   fclose(fp);
    ' ~! ^! x: \0 W, ]: W8 I" Q
  134.   return true;% e  Y3 C3 O5 N% O3 \4 P1 Y/ ]
  135. }
    # a* I# u3 I2 m' R! ?4 n  D
  136. / s  }  U# \" v/ g0 k( |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 J. j& O0 M4 o6 E( A: C4 s* _
  138. {* s- Z* I) D. I  g% b
  139.   TCHAR  szFull[MAX_PATH];/ o1 X8 ^8 H1 ]. F# c
  140.   TCHAR *token,*inter;
    3 q' B9 Q7 j* G$ a. M6 z- R$ {
  141.   *szPath=0;
    6 L% L5 u  ^% w4 T
  142.   strcpy(szFull,szFullPath);5 x4 O( F# V2 m8 @: ]
  143.   token=strtok(szFull,"\\/");
    5 u+ `% D3 a/ s9 _7 T
  144.   inter=token;- M8 ~" w& M1 {4 j
  145.   while(token=strtok(NULL,"\\/"))
    - z* b& ~4 }( }9 r
  146.   {# j% V1 \6 v" S
  147.     strcat(szPath,inter);
    ( l+ o8 @( f/ v
  148.     strcat(szPath,"\");
    4 d( |) t' p+ @4 T  X) H" r
  149.     inter=token;* V5 ~  m3 E; R
  150.   }, r8 T; T# D# ~! |) l: Y, g( Q# \. x
  151.   return strlen(szPath);
    5 R" d; H' v4 i7 w
  152. }
    & x  b7 o( s3 }" ^& l
  153. ! E. s9 x# a: e# x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! `" {! V; X& [" L, ]- n4 z
  155. {
    : ?( `2 i* l: c- Q- ?7 ~, ]
  156.   DWORD attrib=GetFileAttributes(Target);/ x" q9 ?4 h: P# n1 ]7 K& K8 j
  157.   if(attrib!=-1)2 H: ]3 k/ I0 O' a( c8 V$ ]  X
  158.   {! w; a9 ~4 @: |- _. |" J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 y! Y$ {6 a% T
  160.     {/ q  j: w. }  ]  g0 a( Y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' {5 g8 y7 X) z: g9 Z
  162.       SetFileAttributes(Target,attrib);; L" Y# i( a; c6 U2 D; q
  163.     }
    / N+ X% o! f) @5 S
  164.   }
    1 f, u1 g, O" ?. [& b* m
  165.   CopyFile(Source,Target,Erase);
    * N8 P% z9 }7 X! y8 s! m$ e) \% y0 b
  166. }- O8 ~$ I! ~4 }  N

  167. * ^+ `) c' Z# ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ C# a1 \. m: I1 \# |2 M1 A/ L( c
  169. {
    8 X4 D6 U/ L5 T! q4 D) H
  170.      FILE *fp;
    $ e' Y5 Q' ]3 l8 v+ a0 N
  171.      char  szBuffer[8192];4 n; [; L! ~- R& d2 v
  172.   va_list  argptr;0 V! r9 d" e6 E8 f9 Y
  173. 5 Y( n/ {' v6 Q+ e5 |6 Z$ }
  174.         va_start(argptr,message);4 {+ D) b; t4 P; [' I  E
  175.         vsprintf(szBuffer,message,argptr);
    # X: E# C: t- S( ?' E+ m" o$ v* W
  176.         va_end(argptr);
    % K; J9 }5 M. i4 P8 Q
  177.   fp=fopen(FileName,"a");
    6 k6 V% e( d# I9 x& R3 N6 p
  178.   if(fp)! T! Y3 x. l5 [/ b
  179.   {
    8 i7 F. K8 i: u7 Y
  180.     fprintf(fp,szBuffer);
    - J+ _) e2 Q/ y) e' m
  181.     fclose(fp);
    - O: I& E/ @, r" G+ e
  182.           _flushall();% z4 u% ?, C0 z  y
  183.   }
    : c2 Z% C) g9 u; y- ~
  184. }
    4 w8 D. J5 h2 C6 _7 U

  185. & ]" m  j1 u8 p) c( X
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + d- I7 E9 Y  ~# V, X0 N/ e- Q
  187. {
    ! i' y  k! W$ H" n/ ?
  188.      FILE *fp;
    2 c: \, c% B3 G) ^8 O) I
  189.     DWORD  attrib;
    - {( H# X3 n7 _) X
  190.   attrib=GetFileAttributes(FileName);* P1 `0 n$ f( Y: R! z; z, R1 q
  191.   if(attrib!=-1)
      R" l6 X% j+ g+ ^; z
  192.   {
    % z% X2 H$ l: O+ M9 O8 y3 d4 a) `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( }3 x" T1 |/ U+ {/ y2 v1 U
  194.     if(!SetFileAttributes(FileName,attrib))
    5 M- m& f, o% @  N. s
  195.     {
    ! m5 c8 X, y) L- H
  196.       return FALSE;% G/ S$ Q; j# _
  197.     }6 y! ?# l: X$ {7 S7 C* f
  198.   }' A* T; C) Z1 \) @/ M
  199.   fp=fopen(FileName,"wb");( c* L/ l- p* S/ N; q1 K
  200.   if(fp)( q! ^( j/ n/ p; j* w& N
  201.   {
    ! p, V# Z# @; @$ o0 F6 V. Y- L
  202.     fclose(fp);9 y+ ^6 O' l, |/ R
  203.   }5 n! Q5 I! X5 x1 |3 ]5 ~; a
  204.   return TRUE;
    - A5 Q) M4 I; X3 B6 |+ X4 K' N
  205. }- a/ l" ^6 A4 i5 ~

  206. % Y# _/ ]- K: g( j
  207. BOOL CRevAppApp::UpdateLocalVersion(void). X7 J! Q. |$ q) z: y/ i9 z
  208. {0 _; E  b& E8 S9 c2 d0 j
  209.   char filename[MAX_PATH];% C: e* Q1 Y4 k! R- J/ B( S$ y
  210.   LPUPDATEFILE file,olds;
      _7 O8 @# [: \/ a8 I$ S
  211.   std::map<int,CString>::iterator i;7 P/ C$ b1 q7 X8 F1 a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) _$ w& ~' t4 U- J
  213.   std::list<CString>::iterator l;
    . c6 v. \+ y2 N4 }0 E2 Z/ j

  214. ' w; N' @" c: y% @. Y$ O5 F  k
  215.   if(bFirstUpdate)1 S7 W  V; R, c+ ^/ [0 g3 F5 `
  216.   {5 s5 y* b2 J$ T: ~$ y8 U+ \; w
  217.     dwCurrFile=0;
    - Y6 F5 @, D+ A# _
  218.     bFirstUpdate=FALSE;
    / C; N' H! f6 _: \0 F4 T% T
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" D! c  u# F& Z4 ^
  220.     {" V: b; H+ i2 S) `/ }7 L' o
  221.       dwTotalFiles=UpdateLocal.size();0 c' C  A8 ^4 x: W) p6 Z; ^1 P; P
  222.       dwDownLoaded=0;
    ! v* ^/ G. Z- r3 R) c! {9 M1 U
  223.       bSilentStep=FALSE;  H; j1 |) L4 ?, r" L; |
  224.       bCompressed=TRUE;+ Z) {9 G! P3 r/ o6 Y- q
  225.       strExtLocal.Empty();+ H) d8 T2 \" N& y6 l3 l
  226.       strFullName=(*i).second;2 q$ g# Y& L$ g! h  T( \
  227.       dwProgramState=AP_CONNECT;
    6 y% T5 A$ |+ z- ~) Z
  228.       return TRUE;
    - N, x) o) `# p( B
  229.     }
    # d% k0 U* G' `, S: P
  230.   }
    3 b- a5 w/ z2 b
  231.   else if(bRestartUpdater==FALSE); o; s$ W  A  j# S
  232.   {
    ; \  K3 |: N9 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * E* v- c* W) `" W
  234.     {
    ! f; A2 Y. v1 B! Y: x- b+ i
  235.       file=(*p).second;
    & s5 Y* I7 h7 r0 R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , y7 |9 |) o; ~2 {
  237.       {
    ; {$ R9 h3 a! G2 S
  238.         olds=(*p).second;" k* ^2 {4 a1 M: B- O  [" O
  239.         olds->vers=file->vers;2 j; ^& e" U# e& s2 D- w
  240.       }
    , ?, ^. R. J2 U
  241.       else% F7 \: _" P4 j" v7 F9 {: N! O, m
  242.       {
    " a; p# Z* V) k: U2 w) W: s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' e0 |. P1 M0 u7 f- X( N( Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) s% R3 p6 X, p( g6 W2 V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, w, y4 S! ?" L/ A$ w
  246.       }
      K/ Y9 ]; F: i4 e7 u9 Q& A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ v* ]  m9 Q# `& p+ q# h
  248.       sprintf(filename,"(%s)",file->file);
      p0 H1 ^  b- t( |* x4 y- O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# a, l0 p) }( ]9 t& j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ L+ H' @" {+ z
  251.     }5 m9 K6 x7 z" F" V8 c
  252.     dwCurrFile++;
    ! C+ r5 i1 V5 }9 I: e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  h9 X, @$ ~4 x6 Q" {0 `/ E9 P- D
  254.     {
    - C+ p1 {6 Q% i$ |1 i. h/ V* a# y
  255.       bSilentStep=FALSE;4 p6 l* q$ w: `" h3 ^
  256.       bCompressed=TRUE;
    6 D4 c  {5 g: b; H) @
  257.       strExtLocal.Empty();
    : C, d) J# ^7 \+ r$ l/ U
  258.       strFullName=(*i).second;% h- R* {6 P; ^
  259.       dwProgramState=AP_CONNECT;) ?) R: Q8 b, a- Q4 @
  260.       return TRUE;
    . V% x5 G: t1 S
  261.     }! s3 r4 v& y) i: m8 P9 I
  262.     if(!bRestartUpdater)
    * e& ]0 |1 K$ U6 q, h( `
  263.     {
      q0 j$ h3 ?" A, h
  264.       int iCurrSize,iFileSize;+ x3 \# Z3 v% ]0 K& F4 t% s" c7 M
  265.       iCurrSize=0;7 }/ B0 K9 n9 S8 Z* p6 t
  266.       iFileSize=UpdateList2.size();
    * m* b$ g; `3 |6 w+ H) q3 ^0 q$ l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ B/ N! j: N0 R6 Y. f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* d( |$ _* s- S+ R, a4 A" J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 C9 W/ s2 O; W# D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 e) H" n* R9 N; G1 L+ D$ S
  271.       Fclearf(".\\update.dat");
    * g2 p4 h' B5 D  `/ [
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 i" ]* S) v) M: r' k! _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 u4 i7 f3 e+ N, E6 G' _
  274.       {
    7 D, X3 P, Y# U/ ~/ o- N. I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 e" H' Z9 e& u/ s7 u
  276.         {
    9 N8 c/ e0 {* l3 F
  277.           file=(*p).second;
    % u3 |8 U) J2 `( \
  278.           sprintf(filename,"(%s)",file->file);
    - n2 V  j0 P5 ?! K3 ]
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! p7 L) h- ?$ j  c9 M7 U
  280.           iCurrSize++;
    ) K: i' ?4 w3 d' M% W$ H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));  W& h- c$ e4 T, S+ b
  282.         }0 A& q% G8 @" b
  283.       }5 M* o8 {! E3 p4 I. a
  284.       unlink(".\\update.txt");8 b6 ]8 Q* `$ E4 W9 [
  285.       unlink(".\\update.tmp");
    5 A" N! f# w5 n' o  u
  286.       Fclearf(".\\checkversion.dat");
    * Y) x4 U9 _$ @8 D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 f0 K) [, z; I9 p
  288.       if(UpdateLocal.size())
    ) L7 m& J, S8 j$ l  \
  289.       {
    + f+ V% t0 N! Q& R( g  {
  290.         UpdateLocal.clear();6 Q' z' u1 h7 I2 L3 z8 G
  291.       }
    1 A# }# G  X( R, g  L# f/ G# U
  292.       if(UpdateFile3.size())
    2 Y! ?: M7 O$ X( B
  293.       {
    5 U& Z' i$ h; Y" |* G2 Y' G. z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 H9 [2 O5 G( e( Y( F/ K, Y8 c
  295.         {
    3 j  ~3 d) r1 d
  296.           file=(*p).second;
    & M  g' i9 N- ^' K9 K- S
  297.           free(file);
    * f: X: |6 U3 b9 s) O, @2 H* y
  298.         }
    % {8 M  n! }2 c4 Y1 w
  299.         UpdateFile3.clear();
    & M1 E9 Q2 k2 Z8 Y6 b/ b/ w8 x& x/ J
  300.         UpdateList3.clear();
    / _/ V3 r1 C" i4 _0 H1 g2 D4 S( r
  301.       }: I2 N# l/ O, H" R
  302.       if(UpdateFile2.size())8 P6 u. k# H% U( Z; Y; ?$ o- j3 `: a
  303.       {
    & N" T$ I" A  c' R( ^; s& w, \
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 y: w2 L$ s8 @& l4 T7 I5 ~
  305.         {
    4 x. j7 @4 T+ ?
  306.           file=(*p).second;
    0 ?2 X+ i% d7 H5 Y8 @
  307.           free(file);
    % x5 E3 \* J  o) X4 ]
  308.         }
    7 _* u. l0 q7 b0 C: ?( M( M; C
  309.         UpdateFile2.clear();
    * ]& G9 N# y  v- o& f) A# T
  310.         UpdateList2.clear();
    & z4 b4 y. j0 n) H0 K
  311.       }; d% h  V: ]5 V/ t/ X
  312.       if(UpdateFile1.size())5 X; M( A% E/ c! J( X
  313.       {
    . k0 ]7 T/ X8 ^: C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , u. ?! `& ~, b% v) T6 p
  315.         {
    & {! u4 I& r9 y% T9 @
  316.           file=(*p).second;
    3 d* J6 ]9 @, t8 |/ B5 b5 X2 D7 s
  317.           free(file);5 ?( l8 d. n6 Y' Z: P
  318.         }
    * N# L* N$ l" Z& n' @7 o- S: Z
  319.         UpdateFile1.clear();
    ! Q% O1 j' f% ?% y) U
  320.         UpdateList1.clear();
    , V! h& ?  j1 {3 A8 Q3 X6 q; ]) f
  321.       }0 g0 U) U, ]0 h; b# Q, s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! g$ v3 N: q& [1 P' T$ U( S6 u; U, D
  323.     }. d3 t5 w0 V# s; T3 B& R1 N
  324.   }8 `) C4 B6 R' ~
  325.   return FALSE;
      g9 P+ k+ }) P- a
  326. }1 j3 i' Z4 P) d6 Y& s; {. Q

  327. 7 p+ `/ n2 I/ }! C
  328. void CRevAppApp::ClearAll(void)
    ( a- z1 O" w- g/ D2 N: T
  329. {: b; T$ T$ Y. I. ^" g- L& d
  330.   LPUPDATEFILE file;
      n, G- w% |! a# Y' e, Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ F& {2 c& a( w; x4 V- Y0 x& y( w
  332. 3 Y! ^* M: {0 ]4 L. N8 e% f
  333.   if(UpdateLocal.size())' w+ ?0 I5 @! W) ]( H! v
  334.   {+ N# \- c3 ^# D) B- O
  335.     UpdateLocal.clear();
    - e; G2 z0 E# _2 }% M* G
  336.   }
    % q+ P1 x; B, r7 X* y% y
  337.   if(UpdateFile3.size())7 S$ M( u5 u) o- G) x
  338.   {
    ! N2 G, C. z. t! z' A1 c- C: P  h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - {. N. m$ K6 P. U" C
  340.     {
    , k: U" ]  j$ F- w+ _
  341.       file=(*p).second;, p- K* {8 X+ B: P4 `8 A  b
  342.       free(file);
    & t. C, ^$ {( q+ _* I( k: g
  343.     }
    5 `3 c/ M+ r0 Q4 J9 u* U
  344.     UpdateFile3.clear();
    ) O4 g+ `6 n* O  L1 c. c1 }5 E& C
  345.     UpdateList3.clear();, A+ B2 y4 V8 f$ L  K" H
  346.   }
    ' p+ f/ n) h# w1 f3 R/ u; j
  347.   if(UpdateFile2.size())
    7 {: a! ^$ {1 e6 V8 w
  348.   {
    ) [# Q- P1 r( A) L1 g, W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' G1 \4 S" S2 ]1 L9 X5 o! X; C
  350.     {# [1 Q* T7 o$ J
  351.       file=(*p).second;" B0 l) q) F# A8 w* J' P1 P  V
  352.       free(file);# J& b+ X3 r) i% g1 l# D8 Q5 |+ w3 E
  353.     }
    , |1 O( e, Y# W& _% D
  354.     UpdateFile2.clear();
    % V" h+ i0 V4 i, Y* X* C
  355.     UpdateList2.clear();- b6 C  B2 y. T- O" f7 o% r
  356.   }
    ) ~2 H' m% }, X0 Y' o
  357.   if(UpdateFile1.size())' C: j4 ^4 N+ s, t% X7 f* |' q& C' u
  358.   {
    " G' [+ T/ }2 S  ?8 e. W6 d- H# K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 i6 @4 \  _' C9 J/ O. h9 R3 w
  360.     {
    ! d& \* O' k- S; b( U# C7 J! k
  361.       file=(*p).second;
    ' {6 a+ k- {" \: h# `, m: j$ w( w8 b- c
  362.       free(file);5 f0 d% G8 \2 N  P! H7 L
  363.     }
    ) \8 H4 q+ x3 F1 i2 V3 B# n
  364.     UpdateFile1.clear();- ^" K9 U# _) I9 f
  365.     UpdateList1.clear();
    " V$ m2 s' Z7 x: A
  366.   }* p$ Y  h. q, n
  367. }  9 H  L6 I' x1 ?1 b+ n
  368.   
    ; N8 C- B6 i; \" q& }
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 u% U: B1 }# V7 U3 b
  370. {
    / q0 E& n; C0 L8 w
  371.   int c;
    ) W3 a6 n) t. \) o6 K# k& ?0 D
  372.   LPUPDATEFILE file1,file2;
    2 @% U0 d0 S1 L" |3 X% U4 E' B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 q/ t$ s% Y2 a' |4 N$ ~6 v( I
  374.   std::list<CString>::iterator l;
    - G; m( w! O$ p# p
  375. / g3 j; c) W1 V. q- y2 `) K3 [4 Q
  376.   UpdateLocal.clear();  b" @' x3 o5 ?3 A: w  M
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 ^; ^: e( r  f4 V( L: }; ?0 b( U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 e3 J( ~8 K. K) i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / |6 S% t, }( D3 A9 |) L/ C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; S6 B- N- l, v( X# V2 i( p/ W
  381.   if(UpdateFile3.size())+ Q2 g& S4 e7 x2 n& s# k
  382.   {
    $ w/ R( V% i; q/ m
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 ?1 S; u5 B3 g" a. r# ?7 o* |
  384.     {# P2 a8 L; \0 `6 S  o
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! g6 D8 _8 r; Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 {9 v3 s) `8 D6 l5 Y
  387.       {, r2 c1 a0 m: b, C
  388.         file1=(LPUPDATEFILE)(*p).second;: }" t  B7 X& S, i
  389.         file1->vers=file2->vers;
    ; z/ k/ f6 _0 m0 T% \7 Y
  390.       }7 ^1 K* x/ M; p( _' z2 J
  391.       else! s& R$ B2 F) V7 h7 s- b0 @
  392.       {; b3 u# V. Y8 P' K: i) i
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- l9 J% B- \* }) n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) u$ {# z; k' s( L
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( S- v5 ~" g. v2 N% _% A( N" P, {
  396.       }
    1 S5 _4 E/ g" W0 g9 j
  397.     }
    ' [) W4 X, y1 e+ M) L# {
  398.   }
    ( N6 g! Y( g, P; O2 z! Z, S. n3 ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 M0 I/ h. F/ B2 Z
  400.   {. B& d$ ^6 x$ A3 v, Q3 P8 h7 t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- w7 R' x6 V: p0 W1 O6 x
  402.     {
    1 L: p7 M- n6 D! ~" z% @
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 V) t& y( A6 C8 U2 _5 x. R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): t3 k2 R$ F0 B3 j. i$ w9 x
  405.       {
    - ]/ W' c. {* |$ g
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 [. c$ E: K1 N: l0 l# e
  407.         if(file1->vers!=file2->vers)
    8 U! }3 d) M' x
  408.         {. v# w7 b4 y+ f6 b2 C7 ^* N) P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 \& j( i! N1 B' X
  410.           c++;$ Y" |$ N; e) |& j
  411.         }6 ~; v$ ]) e0 s! ?$ o3 n! ]
  412.       }& z* p, o3 e% X  e3 ], Z% B
  413.       else
    3 S; r( L% |2 O# f3 s
  414.       {
    8 n# R: C+ ]5 ^4 ?8 q  w/ M5 J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / E! o" H7 H9 @0 b3 Y
  416.         c++;
    ' L0 M; z* R4 I; G0 N
  417.       }  L* R( g2 I$ q3 }
  418.     }
    2 Y6 u) B2 t9 w: ^4 x
  419.   }. M- j& G; u3 [- i8 j. i
  420.   unlink(".\\DownLoad\\update.txt");7 t+ K& {% x' P" P6 o4 `: M
  421.   if(UpdateLocal.size()) return TRUE;
    . F5 h% ]9 U/ Z/ `4 t/ N; `- c' `
  422.   else                   return FALSE;
    7 f! P5 _9 n' z2 Z" F) _& ?
  423. }
    1 |3 V5 v- f2 [1 D

  424. 4 Y! D) V, V0 H; a/ ?5 i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 y: x/ `) O) u% \& m& J+ `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". J/ ~) A0 a% l( Q5 y

  427. $ v7 f) m2 j; _: Q

  428. " z) `* N( y6 e

  429. & e. q: F7 ^# x% o, k# W; j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( p1 _8 ]4 ?0 w# o( M& I2 `
  431. {, a- R/ A  x# z: Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " h- J' P* u8 |( m& C8 `: M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& s8 _* r/ k( C- d  S7 Z
  434.   {
    9 b6 G$ o1 Y0 i9 `$ l4 q1 N
  435.     char szLanguage[50];
    & t5 X3 T  i" z% l! I# f& `5 L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! `( V( a; K& h) k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 \  H- F/ K: X3 z) s. c" g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 m! f) U6 J" o3 G! S
  439.     else                                   m_iLanguage=ENGLISH;
    + g8 A$ x& i$ d& N
  440.     char szRegister[100];
    ; x! H" d) B- _- N; i7 k  r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # A2 j# d8 n! g6 J! h5 c0 U+ M' |
  442.     strRegsName=szRegister;1 w# j* q2 K" t+ \  i& I* G
  443.     char szPatchURL[100];
    % ^7 Q* c; P4 g, y, g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      p6 A, W2 A1 [' w" O$ {
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 ?4 w* d- `* ]5 L( H* s& P
  446.   }
    # Y7 T$ {. E+ @! m; G* @3 W1 {
  447.   else
    ! c# |/ x0 o% y
  448.   {% q- V8 e1 `4 H6 d, M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 X' c( `% p1 x0 _, `/ i/ N4 @
  450.     strRegsName=DEFAULT_REG_URL;" U. |! W, L0 r0 c
  451.   }
      K+ N9 ?7 i3 i* I! W& j7 T
  452.   if(GetFileAttributes("hosts.ini")!=-1). q1 `7 V: ?. L) Z5 e3 d' q
  453.   {7 m+ ~+ t6 {6 z8 ~8 d, F/ u
  454.     char szIP[50];
    ) `4 X7 T$ D2 @$ T
  455.     char szDIR[300];
    . \, w+ U, h1 P: s- X1 V2 q# a0 Z) U. W, u" A
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! ]# f' v9 W9 D
  457.     {
    , L/ A; D- A% Y7 t
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: Y7 E( `* g' a. w: f- n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & n# {4 x& P' s6 _! H2 m: p
  460.       strHostName=szIP;
    + F) H8 F2 n5 {7 `! w
  461.       strHostPath.Format("/%s",szDIR);# P6 |3 U- W5 f" Y* j
  462.     }$ m+ L9 \5 a( E- v
  463.     else. N2 f. a$ i4 D( Q4 `
  464.     {
    % h% }" H8 I5 n0 Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 J) r8 S* Z5 l+ o5 B. j* e
  466.       {. x1 B6 ?; k; h2 K5 O  s9 K* R
  467.         char szLanguage[50];* i3 ]# q& l1 H" E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& B9 j2 j/ y( W' m+ H1 }3 L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . e7 A* q) ], c/ X" N# ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 p' H, W, ]$ [1 b3 P" I
  471.         else                                   m_iLanguage=ENGLISH;+ ^* t. c, [) c. l% N' |/ j' `
  472.         char szRegister[100];0 q7 r8 e" A. Z5 l, {. h. U7 m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 G! v$ Q  S$ y! x0 B4 o
  474.         strRegsName=szRegister;. _* U  s* j9 L; r
  475.         char szPatchURL[100];* L( u4 j& F, a6 o4 S5 {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 J7 F0 ~$ g! |
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 e2 C( E  O" G& V/ P5 q# e1 {/ B
  478.       }( J( E0 i' }  g# o4 ^
  479.       else/ S1 ~  l$ g3 E
  480.       {
    ) [8 [6 G' A+ x" J' u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - R1 N1 ^3 ]  L8 W0 d4 n2 c4 M
  482.         strRegsName=DEFAULT_REG_URL;
    9 l  ^  I4 n- n4 Y7 N% ~% Z: {
  483.       }; J) u3 {2 j& m4 A3 |
  484.     }
    % C, n" s) k4 S! P
  485.   }  N' n; e: `+ w
  486.   return true;' u; C- }1 ]2 e6 b0 n$ ]! E+ ~4 B
  487. }) z0 i8 T7 y% k* F
  488. 5 }: z' F8 _+ H- S# j* s
  489. #include ".\ZLib\unzip.h"$ }" s5 A2 n0 f6 s$ `3 `: F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * d8 D. ^7 O7 T2 I1 |+ s
  491. /////////////////////////////////////////////////////////////////////////////
    ' v! N2 v3 L) J# L) D% `9 F  b
  492. // CRevAppApp initialization
    8 ?" W* Y6 n4 ?4 Y$ A: U$ R# i
  493. ; n$ r5 ~5 c6 P! w& [( t$ M
  494. BOOL CRevAppApp::InitInstance()
    ( `) |' [; X) v( N! r8 g* Z
  495. {
    * K7 a8 h. ?8 i# U% [( ^0 y: c
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % A% L# q1 J1 H, X

  497. / U" Z' _. x% V' o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( D' N+ x$ ?0 T- S6 L' a. Y, ~# p
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " i& t; J  k% d5 {+ F
  500.   {" K- A9 o% _* d9 {/ M; P/ G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 ]1 c" o! ?' P4 {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 m* S4 ^6 F1 d9 ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 w# G& p3 ?6 A
  504.     {
    ! g& s( ]  M/ H! _
  505.       strcpy(szPath,szPathTarget);2 \. N6 f# |# L6 M& K# s( ^; u
  506.       SetCurrentDirectory(szPath);
    " k+ P1 x3 g1 e8 m  _( [, w+ U8 n
  507.     }# E* \% }* @& m* p) t( s
  508.   }# S5 M" Q6 r/ ^2 l& ?# D+ h
  509. #ifdef _DEBUG6 ^4 E$ |5 p! Q/ S5 m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' {* F3 m2 b& A
  511. #else
    0 U2 k9 |6 E1 r: Y0 X6 i) w: F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      N. a7 `6 z) ?4 d' Y9 W4 I' j
  513. #endif$ F6 j  B4 _- g1 `& k( {/ C- B% ^( t5 n
  514.   {
    & v" Z6 u# Q9 h2 K- J
  515.     char tempFileName[MAX_PATH];2 X, a% I6 F5 V4 g) U9 X8 s7 h2 P% M
  516.     strcpy(tempFileName,szPathSource);
    ) t# V' c  r, O. V/ \
  517.     tempFileName[strlen(szPathSource)-12]=0;; M& x- Z% n+ j8 D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 Q3 ?+ `* a; g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      C* ~1 I/ x6 O& E! n! X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);9 M8 J1 B, u! G4 \' |3 y; \: T
  521.     return TRUE;
    ) P/ S" @9 d( G/ a8 u
  522.   }
    5 j( b# @4 I2 d0 V
  523.   // Nuke 0118: Delete run.exe
    3 H' o  Y- w) C/ Y8 Q; a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% H( Q$ m5 l" q5 Q& s$ o, s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , v: C1 M8 b" w- e4 {
  526.   if(!ReadCfgFile("Config.ini"))
    6 r) ]9 S0 Q. Y) r
  527.   {( s9 u# Q/ h* w6 u) T/ `" }$ N
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    . \# j. h1 L" }( M+ p/ K
  529.     return TRUE;
    2 n# o8 g4 W; |5 L/ V6 G
  530.   }
    + O! x  b: a& l, y, E
  531.   HANDLE mutex;" s8 o8 i3 \" M% h3 Y& H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      h* E- O; f5 |# ]: _9 m
  533.   {
    # _; o$ D  t" K, Q+ C8 H5 \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      r$ T% ^6 E* n$ y9 ]0 g
  535.     {& q& K' V! q4 W
  536.       CloseHandle(mutex);
    , U; r; ]6 z. Z0 N+ n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( u" x& Z% N; d  W) v
  538.       return TRUE;1 |; I8 O$ s, ^* n' U% a6 z& F
  539.     }
      X  ~/ S9 d0 e! O& ^
  540.   }  * _1 Y& H* q7 R# C2 C
  541.   CloseHandle(mutex);- g. Z- g( E& n1 h! N7 Q% S9 c
  542. * x/ J2 s6 T9 o, W, k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 Q5 ~1 T9 {+ e9 B
  544. + W! I) ]1 k/ p: ^" i
  545.         AfxEnableControlContainer();% }3 z0 {" n) B1 Y5 o' u/ ]
  546. 9 \) {2 H7 ?6 R
  547.   bCanUpdate=FALSE;0 @3 S. g& O* F* ^9 Z( e
  548.   dwStartUpSteps=1;* M3 _2 I7 C8 @
  549.   dwProgramState=AP_NOTHING;, o: g" H# n7 F0 s+ U

  550. 9 s/ m: Z: L5 _! C- `/ m6 z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 Z. i3 ~7 W) W  f' `, Q4 I
  552. 2 Z( j1 j8 K5 Q( k
  553.         // Standard initialization* T! o1 @" O( q/ b
  554.         // If you are not using these features and wish to reduce the size
    3 w& W  ]% \( a  u
  555.         //  of your final executable, you should remove from the following; P) H1 }: W: e) ^$ U- v+ L
  556.         //  the specific initialization routines you do not need.
    7 T4 g  V. y8 w7 O" H6 q# S& ?$ ~

  557. 0 n$ ]0 u4 o8 b4 R
  558. #ifdef _AFXDLL
    2 l& H2 {- G' C8 x+ d3 ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 m1 N2 @' P. J: H
  560. #else
    6 P% A; R0 |  \. G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; s* D2 d( `9 c% n9 P
  562. #endif& J. x) |3 ], j  M/ ?( u# l6 m# l+ L
  563. - e" g- @: z* X4 Y/ d
  564.   dlg=new CRevAppDlg;' p/ H% q# }& n/ f2 j. }
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 o$ L0 z3 s" t# b" ?+ P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / B  L$ C% e' t& r( N0 K% s
  567.   m_pMainWnd=dlg;
    ( T- @3 C0 l( t; r- M  h& ^' h" z

  568. $ x7 c% m" ?! w5 @" Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ M; X( |3 f  u9 A
  570. 1 H1 ?5 k( x9 q1 e5 |" s
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ Q/ D) k/ i! L
  572. //  ULONG_PTR gdiplusToken;
    4 v* @. M) n" H: v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 D) a. w$ i' `1 n& S7 e
  574.   q* D0 ^# Z9 D( f6 [5 v
  575. //        CRevAppDlg dlg;6 x3 u+ J/ l  ^3 B. X. }
  576. //        int nResponse = dlg.DoModal();! b# X: u8 O  l! X4 H" t
  577. //        if (nResponse == IDOK)! F1 ~* W) _# b. y1 P
  578. //        {
    ) _3 G5 \* m$ f. r4 Y+ D
  579. //                // TODO: Place code here to handle when the dialog is
    : A$ q: S& d+ G: d, ~; J$ P
  580. //                //  dismissed with OK
    + h! n) q# j6 d$ m( c' X
  581. //        }, p& w1 S9 j# u
  582. //        else if (nResponse == IDCANCEL)
    ; z2 i+ }1 _. ~  D' S4 [8 O
  583. //        {
    ' ]# C2 w( x/ t( R
  584. //                // TODO: Place code here to handle when the dialog is
    # _) ?: p1 a  Z) S, \: t  [" s* p
  585. //                //  dismissed with Cancel; U# D  a0 t! e: H
  586. //        }& P3 D# T3 g" L

  587. 1 Z- S5 |, \, M4 s4 D0 y! o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # p. ^# f& ~6 h  O! _
  589.         //  application, rather than start the application's message pump.
    " a5 r! j9 m3 {6 D
  590.         return TRUE;
    * E* c- ]* r' {( L4 h
  591. }
    0 q( a) F) b0 m) z3 n2 x# f

  592. - `+ H8 {3 p" _* h! d% H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 `. o9 c/ e& i* R6 h5 `
  594. {+ _+ {& @; }9 z& [" d
  595.   int i;
    - U" r0 l* z5 p2 A+ J
  596.   char *szRet;2 W( h: |. d% _5 w
  597. 5 M/ Q7 {1 V+ |* X, P( |7 }% R# G
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 e; h2 j# x6 L  k) U1 T% |# f
  599.   if(sztoken)
    ! @$ j. |1 Q6 n$ `7 J- \" F) z/ y
  600.   {
    4 T; a& _6 Y# y9 Y! R$ G3 {+ [
  601.     szRet=&sztoken[itoken];
    ) |# E# h! n& h' u0 s( t
  602.     while(sztoken[itoken])! }1 D$ M" o% G" ]- k
  603.     {3 |0 F! t3 l2 h# E, }  x, @8 R
  604.       for(i=0;i<(int)strlen(token);i++)) A. M3 U/ [+ S$ r
  605.       {
    7 Y# n5 d2 j' C% J2 j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ `% s" t  B: V+ r$ d, T. S
  607.         {' z) z5 g3 D: M! o! C, \1 h
  608.           sztoken[itoken++]=0;
    9 F: _1 x9 V  O! r; ^1 x' p
  609.           sztoken[itoken++]=0;( ?/ Q5 k& d$ i
  610.           return szRet;+ C7 n- R" n& n" _, p3 M& X
  611.         }9 U5 _! |( `: T' @# d
  612.       }: j! J) ~4 P; F5 s, z
  613.       itoken++;( l2 H; S! {4 |
  614.     }0 D$ B, P0 A% I& }" m- ]
  615.   }
    * c8 p3 F  q9 u0 m
  616.   return NULL;- ?6 R; g$ _0 Q* w
  617. }
    ' d1 F# x# H+ q/ M+ g& I0 c
  618. 1 D5 s7 }" L7 K- N* E
  619. void ProcessProc(long Total,long Current). H# U/ O9 q1 d9 S4 l% t
  620. {  U4 K( B- p& H) C; `. {, t
  621.         MSG msg;3 K, o# R! _1 e# x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' J4 e! r. @6 ~% E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ T# R  |  F, k6 B8 K% a3 {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" P! x9 e: |9 ]0 M* {  Q5 b
  625.         {5 Y3 [2 h! ^0 k' U/ d6 m
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + S- O) `  u; o- n: u5 T1 K2 C
  627.                 {
    # L% Y6 y: Z0 H% `7 \# D* W
  628.                         return;3 g+ q- i+ I1 v# N9 I, I
  629.                 }- Q) h) m# L$ c* A% z; o+ v, l
  630.                 TranslateMessage(&msg);9 K; W7 a4 C( K) q% C
  631.                 DispatchMessage(&msg);
    ! y1 X3 \. U: Y5 d) c7 ~
  632.         }        9 O- B' Z  ~3 C9 ]9 L
  633. }: L* ]( W0 V4 J8 M1 s
  634. - B0 M0 b( Q, g4 G2 A& h
  635. BOOL bFirstChar=TRUE;
    2 A- P8 M, v  s6 e4 ?6 |6 C
  636. - m& l9 R9 c% I' L" S9 O1 b. `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 ^! _4 [/ O* ?- u; |- |2 F9 e0 c
  638. {" R8 g1 Q7 F' g
  639.         // TODO: Add your specialized code here and/or call the base class
    1 d. r0 K" H, b
  640.   switch(dwProgramState)9 z: Z  O) \, Z8 i" z$ n( ^
  641.   {
    7 w  n, i" V  k3 L
  642.   case AP_NOTHING:! a3 l( l/ ^4 s& Z, z2 }$ X
  643.     switch(dwStartUpSteps)
    - |1 B% C( Z" _/ B
  644.     {" B" b3 P* u8 ~& Y  v+ o4 m
  645.     case 1:! q$ Y  i8 ~) B6 W* v4 s+ X- }
  646.       {0 z& x+ h; p; L, E  O
  647.         int i;
      V! a8 \0 Q+ G4 {, Q3 a
  648.         CDC *pCDC=dlg->GetDC();& j; s* |. P9 h2 w7 t4 e
  649.         HDC hdcwnd=pCDC->m_hDC;' H3 j9 \) X" u& m6 n% P- s1 F9 r
  650. //        Graphics graphics(hdcwnd);
    / h2 x1 o2 X/ x8 i( A* u. _6 J
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% r0 v( `/ _9 \5 u/ A6 D+ A
  652. //        INT iWidth=bitmap.GetWidth();
    $ I/ d: x, e9 ^) {
  653. //        INT iHeight=bitmap.GetHeight();
    * b/ A9 i" }9 X$ q+ v4 ?  o
  654. //        Color color,colorTemp;
    1 N  l, }0 N8 n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; x2 \% y, z. N/ i* A2 z' m9 S
  656. //        {, r+ k/ q& \- r! u, a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) G, d: V1 A% y
  658. //          {( `) y# }2 z% z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% D; C" U% ~$ j, V# K8 ?( l
  660. //            colorTemp.SetValue(color.MakeARGB(3 x3 l' X; n* y! _) e- i' L
  661. //              (BYTE)(255*iColumn/iWidth),; Q8 [8 c; v. b3 n& Y
  662. //              color.GetRed(),
    / |9 g# |$ ]4 _
  663. //              color.GetGreen(),
    5 z0 U/ t2 J/ F5 v. t
  664. //              color.GetBlue()));
    . @# Z4 M+ c. B4 U3 `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) j" w9 ]6 A4 G/ N5 d9 C2 ~1 R
  666. //          }
    - P* o. s. H: T
  667. //        }9 C- {" Q2 [7 E$ G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 T: M3 h5 I4 z# N
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 Z* l2 }: J0 X2 I) S; K, g- D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# |4 ?( N* l+ ?+ v, \& O- E- b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * u1 }! ?" j9 R: H% J* |9 n: R
  672.         for(i=0;i<240;i+=8)1 [5 v2 K4 S7 N
  673.         {
    # a# F5 m0 _! z* P3 J
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 i3 j3 |# e8 b  x" n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 p; l' A7 I1 v- M( ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . [% _0 K" Q7 Z/ H/ q
  677.           Sleep(33);$ ^6 e! R" ?% G8 J
  678.         }
    8 o8 E9 [, z/ B
  679.         Sleep(1000);
    ; k. p4 H4 q; [$ l1 H) f+ U. j
  680.         for(i=240;i>0;i-=8)
    2 U& K6 C( M3 m+ H( I
  681.         {
    ; u, s' {+ f' Q% Y+ B7 X# F4 X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# ]  D0 h) O# p' W$ [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : g) [% c6 x; d  x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ D; a% ^0 R" M. t" c3 j: Z
  685.           Sleep(33);
    . C1 H2 e( J* u) R) h4 D! z
  686.         }
    ' m8 F/ q9 m0 A8 l( Z% Q( t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' t' V' j8 n4 J; L' F+ v( z
  688.         dlg->ReleaseDC(pCDC);. @* F& e- a3 L: P2 m0 ~
  689.         DeleteDC(hdctar);6 x) O3 g, m  l: V& `
  690.         DeleteDC(hdcsrc);3 |9 L+ J/ _8 M+ @* v
  691.         DeleteDC(hdcorg);
    # ?* p2 S9 q* N9 s6 N' T# Y
  692.       }
    ) Z$ {2 [/ s! Q5 u0 a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 G% l, d, }4 ]  ^/ z, U2 [  h! a  Z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , B5 K4 W3 I! A; K% ~1 e* O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; R6 J+ c" ^( I, O$ N1 t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 Q! F# X8 h( C0 ?  j
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : X. E  x& g" F! L# _  q
  698.       if(!Dn.Connected())
    9 R) P$ |1 y" e( j! P5 g
  699.       {
    % E  z2 }! ?2 P, F, U* `# c
  700.         dwTotalFiles=1;$ E- K  q& B4 {1 M7 `( x0 d& q
  701.         dwDownLoaded=0;: p8 F" Z; o9 h& Y. C
  702.         bSilentStep=TRUE;4 U' J* m$ o# s' x; `; X2 A; z+ }
  703.         bCompressed=FALSE;+ [2 R8 j' O1 g; v5 R! K
  704.         strExtLocal.Empty();* v5 U9 E0 D4 o8 {) d* W. q; T
  705.         strFullName="readme.txt";  |0 W, V+ I* n$ |' j  O; C
  706.         dwProgramState=AP_CONNECT;
    ' p9 r; I) j9 B) p' O
  707.       }3 B; z+ F5 G/ T! ?* `% Q- C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * f$ ~# k4 ?' M0 u3 l# [' u
  709.       dwStartUpSteps=2;
    4 n3 u2 w  E) U) Z6 C
  710.       break;
    % d  z7 j1 n7 Y- D. D( _) o5 V6 F
  711.     case 2:
    $ K( ^& O% B  U
  712.       {4 Q2 J; m8 u. C# [* h$ @3 s" b6 z5 i
  713.         int iEOF;7 n% C* t& L4 i# C9 s0 E- M
  714.         FILE *fp;
    7 d# A6 i- C) I5 F+ U
  715.         char szString[512];& H5 Y0 f7 y4 ^8 t1 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" r! h  P, w% B0 y$ p) R% U
  717.         if(fp)
    9 }" v( X8 _1 J1 \3 t. _
  718.         {0 U3 H  [9 e) C. q1 K1 f2 R
  719.           do
    " n- q* C' b5 H5 ?% Q
  720.           {# d/ c. o' ~1 L0 w) t. @( X
  721.             iEOF=fscanf(fp,"%s",szString);7 y! W" p! o& j7 Z
  722.             if(strlen(szString))9 G' P- g  s3 a7 M1 s- S& P
  723.             {
    ! P& Q, b$ U  n: i
  724.               if(bFirstChar)
    / }# Y. J; O( r. b% t% r) F
  725.               {" ~9 N, k7 p- U8 ~. J1 W
  726.                 bFirstChar=FALSE;
    , H3 c2 B9 U  @' `
  727.                 bConnectIsBig5=FALSE;  n  F- o( ]8 w3 [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , {1 I# D8 k9 i9 S( T
  729.               }
    + a' Q/ N, d% ]4 ^& t) R: i
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  R6 a0 c* T$ Z9 `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 f, N9 u4 T9 x" s! K- R" }
  732.               dlg->m_ListText.AddString(szString);9 ~7 J  O0 {; v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' @; \& Z% i9 q! q, _2 I, z5 K
  734.               *szString=0;# l) ?# y9 M! `
  735.             }
    # t4 C+ e  ~( i( P
  736.           } while(iEOF!=EOF);+ }0 c2 I1 h# A/ Y
  737.           fclose(fp);
    6 G9 }' r% p# X' M4 J; g% m7 L: B
  738.           unlink(".\\DownLoad\\readme.txt");
    ; _6 _( e; u/ ]" A
  739.           dwStartUpSteps=3;/ W+ i. A1 E( Q* E  }
  740.         }2 m3 X' A% S4 W
  741.       }1 V8 ~! A$ X& L) ~& Y7 I5 e9 h
  742.       break;5 N7 q8 x- P7 I6 G0 I; j0 W6 W
  743.     case 3:
    + D* L% Y" |' b  S# w" @" K: x" n
  744.       if(!Dn.Connected())6 B: o2 L2 m" O1 f9 P8 w$ Q
  745.       {
    - P1 U% `( d0 i, N7 W5 [# q) K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 i- v: R1 J6 d: }4 a$ \3 [
  747.         dwTotalFiles=1;
    9 b, R+ l: D% b8 h- F) w2 a6 P
  748.         dwDownLoaded=0;
    8 \" z2 e9 d8 T4 B. T& q
  749.         bSilentStep=TRUE;
    " K  r2 B' v$ H
  750.         bCompressed=FALSE;
    5 ]8 u( ?8 U0 ?. o6 ]1 W  {
  751.         strExtLocal.Empty();
    1 K7 ~1 I( n+ ?/ p
  752.         strFullName="checkversion.txt";6 D; e" p) o: W( S* V+ x  _+ l
  753.         dwProgramState=AP_CONNECT;3 W7 S- w% [0 C, y
  754.       }
    , X4 |4 k& V$ \+ K# @
  755.       dwStartUpSteps=4;" C- ~5 q# m! c. m8 }7 J, K
  756.       break;
    8 ]4 R  v9 F% m% l" J$ P: G& j$ V& D
  757.     case 4:
    8 ~& L. f7 @8 Y3 e, N# ]. N
  758.       {) z2 q# h  `+ @- L" K5 E
  759.         FILE *fp;
    & L9 s3 q! ^% ]1 H, S
  760.         char szString1[128];
    % `6 _( K' n' j; ]7 [) G8 J
  761.         char szString2[128];  ?! E) G" V* o5 I) k: X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");' L8 {% y5 b6 N3 k- C8 ^
  763.         if(fp)
    7 H7 L3 V' U& S0 ^4 n5 Z  {: V
  764.         {! l0 t, u' [9 c8 I+ a# D
  765.           fscanf(fp,"%s",szString1);
    . Z4 z+ T4 L/ {) Y  G* s, A% f5 W
  766.           fclose(fp);2 }3 H5 p8 g# y8 `( d" t
  767.           fCheckVersion=atof(szString1);' _" _! q$ p) y# W+ M
  768.           fp=fopen(".\\checkversion.dat","r");
    + m: K1 \9 r9 D% o! z+ a
  769.           if(fp)
    , u7 S, X+ v" T1 h  T
  770.           {
    " j3 w4 _) i( m$ c1 X  f0 [
  771.             fscanf(fp,"%s",szString2);& b- p3 g, Y; b8 x1 U3 W+ @
  772.             fclose(fp);
    : G) n& ?& z6 `
  773.             if(atof(szString1)!=atof(szString2))
    7 v, g) Q  U6 u% ~5 ~* u
  774.             {
    # F' r1 Z$ E# L0 f7 j
  775.               if(!Dn.Connected()), ?1 l# k( h* ?  j5 O+ s/ K+ ]
  776.               {1 Z5 y2 J/ {  F, _
  777.                 bFirstUpdate=TRUE;
    " i4 Q* M" j; o( \& ]
  778.                 dwTotalFiles=1;
    : U% G6 T, b; E4 b0 E' g0 I
  779.                 dwDownLoaded=0;
    2 p; r; n8 e" C3 f, S; Q& P! g, @
  780.                 bSilentStep=FALSE;
    & l6 y& W/ G( s, Y- u
  781.                 bCompressed=TRUE;* b$ J6 h9 s4 H, T" a
  782.                 strExtLocal=".\\DownLoad\";
    2 R; i% a  U/ F# \
  783.                 strFullName="update.txt";
    * ~/ V$ ]7 n7 ]7 q" X
  784.                 dwProgramState=AP_CONNECT;
    . _& ?( u& z$ R" v" i
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 Q! Q# Y2 `0 `6 Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 o9 M8 S9 }9 @8 G! Q9 o& G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " @( J* D  A0 [
  788. . K  \5 U3 q9 J1 L0 r$ @# G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  f5 {7 ?6 ?7 W4 f, t/ ^' r
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ( P; Q; p. L* T) ]' X8 ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- W) X( y& C6 Z! V8 m
  792.                 {
    0 u1 E0 [  s- S! X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : k1 R* E1 D! B* r) z( W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* @5 k9 N' L  I0 P2 \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");: |6 ~+ T- u6 N9 u+ Y3 j* x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , [, W2 W: F; \8 v' h# p

  797. 5 L* Q8 R" v9 @: A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) d0 }* U0 w, a6 y, Q4 l. ?/ R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 m! r/ N  g% M, v* |  c! u! U. \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 [( K# _" ?0 a, s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ _* h: J) T- ^
  802.                 }# X/ j9 z0 ^+ z) U# ?
  803.                 dwStartUpSteps=5;8 F1 z; E% \& F" B, T
  804.               }+ _: V+ y9 T+ s0 S2 L- X
  805.             }
    + ]6 t" k, _+ {! p) @
  806.             else; E( X8 m8 X8 Z) Y
  807.             {
    2 C# ], ~$ Z( E- T% R( S& R
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 r6 }9 }& i# X  a: V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 ~" z: l0 Z4 H$ p
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& J: N5 b& D( B4 {, F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" n+ H& l' {5 R5 ^4 h8 _' I- T% T
  812. ! j( C9 i3 R" s% |" g& b' d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s' v' D* {) U# T8 K
  814.               dwStartUpSteps=99;, M: }: I8 A( I: j+ H
  815.               bFinishUpdated=TRUE;
    0 ?) r( l, U; V4 f: J
  816.               bCanUpdate=TRUE;
    ' w, n: d) v$ V0 N6 k2 I" f
  817.             }8 v( S+ }0 d( o6 `
  818.           }
    ' X, C- v) p2 `
  819.           else) M. X% U- q! g" s1 f
  820.           {
    , d# q# M# b. Z4 c
  821.             if(!Dn.Connected())
    & S: Q! u0 F( S. o& _& o
  822.             {
    / g+ s2 X9 n3 h7 U  S  U
  823.               bFirstUpdate=TRUE;5 g9 q5 p9 X& X; q
  824.               dwTotalFiles=1;; F' D/ b& U7 k0 Z9 l' h( `; @
  825.               dwDownLoaded=0;3 w5 x- `; r$ p5 ^
  826.               bSilentStep=FALSE;
    3 e: ?/ Y) k8 N3 w* W/ I
  827.               bCompressed=TRUE;9 m7 r9 g  a) J; m
  828.               strExtLocal=".\\DownLoad\";% k& a2 N) p* \7 E
  829.               strFullName="update.txt";
    1 V& l/ A* k% V) ~3 T/ U
  830.               dwProgramState=AP_CONNECT;
    % p9 a4 F+ Z( q7 T1 ?8 Y6 B$ x- W6 e4 {
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 @1 l) L' M$ L/ J" M6 z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) o$ {7 o' T- j' t  P1 T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * N* n2 Z$ \2 V: q5 ^8 u) m* b9 F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , |. X  d7 l$ W/ W. s% [  a
  835.               unlink(".\\DownLoad\\checkversion.txt");- U! z  U1 N" f
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# C; Q$ a5 j6 O* B: E( B3 Q5 e
  837.               {
    ; d0 I7 ^6 x8 }0 q" @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 H2 X+ E, h: g% W8 d' n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % d( Z/ i6 E3 y3 o( b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 F  B4 Z5 B! E+ u1 \6 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* D, \5 m4 |* r6 J- ^  q( c. G* A1 Y
  842.                 - _* i+ r3 o" A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; p4 ?9 O# a3 O( ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 p8 X8 U0 G6 N7 d2 S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: Z% W$ y, d' ^' C! T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 F+ i+ D3 N$ _% g5 C
  847.               }; ^6 N" K# u0 f$ K0 F' i9 G
  848.               dwStartUpSteps=5;7 P3 @* j" x; N6 G! }  H5 f, I
  849.             }0 u7 `8 q' ^& x; J+ k
  850.           }
    - ]' F. R' _- e7 w: ~; S8 _6 P, ]
  851.         }6 m( q  A* h* W
  852.         else5 L$ D  j6 h; R; l  N2 X$ X  y
  853.         {. [; i/ |# ?; x2 p# n. L6 E0 Y
  854.           dwStartUpSteps=3;
    4 K$ }" h  C+ i5 K2 h( P
  855.         }- _3 x# [1 i0 l4 O( x. ^
  856.       }
    6 x( r% Z1 F" G- T+ c
  857.       break;
    3 e8 M' F8 U. O" f0 O
  858.     case 5:1 q) H% t* R7 t% y5 L
  859.       {$ V& f7 e& A. G1 {0 f/ B! J
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 s1 v/ Y8 \' W2 U$ a
  861.         {
    : E- u" o% D( y( ~
  862.           int opt_overwrite=1;7 f1 H2 _, U3 T- c- _( j5 b
  863.           int opt_do_extract_withoutpath=0;$ d  \  F2 P. j
  864.           unzFile uf=NULL;
    / _7 M$ n8 {$ H7 p4 h

  865. ( D# ^, D  h* j. W
  866.           uf=unzOpen("Wsa.zip");# g6 U8 l+ _& k1 F+ x
  867.           if(uf)5 i7 O) R4 l! Q) p" m7 L$ l$ c
  868.           {
    - D6 G2 @: @3 q4 O3 _/ s( g6 g7 ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);8 D/ x$ ^+ y4 R# M
  870.             unzClose(uf);) u- {, z8 J% v
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ d& @5 v/ R6 I$ Y4 r% a$ K
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# A3 H+ U: G  ?+ r1 A* A! e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: x- I- E# b$ g, ^5 K1 C( v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 z8 |0 E7 C! U
  875.           }
    4 w6 t% A7 O' e) C1 b1 k
  876.           DeleteFile("Wsa.zip" );4 Q4 h- E! ^9 a/ w$ C
  877.         }; P$ f' D4 ?! G1 @' O- p
  878. ( y" q/ |& {9 ]- F/ K& g
  879.         if(CheckLocalVersion())- O) o$ `7 p" Y/ x; u2 i( |) d  c
  880.         {
    " f! z, o2 H$ p9 Z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");" x% h% T3 F: k5 D- {' k
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    * S6 @. \4 _' s* ?+ o  `5 d4 E0 b
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 `5 J' J9 b! o" ]) K) R+ R
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& \; d, g9 a7 y/ a" b6 ^' ]
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    / Q  A4 Y/ E9 g: ?6 W+ Y
  886.           dwStartUpSteps=99;/ ]) ~$ }, r5 _
  887.         }1 ^- D; O- k- g: c7 w. B
  888.         else
    ; p, L. a- m2 R3 |) N2 w0 h; _2 y
  889.         {! J+ S1 Q5 Y! z* Y( i  i4 j
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 f6 }5 U- i. f$ q6 _; n: y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- |) V' D2 \" R1 G! g
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");# F7 k+ J6 B# y# n# _

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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