CSUpdate.exe源代码

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

3 W9 M) A% E7 G, P/ A9 N: z* l
  1. / RevApp.cpp : Defines the class behaviors for the application./ W8 W. S! y; ~- y; G: _
  2. //9 y2 T5 v7 B1 A4 ?& Q5 e. v& @
  3. ; P% G+ n& ?. ?1 m& e. F
  4. #include "stdafx.h"5 H+ z% t! ~5 v# T/ U  F7 i
  5. 9 T5 t' u' Q& ^- [0 ]
  6. //#define UNICODE5 l- F7 _. ]" t7 W/ Z0 o
  7. //#include <gdiplus.h>2 ^4 N$ b, p) [* v% Z
  8. //using namespace Gdiplus;
    % t. W" v. l; G8 [; g5 u- |& `

  9. . ?# _- H! E5 L- b/ q: m" l# u; z
  10. #include "RevApp.h". ?0 {! ~9 D6 R
  11. #include "RevAppDlg.h"
    7 O3 k( c8 e* |, R
  12. $ u% y+ w  c3 Z; o4 n5 m# z
  13. #pragma warning(disable:4786)5 s0 ~9 i  G5 X+ @
  14. #include <map>, O! U' r" ~/ w( t: g
  15. #include <list># S4 a) [# U0 j. j) l+ j" A0 c
  16. #include <direct.h>
    & e3 o5 y( S2 g6 Z6 J

  17. / d# N5 P$ w' m/ f1 E
  18. #ifdef _DEBUG
    7 d9 l: w/ n9 G# r( s& X
  19. #define new DEBUG_NEW6 m$ S( d4 Y( i+ F4 i: }9 Z
  20. #undef THIS_FILE
    2 P1 K, @8 M( F; J( G; ^7 J3 Q
  21. static char THIS_FILE[] = __FILE__;+ g! z# Z: g  v' I2 b' ^
  22. #endif$ Z# y% U/ ~5 o2 v$ x1 z/ k+ t
  23. #include "SkinResDef.h"
      O) H: d% F! |1 S
  24. #include "ChangeBG.h"
    7 V1 H* w. M/ s3 l& q2 f0 e" ]
  25. #include "AFXINET.H"/ r# M6 |7 ]0 ?

  26. $ b- T! {3 @: y
  27. #define TRADITIONAL_CHINESE 0' @! Y! e$ c* ?" n4 \& X0 T% ^) |6 j
  28. #define SIMPLIFY_CHINESE 19 H2 i5 s" u' O% s
  29. #define ENGLISH 2
    + ^& i' n5 t/ D7 I9 u
  30. int m_iLanguage = ENGLISH;4 L0 w& a$ K/ Y( E7 h1 r3 q% ?
  31. /////////////////////////////////////////////////////////////////////////////
    / Q: D  @& Y6 y
  32. // CRevAppApp
    3 ]6 H0 d. S- s" K

  33. ' B3 F( F2 n+ L5 U2 R8 c" Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 d- {! `6 G6 z2 R) J  R
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # l+ A1 t7 [4 p- Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 x! v. i; W$ y! h- z  u7 u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' q& y& \: F7 E* J% A8 a
  38.         //}}AFX_MSG8 v% F1 U/ q! o+ v' m
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * d4 ~& U( Z! O! |; t2 B: J- X
  40. END_MESSAGE_MAP()( g# U7 [' U, ~8 f8 s& U% G; v4 T

  41. : Q4 g+ H3 T# T
  42. /////////////////////////////////////////////////////////////////////////////
    8 w: @8 |) j7 {5 w
  43. // CRevAppApp construction
    " f1 d+ ~% a' M) Y0 g3 N- G

  44. - p+ ^9 ~: ]# ]% \
  45. CRevAppApp::CRevAppApp()
    + L; U! O, E( L7 m, A9 i
  46. {1 H$ s% y8 h- c6 G
  47.         // TODO: add construction code here,
    ) D' K* \' o+ D7 s% J
  48.         // Place all significant initialization in InitInstance
    / n9 s0 \4 x% I# m" d) `. R
  49.   bDisplayIsBig5=FALSE;( V  B, U) O; C. v
  50.   bRestartUpdater=FALSE;& b1 V+ Y0 F. O* Q$ P" t- e- @
  51.   bFinishUpdated=FALSE;5 ^" M' b+ ~2 d5 p4 j4 o  R) l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 R, V3 v) q& [$ ^6 o! `& T2 [
  53.   InitChangeDataBig52GBKS();
    * A% c. a2 g6 e6 z, U
  54.   InitChangeDataGBKS2Big5();
    $ M0 b( w/ C, O
  55.         //
    ) p/ m2 f( J$ o1 K% A, X6 e
  56.         bClickRunExe = FALSE;
    $ v; W+ N6 I# f, c
  57.         //
    ( O4 `! C8 k, `4 Q6 y5 k
  58. }
    ) B5 J8 R7 t& \$ U! ]- f0 I

  59. 4 \; @( J- c; t# F+ O
  60. CRevAppApp::~CRevAppApp()' i/ \& O" c! ^
  61. {9 c$ s7 G" [& c. j8 P5 u# Y
  62.         // TODO: add construction code here,4 M! P8 r$ r* ]& l7 l! m" D5 ^
  63.         // Place all significant initialization in InitInstance
    * B# Q. l0 I+ I4 p3 N+ m' W
  64.   EndChangeData();
    ; d& S2 r; [  V4 E5 |4 b* [- v
  65. }& k# C; M6 p. L( f
  66. " n% X  k& Q6 l/ c" }# w+ x
  67. /////////////////////////////////////////////////////////////////////////////7 g0 R) ~4 b" f7 j
  68. // The one and only CRevAppApp object
    ) {5 N9 ^3 ?- E, U( G
  69. " H* s, \! Z1 u8 [5 v8 P7 i
  70. CRevAppApp theApp;
    $ m- c* S9 J  n4 k) a0 y' H* E

  71. * h% C" z2 p' }- n. H) E  _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 d* }! ]$ |' c! l2 ~
  73. {
    # [3 o  ]0 L* ?; [9 k3 }) L7 }# K
  74.   int iEOF=0;$ |; H4 `+ e7 h1 {
  75.   char szTempName[MAX_PATH];
    7 ~: `5 ^% J+ t9 q* l: l% Y! p( d
  76.   *szFileName=0;
      T& _4 ~$ B* X- D
  77.   iEOF=fscanf(fp,"%s",szTempName);0 b" ~" A! P4 [% I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # f. @7 d1 [, ?: h2 n8 Q) ~, j6 g
  79.   {8 q* E3 q; G+ X9 r1 L8 C, ?4 M; [
  80.     strcpy(szFileName,&szTempName[1]);5 H8 h3 ^" R5 ~! {3 t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), S3 Y4 ^; T8 m" p
  82.     {$ r& u1 l, m& Y# C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 `* `5 h/ w# E5 v8 q
  84.       strcat(szFileName," ");0 L5 x2 h9 f  F5 o
  85.       strcat(szFileName,szTempName);
    ; P/ A% T! G6 C' ^( L
  86.     }
    # X+ v* Y- P! f! X7 a+ M
  87.     if(strlen(szFileName)>=1), j2 ]0 e( n% ^
  88.     {4 r/ u# ]5 c, Z4 w) v# B
  89.       szFileName[strlen(szFileName)-1]=0;& O7 {7 c  G# L9 D1 t/ G
  90.     }
    4 P) {6 K* R; r( y3 D, ^; I
  91.   }
    3 S, y4 s/ {6 N$ |
  92.   return szFileName;
    . M  x" y$ y+ T% G! H& g( z
  93. }' V- N* ?, u, F! A8 i  U

  94. 6 ?7 ^( G0 w$ ]7 l4 A3 }! r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). Y! w, ?; T3 \; ?4 u
  96. {6 X8 w; a9 s4 Q& t. |
  97.   FILE *fp;
    # J+ Y) j# `; I7 `* Z% c2 w
  98.   char *key=NULL;% l, ^& f: U: ~7 F5 @  D
  99.   char version[MAX_PATH];
    : x  T  _: F8 f; s
  100.   LPUPDATEFILE file,olds;8 N# {  c" {" H! X0 S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- C, a% x, D% V$ @8 J
  102. - E4 K- Z. l) K4 l8 m* H0 {/ M- H
  103.   UpdateList.clear();1 B$ f3 Y, i5 o+ |# L- u
  104.   UpdateFile.clear();
    9 p! }; o4 D, M
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 z+ p8 X% |% R' }3 y  W  w
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - A( s1 K% S: [
  107.   fscanf(fp,"%s",version);
    4 e* r& c% R& m$ V/ D- F! J/ A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) @6 R& _9 R' H7 G5 G3 A) @
  109.   while(fscanf(fp,"%s",version)!=EOF)& T# O6 Q, v/ S" \
  110.   {
    ! c& X2 b  O1 p3 x4 r, i7 c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 s  ?+ I) Y/ P, d* ]
  112.     fscanf(fp,"%s",file->path);4 ?5 W" k. X  Y7 B: ~& ~5 O! |
  113.     ReadFileNames(fp,file->file);  T5 Z- {  K1 A9 u8 y
  114.     strcpy(file->full,".");5 p" ]! f3 w5 {8 R3 L, {
  115.     strcat(file->full,file->path);
    " J; A2 X! d/ N& o1 U
  116.     strcat(file->full,file->file);
    9 Z1 v% L& J2 _1 }+ ~/ L' f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 X1 A& L" B* \& h' u7 a
  118.     {# M- U, I$ }8 n/ [3 m
  119.       file->vers=(float)atof(version);& Z) K4 |; m/ d; f
  120.       UpdateList.push_back(file->full);
    " I& g* j- d0 a/ `3 a0 c3 `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # ~! z) a' c! j8 d! m1 F6 W- F+ Y
  122.     }
    + d3 ]7 \" r) F# G3 R7 F
  123.     else. E7 X, ?/ t8 V( r+ s2 W
  124.     {
    ( E* G" }# l8 p; D
  125.       olds=(*p).second;& x" V: U; q  e, _
  126.       if(olds->vers<(float)atof(version))
    - a+ B) X$ y. M2 _: E
  127.       {
    , q" m( b) \- D7 Y0 {) n% C. b
  128.         olds->vers=(float)atof(version);
    + r) b+ M2 q4 U
  129.       }3 S' C/ L4 E/ Z' ?4 N4 \8 K
  130.       free(file);7 Q. b# P& ~; }: H$ r. X4 j
  131.     }6 Q7 k! I* [5 I- u3 e0 U5 N) t
  132.   }
      f$ b; e( h) A$ m9 }9 N% m3 O+ L
  133.   fclose(fp);
    * X3 u, ]! x, W* \9 z
  134.   return true;: t- M' D1 Q9 k$ @/ P: ?
  135. }4 s# ]" {$ ]+ \- i' I$ V
  136. ! l8 [. n0 m: [+ E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& @/ s' j( h8 p
  138. {
    ' q. ^3 Y- z5 i& Q7 {! A6 \. K( c
  139.   TCHAR  szFull[MAX_PATH];4 N; Q  u9 v% I$ S; j# j* y. E+ _) F
  140.   TCHAR *token,*inter;
    ) M' v9 v' N9 L5 |
  141.   *szPath=0;
      m6 K3 Z/ y; _1 d  W9 U
  142.   strcpy(szFull,szFullPath);' R) {3 _. {* Z' d, t5 W. u  N
  143.   token=strtok(szFull,"\\/");- O! N/ X  A3 H, {! c4 n, Z
  144.   inter=token;7 s0 ~$ S7 Q9 d6 v6 ^2 x
  145.   while(token=strtok(NULL,"\\/"))+ T0 ]4 ^9 K& K% ^
  146.   {! I: k. H6 \# n, J+ ~' s
  147.     strcat(szPath,inter);
    $ D- o: M5 h  @; Z
  148.     strcat(szPath,"\");
    ( M" z7 O7 r1 S+ t  {4 _8 _9 U2 O
  149.     inter=token;. |, @. [( x0 K# _) i
  150.   }9 K! g5 ?+ O& B. L3 N6 i" K( E
  151.   return strlen(szPath);/ T. J, R; E3 j, H
  152. }/ l3 ~, E! k  T  X

  153. 5 p1 D/ O5 x9 L2 U; N8 y' ?+ Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  d8 N# c, p/ V; S  u8 k) l* I
  155. {
    & ~# G# S$ ]4 S1 b
  156.   DWORD attrib=GetFileAttributes(Target);
    / K  I4 d0 Q2 g
  157.   if(attrib!=-1)) W! s5 n  U) B; k2 r. d% T2 }
  158.   {
    ' [* ~5 P4 x/ P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ l" X5 p! E0 q* [( Y
  160.     {
    - R+ w3 S# m+ l( R1 F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 M( \9 i2 `7 v7 s1 t0 m
  162.       SetFileAttributes(Target,attrib);
    7 F8 r  u0 q/ {) k
  163.     }
    0 p5 O9 M- ]' b: o, U
  164.   }
    ! m3 _0 E9 Z9 ~3 B, K6 j
  165.   CopyFile(Source,Target,Erase);
    + H4 m1 R) l' Y  y8 e
  166. }
    2 K# K& [: |5 O/ U

  167. , c$ z# A+ b/ c/ s* e2 O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % r7 [8 x7 T) z* x9 k/ T) |5 U
  169. {, S# x" R( b' _' w2 f) B
  170.      FILE *fp;9 g. ~8 x. O2 n1 F! \# {/ G! R/ ?
  171.      char  szBuffer[8192];
    1 c, K* D; V- H/ X" A3 W
  172.   va_list  argptr;3 b) {) \. i' d: V2 E( h
  173. & i2 H  o+ o  T: o2 N, m. T
  174.         va_start(argptr,message);
    " w  Z. n8 h( y; a
  175.         vsprintf(szBuffer,message,argptr);
    ( a# n4 O6 }3 O! P2 N
  176.         va_end(argptr);
    ) s1 k% G' F! X& U! Z
  177.   fp=fopen(FileName,"a");0 }, _6 u# |6 H2 O5 x, `& u
  178.   if(fp)
    % h% s* ]: L+ H' G% A+ l& c5 ^8 j
  179.   {& T( J7 {& L' _
  180.     fprintf(fp,szBuffer);
    ) r# D5 V, g* ^1 i- m) I
  181.     fclose(fp);: _1 f6 d' w9 w2 u
  182.           _flushall();* ^) `: k6 L* [6 r7 H  w5 r' o
  183.   }
    1 a: N0 c7 e6 w- h
  184. }
    ) P4 f" I, X! b- T1 @6 c

  185. 1 r; V  i) z  h/ `) p5 T$ [
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 s1 ?; `5 n1 d( m9 s9 N8 y
  187. {
    ; R- L* O" x, n7 T2 f5 `- Z8 s
  188.      FILE *fp;
    9 R9 S' n8 \" W0 H! a" B  r8 j8 g% X
  189.     DWORD  attrib;
    % I$ t- _$ A, Y! o: }, R7 B
  190.   attrib=GetFileAttributes(FileName);' g, y) ~+ m, c  k$ w1 }2 @
  191.   if(attrib!=-1)
    ; j1 ?1 P& z7 c# h  i( |& E
  192.   {0 d* \" ]( s% [0 ?9 w) t6 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 G  ~' i3 T0 P& m* G5 x: S* C
  194.     if(!SetFileAttributes(FileName,attrib))/ e: q( P- R5 r$ ^! Z
  195.     {, Y/ X9 _5 h  _+ {: C
  196.       return FALSE;) O  g. Q5 Q. i  A
  197.     }
    3 j" p% J& c+ l( L3 V! S( J' r
  198.   }
    2 J+ p8 J4 d" @  Y; z
  199.   fp=fopen(FileName,"wb");2 s( N  Y/ C" g# _0 a' K
  200.   if(fp)
    1 J3 U4 c  P3 @8 R) R! a
  201.   {
    & @$ C* G9 u, e. J2 c8 B
  202.     fclose(fp);' k8 }' n" J3 o6 C5 W
  203.   }
    " d( g8 N# m4 \& L# T7 R, \
  204.   return TRUE;
    / A6 s6 C- y( R& l
  205. }1 S! C3 U9 [/ u4 b) Q9 ~2 b( b
  206. & r* M7 r( {  O- q* ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ ^0 d  Y( p4 s2 S1 k/ k
  208. {
    5 K* `* S- C6 r4 B! }; W5 c
  209.   char filename[MAX_PATH];
    ) y9 j' u3 \8 {4 I# }
  210.   LPUPDATEFILE file,olds;
    1 u$ |" z, m4 n1 V
  211.   std::map<int,CString>::iterator i;
    # d8 k$ s' I( S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. w9 {% B6 |0 @' k% I2 ~
  213.   std::list<CString>::iterator l;
    - p3 z8 \, ^! q5 h$ w1 Y7 y
  214. # M6 L. a7 j, @
  215.   if(bFirstUpdate)" T( [! H3 P- R0 v- K+ E0 K+ i
  216.   {+ W: B7 J! T; U8 M4 C
  217.     dwCurrFile=0;  Q1 X6 _- ^& I# z; F
  218.     bFirstUpdate=FALSE;
    % Q5 {! j# P% g$ `) x
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ t" ]7 f& M5 c* u1 Q
  220.     {
    9 h) t0 a, g9 G  q5 _/ R6 J. v2 }0 R; X
  221.       dwTotalFiles=UpdateLocal.size();. A% k: @9 a3 {! p% ?+ k
  222.       dwDownLoaded=0;
    2 O) q; `& R7 h- `
  223.       bSilentStep=FALSE;
    0 n' a; d& c4 t2 k% ~' F0 d
  224.       bCompressed=TRUE;
    ! ~( ^0 B5 a( t, P  ?; q
  225.       strExtLocal.Empty();
    . k8 Q8 ~: b+ o. s& X
  226.       strFullName=(*i).second;6 [# @5 ]) \9 W9 G" V, Z7 _# O
  227.       dwProgramState=AP_CONNECT;
    1 I" W/ |- o1 K% R
  228.       return TRUE;! I- F6 \1 @3 z4 O! u( o* {) J
  229.     }
    ; W; R- ~% O5 e
  230.   }( g6 q0 _+ @* P
  231.   else if(bRestartUpdater==FALSE)1 d8 Z; J5 S" \/ f
  232.   {7 E- s9 `7 r/ x% s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  G- T  c* B9 i# L( Y2 O7 @
  234.     {7 j% o6 T5 c5 g$ z8 Q; V
  235.       file=(*p).second;
    6 Y8 X- N8 B  V8 {0 z$ c. ^: I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- M0 X# A2 l: t$ L
  237.       {/ e( N& p) N1 y& t
  238.         olds=(*p).second;" `% v0 z! B9 }9 M/ J
  239.         olds->vers=file->vers;
    6 D# z- w' B$ f, P; N7 p$ F
  240.       }0 {) ~. C3 T2 P. t- b7 s) L- M
  241.       else: t9 I: @1 q( k" M% a0 d
  242.       {
    2 o7 D6 |% y  d; }4 P5 ^
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " [& d  d+ A% r6 g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 `$ P6 Q  [  u# X+ N  C! O2 ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 j) w- n8 N& J) |7 k3 f, ~7 h
  246.       }
    ; [2 I( g- t! W4 |3 A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* Z: K/ v8 Q3 ~" H/ w$ s1 {
  248.       sprintf(filename,"(%s)",file->file);
    % E" t! n+ y( {- R8 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 F- _& b6 X, }, k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 v  I2 o# H7 d# o. D( [
  251.     }
    : ~8 ^. L/ t) }
  252.     dwCurrFile++;
    / J+ Q! i/ Q+ O$ r5 M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 {; B- C% @! h8 K
  254.     {1 ?3 k  y# z, F( C! M
  255.       bSilentStep=FALSE;3 {: `+ W4 {$ L" o
  256.       bCompressed=TRUE;4 O( R. ?$ d% y1 }9 I
  257.       strExtLocal.Empty();& K$ k! Y) q/ H8 S# W, f
  258.       strFullName=(*i).second;2 o; l8 v4 [5 _: l6 u
  259.       dwProgramState=AP_CONNECT;
    / I* w" D& u- V& L/ V
  260.       return TRUE;( Y0 ]( M& P+ K6 F+ S- o) w5 J" c
  261.     }
    ! B2 r; ?. K) ]4 K% ^
  262.     if(!bRestartUpdater)9 @8 R; Z0 T. h. Z' h  c! J) Q
  263.     {6 ^3 L% ~3 W" o6 W: A% F! z. }
  264.       int iCurrSize,iFileSize;
    & T: t3 v" h" I' @4 n) b/ ^
  265.       iCurrSize=0;
    * D; _% {6 ~; Q% s; k+ u* A2 B
  266.       iFileSize=UpdateList2.size();
    , \% P* p, R. h1 |: S, N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    0 u+ G" P& P$ e  B& C$ a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, V1 ^) C2 n( w: w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% n( O" F* s, p- O/ v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 R$ q) @2 P  W" \; C
  271.       Fclearf(".\\update.dat");
    8 u/ |2 n9 K; X7 }, y2 V+ R
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    % t& w2 U9 m) }  m/ Z: i! _; z, T  |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  [- H) P9 A& F- R
  274.       {6 r0 K! _% @8 v5 @7 V+ t, D- U: `5 C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 M7 U/ {# z( }: }8 w
  276.         {
    8 v2 O( K1 B8 {  h6 b  `/ F
  277.           file=(*p).second;5 w3 c8 b2 _4 B" i. P) s" L
  278.           sprintf(filename,"(%s)",file->file);
    + P! ?: \' N" @. f3 I2 W8 P  Z) f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 p: `) |! G5 @& w" k+ X
  280.           iCurrSize++;# g/ y* k9 v, _. }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));0 r0 x$ K3 u# g3 ~' z2 M
  282.         }6 z: |( y( M4 V# M
  283.       }
      y5 }8 a! P: l7 u4 t0 w2 q- P: |' c
  284.       unlink(".\\update.txt");
    1 U2 ~! j# S1 G/ R& i
  285.       unlink(".\\update.tmp");  W, z9 G7 Q5 u2 C8 f- `3 ~
  286.       Fclearf(".\\checkversion.dat");
    5 O: {% A: }  k4 a0 Q$ A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 H) o+ k* a; L; e& [
  288.       if(UpdateLocal.size())
      K1 L2 `0 H* a* S. \' J
  289.       {
    5 M  `! m3 ?" `! e% j& v" m
  290.         UpdateLocal.clear();7 t6 o2 m6 Y5 q0 x* E
  291.       }/ ]* {; Z/ Z; t) q& _( ^
  292.       if(UpdateFile3.size()); W9 D: t% ~2 e2 w& C3 N
  293.       {
    1 ]1 k; H4 d8 _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# w& F9 S8 w( O4 a2 q% g0 q: m" W
  295.         {
    4 h9 D' Z- _8 |$ D* e- P
  296.           file=(*p).second;9 N& `' y3 y$ e4 e
  297.           free(file);1 O3 `7 o- C  A* g
  298.         }# `& H: e; S& P! u% W
  299.         UpdateFile3.clear();' r0 E/ u( n% @  p% c
  300.         UpdateList3.clear();
    ' L- [3 b% n' ]- J+ x1 ^8 X
  301.       }
    & N7 B! u" e( ]$ {1 r4 ^! E
  302.       if(UpdateFile2.size())2 r4 D3 p( g' w( `; M
  303.       {
    2 S4 S8 L; R- Y' E5 L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 m7 u" @! m' Z) @8 u1 S
  305.         {
    - u+ Y- ~' t0 J' |# v/ q
  306.           file=(*p).second;
    ! P/ v( o* j: I: r% U& D  ^+ n, |( e
  307.           free(file);5 F4 |, j2 n& G% f  Y0 j
  308.         }2 a2 s6 |$ K/ P% n% [# D! H3 d
  309.         UpdateFile2.clear();
    " I) A$ g# X2 C6 s
  310.         UpdateList2.clear();
    . r/ K! X* ]8 n: m8 u
  311.       }8 d" x3 e" T! V2 c8 l" [' f
  312.       if(UpdateFile1.size()), A' ~; g' E7 x9 o9 _; d
  313.       {6 p; O  b% ?; m1 V& o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 I7 a. K9 G  `4 k6 D8 c* a6 h, q
  315.         {# ]/ l5 u( R* @' z; b5 O
  316.           file=(*p).second;6 w# n* n& V( {
  317.           free(file);
    - i  v. v* m# a( B! ]
  318.         }
    : b( u5 `8 A# d& }
  319.         UpdateFile1.clear();
    # h' z- `% x# n+ m* G: a. k
  320.         UpdateList1.clear();, l! o  m$ g& K1 r
  321.       }
    7 o. M9 ?5 a3 S( o/ N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));& j% s' Q' X$ T7 g7 f
  323.     }0 E- H% ]% S8 x& l& O7 c
  324.   }
    1 o# Z" L2 `5 @2 o( F6 Q. h
  325.   return FALSE;5 s. o0 w0 O- y; o9 s3 k  g
  326. }
    - G$ L* n$ a- S4 ]& B/ P
  327. 0 P  ^4 ~9 t+ a6 a# ~( {
  328. void CRevAppApp::ClearAll(void)/ k. H+ u4 Z* s% k* g+ [; ]  I* s( `
  329. {
    * k+ a% ^0 ~2 h. H
  330.   LPUPDATEFILE file;  |: _% y* L0 T8 z2 C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;. s0 R, V1 ]3 _/ X

  332. , d8 L1 Z7 f0 ]: f
  333.   if(UpdateLocal.size())0 \2 A' D# [& k8 g
  334.   {
    ) [  G$ @& T: Q- _0 D. n3 |1 a
  335.     UpdateLocal.clear();
    # t+ J- y% B- Y6 }9 k$ Y
  336.   }+ i" |3 M  I' ~6 v
  337.   if(UpdateFile3.size())
    * \& P2 J  u$ }* H( [, t- v7 [
  338.   {; W3 z2 c- X3 ?% V4 H0 ]8 |/ A# ~2 |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 |+ P- `$ ]- H, `' W
  340.     {
    - {. b$ r0 {! u/ s( ^
  341.       file=(*p).second;
    + x* C0 J  g8 P- K! p
  342.       free(file);2 N- B5 j. h4 \" X$ [. \- e/ T: M
  343.     }. v. ~* D% _" P+ Z) `& c: Q& }
  344.     UpdateFile3.clear();; H* d: _! B3 j" U0 f' q
  345.     UpdateList3.clear();  f& s5 f  i0 c# W8 N
  346.   }
    % ?1 M8 Q6 o& O9 E
  347.   if(UpdateFile2.size())1 o5 E# x" e& {* v5 F- ~
  348.   {
    4 B9 }9 z: B3 q8 H& R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 Z  g9 Z) l" y5 [
  350.     {5 Q9 W' j# }3 i1 J! b; }
  351.       file=(*p).second;
    , v% T; X, s2 h# Y9 E. G4 X0 \  N
  352.       free(file);: ~2 s8 ^" X8 k1 ~2 ?
  353.     }
    9 U& }* ?. u. @$ H, x/ D( f
  354.     UpdateFile2.clear();
    , @* j# R0 P% m
  355.     UpdateList2.clear();  }& ?" Z' ~9 C
  356.   }
    - {. J7 g- g2 ?; X! ]  ^
  357.   if(UpdateFile1.size())3 C9 t8 O" z' L" T: N
  358.   {
    3 K( [  f" t4 [" V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) S) w" C) s: v
  360.     {* H" Z5 B' U( J2 R* q
  361.       file=(*p).second;
    * T( r1 y# z9 u5 I3 p) b' z% a
  362.       free(file);" V: ]3 ?$ I. ]+ S1 c/ i& `
  363.     }% _0 A5 T& s; F. U6 X# @( ~2 V; M
  364.     UpdateFile1.clear();% S# [/ |' c+ C2 t* C& V
  365.     UpdateList1.clear();2 E: m' q! S( l& G8 U
  366.   }, ]' O; ]9 I. ^0 u# _
  367. }  / }# N0 L+ A- U; h& Z
  368.   1 P% D4 D8 k$ I+ G; Z% O
  369. BOOL CRevAppApp::CheckLocalVersion(void)! s* ?; p9 z/ @# x- p% z, l7 j  V, Y
  370. {
    - E( T: F% J. B7 b5 s+ S
  371.   int c;
    8 q; Y7 m% S0 x8 K7 Q" W0 N
  372.   LPUPDATEFILE file1,file2;
    7 t" x4 G  e, @# A5 V* s
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;1 s) }6 Y1 R7 H  k
  374.   std::list<CString>::iterator l;$ z% [* I: G' }8 D
  375. ( Y& ^1 _7 e, N5 o" ~5 p
  376.   UpdateLocal.clear();5 I" V" a( l6 T* u, N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 \4 n: y: e; F: @! z/ l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" x! W0 S9 }. }3 J$ A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & g. [% {. G: B2 ?! |( J% l7 U! e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 w) I5 w& P" a3 S- n1 ]$ T
  381.   if(UpdateFile3.size())
    ) [" c+ w1 u  }3 B. B4 Y5 f# S
  382.   {+ ]# k+ d7 o+ |6 G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 E0 b  h9 C- k
  384.     {+ G0 d' N0 H: \2 d" s7 j
  385.       file2=(LPUPDATEFILE)(*i).second;
    : I0 S' k; t$ L# d+ g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 o: N# i. V: c  U
  387.       {7 k9 d: _) }! X8 s
  388.         file1=(LPUPDATEFILE)(*p).second;
    + H4 L/ a( {0 b0 I* u
  389.         file1->vers=file2->vers;5 r+ M5 k1 f! |  `1 ^
  390.       }) @! [& k3 |% b4 J( P
  391.       else! o" t) X3 P9 {, y. P; Y4 @
  392.       {* W) j1 o: c  i0 u: }, a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- q, L  v2 p8 P% J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 j0 [8 E" ?+ F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& r2 y! [  ^- ~; ~% [; {3 U& s6 J# u
  396.       }
    " o+ C- w2 L* z3 P2 i
  397.     }! t. T& r" R4 p6 g, V# @
  398.   }
    3 |  H8 H* g6 U, W: x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  x- K4 a  c) l% k  P  f
  400.   {
    , {5 h) M8 z) z2 h, r/ i  Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())9 n9 t9 {& i: @' y4 A
  402.     {
    ) v& W/ q  U" I
  403.       file2=(LPUPDATEFILE)(*i).second;0 V# s& X: z! n: p3 n5 j) `
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 x6 `5 F, y& c- i% P* T/ Z# p
  405.       {
      F4 m- J$ b& a' Q
  406.         file1=(LPUPDATEFILE)(*p).second;0 b5 ~" b3 i/ \5 ?
  407.         if(file1->vers!=file2->vers)
    ; i2 e3 T5 E: T* a+ t% C7 ^' v
  408.         {1 i' D% g2 L6 P' z$ K
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 g, r+ n9 ?" R" B
  410.           c++;
    ! A$ }4 f) Z: x' Q, I# V8 I
  411.         }* `$ {, v+ ?2 X/ A
  412.       }
    4 w6 P# i- Y  Q3 Z% ^) L# J; ]
  413.       else
    0 ]0 j' Y6 n" F% {6 P! `
  414.       {2 i4 l/ w' y/ x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      s* k5 p" Z) F9 v7 K
  416.         c++;2 ~+ M. ]+ \5 k% \
  417.       }7 V" T0 U. [1 u8 \" q
  418.     }5 \6 S) E: C+ p7 U9 Y
  419.   }
    + v$ j# C7 x+ L* n
  420.   unlink(".\\DownLoad\\update.txt");6 e0 R. R$ ~! Z' D+ B
  421.   if(UpdateLocal.size()) return TRUE;0 A% @3 b& D3 u( T
  422.   else                   return FALSE;
    % u% W% |, w( r& M, `: D
  423. }+ U# \8 X. n+ |

  424. * ?4 W9 ]; L  q; J+ j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* J- ~# j, y* |5 V1 G1 s, l1 M4 p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - W, h4 l0 N1 S5 v* |, k
  427. 1 i1 N6 P& a5 N+ F
  428.   l- G- ]0 ?/ D2 H) O/ R

  429. + i5 }% c" X- d5 r# x' \0 ?
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" @. S/ K3 z/ y7 D
  431. {0 c  j" Y1 F) F- }; c0 o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 ~3 {4 c/ M  V# P  D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( ?* t9 @' n' G) q2 U& k; w. |# W
  434.   {
    9 y6 k- x% i+ L, }! W
  435.     char szLanguage[50];( _7 t; {7 D) F# L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 o. B: S9 Q8 O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 R; G0 l# t6 z& r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * g4 h- a* T) Z- P2 i9 J, _
  439.     else                                   m_iLanguage=ENGLISH;
    ! N  \3 r. c3 L# o
  440.     char szRegister[100];; t/ a% }7 N; l# M
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 s2 y: S: ~* ^$ ?; k5 G( N
  442.     strRegsName=szRegister;
    ' y* i* s  K7 C0 S% T" |/ W
  443.     char szPatchURL[100];/ l- g' H9 G) m' Y/ J) ^3 L- s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ O( t( C1 c) O. W$ D) B& ~: R* N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : X: u2 L" g2 F; A7 p! v
  446.   }
    4 @6 V. K/ O1 h+ }( _: k4 Q
  447.   else. j# G. k. ~8 Z% f8 x
  448.   {
    9 O6 Y8 {. a# p8 B( b4 I" i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % b. S) e4 H! i9 M7 f& @( t
  450.     strRegsName=DEFAULT_REG_URL;
    0 M0 q2 v) d7 n- H4 s1 X: b4 F
  451.   }1 L4 @& Q# Y/ e1 r' V/ J
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ {+ ~  m- \( |7 c( y
  453.   {; o- ~* L( _0 Z3 W7 A% Y
  454.     char szIP[50];
    ( K- f9 h: o0 A: m; [
  455.     char szDIR[300];
    * W) @1 C5 K' `# B' v4 J
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" a* O" l8 \% Y
  457.     {1 y2 B5 E  `. R+ {5 Z; d
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");% C- q% h. D! L' M  @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 M1 }; H& q$ f# u5 u. n# C
  460.       strHostName=szIP;0 P9 R0 P0 t5 e2 k' B+ Y4 `8 v
  461.       strHostPath.Format("/%s",szDIR);
    2 \( z4 z0 n7 u3 K% S0 A1 c
  462.     }9 V$ Z" ?8 M* i* P( C+ b
  463.     else
    $ F0 F& {! E* `3 b2 l. _/ k7 {
  464.     {7 `; \! F; t  _# v1 |) m( _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( Y$ S9 [* f) X; e9 A/ ?/ n$ t; A- ]
  466.       {
    . ]: z0 V* p/ ^$ z/ \6 }  l
  467.         char szLanguage[50];
    4 y' O& |, p) N) r; G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % o- R. b! i# g9 B. {, c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& C7 l" {+ {! n: g! @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! b/ _3 s6 k8 s# T6 V3 u$ g, w: u
  471.         else                                   m_iLanguage=ENGLISH;
    ) m9 H& _4 t% |
  472.         char szRegister[100];
    1 X' ?9 B( p& h8 S, x: a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  r( X3 X4 d8 M% b8 V- }5 F
  474.         strRegsName=szRegister;
    2 T3 M! f; [/ C  c2 Y8 V( L( }9 ^
  475.         char szPatchURL[100];+ S/ ?6 Q/ E9 H1 O! G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " N7 l/ a3 |; [9 C" ~/ F* T
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 B- |  M2 |- s; ~4 }! P5 g! W
  478.       }
    * \  K' I- r8 Q  ?
  479.       else& O1 i) W7 c0 d) ~. o
  480.       {
    / I! t1 i, w3 ^  E+ Q5 B6 T! c2 F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / Y4 R( b% B1 u9 a
  482.         strRegsName=DEFAULT_REG_URL;% o; R$ D6 D. i. h5 t% f
  483.       }
    / n! |: H8 T' `
  484.     }
    ; B3 y2 e. H3 {) ^: a  p- {
  485.   }
    - [+ {2 t) a: }- B
  486.   return true;
    % G) [. j3 l* Y% z
  487. }
    5 P0 a' k3 X2 g. k9 c& R

  488. & H9 G- E" [( u6 E
  489. #include ".\ZLib\unzip.h"
    8 P' Y) P- R, r( P3 j% u2 I& j9 U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) L$ h: }* ], j- ]) ?
  491. /////////////////////////////////////////////////////////////////////////////
    : R1 f  `( }, t# U
  492. // CRevAppApp initialization2 V* b5 J3 o: l5 _- X% K2 `+ @1 `+ `

  493. . o$ J' \" @7 t7 f
  494. BOOL CRevAppApp::InitInstance()' J( f# p7 G  L# }
  495. {
    # u: p4 M. m% X- h1 X% A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  v( q- A& K# p$ k
  497. , l# c1 i( j3 y0 c7 f6 w8 J" E/ ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- ~$ `: V* L; v& ~6 ?9 U, r" q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 X. n8 n1 Y5 G1 p) O
  500.   {) u4 `5 [' y' {: n5 V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 Z# [% j! ?: ~0 x: ^! n* x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; q% k' U; t6 y- w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 c" ^  _. o! {; E
  504.     {7 l* [6 X! b6 g1 G
  505.       strcpy(szPath,szPathTarget);
    ' J4 x( q& f* K6 _6 Z7 H
  506.       SetCurrentDirectory(szPath);
    ' v% y6 I. H3 K' N1 g6 Z
  507.     }5 a% v' s) y3 J2 \
  508.   }4 _* i& |7 \1 {' f' H( W! z8 H
  509. #ifdef _DEBUG
    8 l( x8 c" o0 R* M* `
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - x% C# x% H' Z  ?5 |
  511. #else+ g1 J8 g' v7 d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / i1 S- i/ ~7 m8 x- @/ z# q: G
  513. #endif- Z! I' d! L# W7 S; B. W
  514.   {
    " @0 {( G2 x: m+ W( M; j
  515.     char tempFileName[MAX_PATH];
    0 W6 u4 i& _, E: d( _
  516.     strcpy(tempFileName,szPathSource);2 k' Q7 B5 L! [2 C( A' N
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; D3 S8 K2 k% {; ^* L
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! K0 B5 P5 a- G) x6 r2 `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' h' d- Y. l+ `; m: p) B) o. ^- `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 s- Z9 D! ~: c6 d5 e( W  p
  521.     return TRUE;
    5 ^, ?3 q# C0 [' Q  U. N
  522.   }- Z, {6 u3 H5 g- |5 K& r  E4 X5 f
  523.   // Nuke 0118: Delete run.exe/ @: D- P1 c2 y8 W0 U) M* K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  J4 g$ R/ y- R; g- _3 k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");; u% \. T; j. q* r; t, q/ U
  526.   if(!ReadCfgFile("Config.ini"))+ N$ c0 L: j) B& |; F  v
  527.   {& D: q* S' s4 K7 C( I6 }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - p8 n( i# ~8 l  P5 E+ z: C1 {  ^; k
  529.     return TRUE;
    + W) O/ d5 `0 q
  530.   }/ \' G) k9 K! M# j; t
  531.   HANDLE mutex;% ~5 r7 O- C, x+ R4 I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ w# l+ ~+ h; G5 i  {
  533.   {- M# L; r8 X6 W% G  |/ B: ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) y, o% U+ r  P% y0 p& L% M. }& P4 H
  535.     {, u$ G, y( c+ C. v2 V
  536.       CloseHandle(mutex);9 W  ^& s8 Q  W% X  Y6 S: E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% I& M$ R3 Q# [+ `; K/ F( P5 ?
  538.       return TRUE;
    " l" t/ I+ U$ M8 C4 H: I! o
  539.     }! p8 |% X% N) k4 K4 @: Z! L
  540.   }  ' a3 v) `& C0 x5 J  [
  541.   CloseHandle(mutex);
    . ?' r& b" A: U/ L
  542. 0 H# e& x6 m0 E% }7 D  a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  c! R" M2 O5 o& H7 X) z* k! t" |  R6 w
  544. ( _. B! c- Q1 Y* l
  545.         AfxEnableControlContainer();& s5 v% b. A  l

  546. 4 ?' N% M! N# n
  547.   bCanUpdate=FALSE;8 Z* O, g' ]% e3 ]. w/ `
  548.   dwStartUpSteps=1;/ q  V7 F; z# x# s' z( c
  549.   dwProgramState=AP_NOTHING;
    , m8 j$ D" n/ K/ s+ J* a; [
  550. ( b. n  A) e# v& O; ?6 |2 J7 \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 q  g( r: ^0 b- @: s

  552. 4 i; Z$ N1 K4 T3 G
  553.         // Standard initialization
    ( N. n& \6 T( F5 I4 i+ w+ r+ S2 v
  554.         // If you are not using these features and wish to reduce the size" L! G" p/ U0 y/ r8 M5 D
  555.         //  of your final executable, you should remove from the following3 T. u+ R! L2 Y' |- V
  556.         //  the specific initialization routines you do not need.* Z- s3 [9 m- z: M& P' X
  557. ) B; Z* T& X+ H# ?# K
  558. #ifdef _AFXDLL2 v' H0 ~2 C5 o8 d
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - [- h0 o0 w2 K+ v, J8 u5 `
  560. #else
    6 U: z/ T& ~6 v; i7 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : m  ~' _7 T1 O# D: p/ h/ Z) G
  562. #endif* C+ `8 M; o+ e! K' I

  563. ( F) m% \6 Q% f# l, |( a) P4 _" u  w
  564.   dlg=new CRevAppDlg;
    7 P; d" n2 p% A6 `& ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 p8 D. }  {& h/ O8 t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* E/ \: z+ y. F, _. e
  567.   m_pMainWnd=dlg;
    . Z* {& y& m2 b8 C, S( ^

  568. 5 x8 w" I' o. q! ~$ W0 _1 f7 J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , G# k9 i2 }0 l, G" Q

  570. $ ^" J) }4 @+ q9 T$ N# ~2 N$ [
  571. //  GdiplusStartupInput gdiplusStartupInput;# l+ C% t5 k1 H& y5 a' K" J
  572. //  ULONG_PTR gdiplusToken;
    % I. A+ M5 Q& p8 H% a* I7 t% k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; w4 S2 u, a; z8 {( j3 S6 n( u6 P

  574. 8 G5 l  V* X# Z+ S
  575. //        CRevAppDlg dlg;
    3 A3 B( X/ q) E( ?8 A
  576. //        int nResponse = dlg.DoModal();0 I, g( S' H8 p4 N& m
  577. //        if (nResponse == IDOK)
    ) J" C, U5 k& @2 r5 t, l2 B9 }
  578. //        {
    * l* N- F; Y4 d3 g
  579. //                // TODO: Place code here to handle when the dialog is
    " `/ k' |" ~5 M4 k
  580. //                //  dismissed with OK
    0 W2 V3 U1 Q+ y. B4 c
  581. //        }
    * ]9 L) ?* r9 m; Y  e( g3 m
  582. //        else if (nResponse == IDCANCEL)1 u: `" Q5 x8 _+ U
  583. //        {
    * |; d2 o' ~' x3 f, R2 X
  584. //                // TODO: Place code here to handle when the dialog is/ C4 |3 `  s& Q+ q/ A- u. j+ l5 |) w2 i
  585. //                //  dismissed with Cancel
    , O* E9 W; d/ m. y  [2 E5 A
  586. //        }
    & T! [' X2 N: ~. n/ y9 r, \; u
  587. : w6 V/ T) O, ~- G
  588.         // Since the dialog has been closed, return FALSE so that we exit the  b$ H2 Y$ d" w, D
  589.         //  application, rather than start the application's message pump.6 c# J2 ]" s8 B8 D
  590.         return TRUE;
    " i" I& H* e4 k& G  e- y
  591. }
    / X3 E5 N6 ?* @% I4 }. n  Q( j
  592. $ _9 \; q. B* T9 j0 @; [7 J' \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 p2 y  Q5 v2 C" H5 ?6 \: G
  594. {5 l. M2 X) U" ]( H. K5 O
  595.   int i;
    - H: @: W7 A. E8 L
  596.   char *szRet;
    / `+ i( ?) j3 P3 o8 t, U, U2 q1 f
  597. ) d$ K) A7 g+ S& r7 S% P1 G
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) A& u9 A* T+ Y3 ]6 }! Z0 x$ b
  599.   if(sztoken): F$ {5 V& s' k% m
  600.   {: W( U, N% b6 C& e; p
  601.     szRet=&sztoken[itoken];
    / q8 {  {: s0 H& H7 [* A
  602.     while(sztoken[itoken])
    3 Y+ S' B% E* q  \7 i
  603.     {
    ) \8 P: H; L, w2 a9 e4 j
  604.       for(i=0;i<(int)strlen(token);i++)
    , W" L5 z+ A$ d: b3 d
  605.       {
    - g/ O5 X9 ]! ]$ w$ y' L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), r: I4 n- Q0 \; ?! X
  607.         {6 ^$ ^% R: o! U' A0 J( e
  608.           sztoken[itoken++]=0;
    + H& [! d3 E8 L# W; ]% J# A) k# j
  609.           sztoken[itoken++]=0;
    : D  s) k) h5 `2 K8 N/ ^3 B
  610.           return szRet;
    6 A6 ]& l: j6 M' `
  611.         }
      T% Z8 ~- B' p: b7 \6 }$ `2 h
  612.       }
    8 D  o- f6 Q: P" m# `
  613.       itoken++;
    ) k  A3 G4 U7 j3 O. W
  614.     }, a1 T! c0 N. i3 D. m# P
  615.   }
    ( T7 n. l- ]- n
  616.   return NULL;+ e+ f3 [) |1 \, G* D1 C  `+ Z
  617. }; q) H+ V9 o8 F

  618. / B4 d6 |$ T5 m0 f1 Q
  619. void ProcessProc(long Total,long Current)' T8 c6 W9 g3 q( c/ [
  620. {* U$ ]( h9 [3 Z. v
  621.         MSG msg;
    - C4 L3 g8 h! B! l+ q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 n. z% `2 j+ l% P/ d6 `( E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - e. c% ^& ?" ?5 c7 L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * x; `8 v9 Z  c, B% [
  625.         {
    ( \& S$ D! ~* ]4 {8 G, j
  626.                 if(!GetMessage(&msg,NULL,0,0))" d2 n* b( _5 B& o5 o' V% x% g
  627.                 {
    * Q* V  V# l% [4 f
  628.                         return;
    / k* C) g' U, L. M( t- R* I5 S
  629.                 }# f, f& X# V. o; e
  630.                 TranslateMessage(&msg);0 n0 W  R" ^2 r* S# d# d7 i
  631.                 DispatchMessage(&msg);$ M3 A7 v8 q* o( Y$ F. t+ n
  632.         }       
    . j" ?- k) R# [- B: w
  633. }1 G- t1 m/ \- H1 K

  634. 1 S" U$ }- c/ @4 `5 ]
  635. BOOL bFirstChar=TRUE;/ ?; u" Y) Y/ `% G
  636. ) A3 h7 K  M$ i: {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# P6 e$ L; N5 f
  638. {
    ! F$ v5 m6 T3 T0 m, S
  639.         // TODO: Add your specialized code here and/or call the base class
    % x/ b* e! J8 K6 A
  640.   switch(dwProgramState)% A! R; w6 k+ t, H' b
  641.   {
    ) ?: F1 U$ L8 J! W
  642.   case AP_NOTHING:
    4 c7 j4 p) T- W7 p/ `8 U0 d! {
  643.     switch(dwStartUpSteps)
    0 v6 \* z+ y6 g2 W3 K; F; Z# K' r
  644.     {
    ! V! D% {: C+ J( C1 e6 ?0 i, @
  645.     case 1:
    + i/ ^& T$ [" s7 V. Z" M
  646.       {5 q0 ^* E7 ?& w/ r$ A
  647.         int i;# \9 ^- R9 b2 X9 X& g
  648.         CDC *pCDC=dlg->GetDC();
    : f* T/ D; |* h. z/ o! \& ^4 C
  649.         HDC hdcwnd=pCDC->m_hDC;- G5 m5 I* A$ B, r; U- S5 M" R
  650. //        Graphics graphics(hdcwnd);
    1 ~7 L" Y8 y8 E$ ~  ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 M/ Y) T, u3 t, g
  652. //        INT iWidth=bitmap.GetWidth();
    $ Z6 }% f" k4 F
  653. //        INT iHeight=bitmap.GetHeight();: D  h6 N. L6 `! m
  654. //        Color color,colorTemp;
    7 ^' T1 c$ O9 Q9 C% U( r& \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & \7 O) D. ^* R# u
  656. //        {
    ) [  X& y  s- o# o! H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 V( _- f- R. l* q( z! o
  658. //          {
    ) b9 C9 P$ a2 @! Z% q4 p# y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; j% G2 ~, _5 U; g& t# H
  660. //            colorTemp.SetValue(color.MakeARGB(
    - R: |5 m  x+ Z4 O0 A, v
  661. //              (BYTE)(255*iColumn/iWidth),
    * j: ~9 }, e" [, p- f
  662. //              color.GetRed(),
    " E  x( [0 b9 a. a5 }. f$ }$ E$ Z
  663. //              color.GetGreen(),, I5 B2 U) j6 W: F
  664. //              color.GetBlue()));) I1 @2 I' [. Z  }8 V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( b5 \( u9 e/ ?4 i& h( A
  666. //          }
    & U5 Y, }/ C4 z& b9 {( R: [
  667. //        }
    $ F" Y0 x5 ?6 J: M; ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' z& F/ |: @& t: S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : g+ k. m; S# j, ]9 a% |6 z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' u4 ^) g7 _) e( Y8 ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : R1 Z" q# o! o, l( |" _
  672.         for(i=0;i<240;i+=8)
    8 O1 F; h2 M4 H1 N- z
  673.         {
    ' ]; H( [" e# L0 Y/ ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& p7 v7 f9 W- u  f! @1 s8 b( J) a
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 m7 C$ V& q$ U9 e8 e6 Q/ m8 a
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 K" |$ i# z9 Q
  677.           Sleep(33);
    , ^$ E! A+ s" l+ Z! a
  678.         }
    2 A, Y# @9 U6 R" G
  679.         Sleep(1000);1 \/ [1 p) T/ @+ |+ @" V  w- s
  680.         for(i=240;i>0;i-=8)
    # e7 S- M9 w) w
  681.         {; o2 }8 R/ |6 U! a1 a& |1 x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 L3 G6 o" Z% ]2 K7 R( n2 m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 [0 Y( x& K7 z3 u6 I1 V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * p" ?* f9 r( r( @1 Z% ^
  685.           Sleep(33);4 `3 \3 ~0 n4 n/ q  a% c$ Q, M
  686.         }' m8 ]1 D( a" x% V; Q0 y7 N2 M" y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , l3 N% i0 P! ~: j
  688.         dlg->ReleaseDC(pCDC);
    : v9 f: F( l! T
  689.         DeleteDC(hdctar);* P( {( B5 G8 _$ l) d& {
  690.         DeleteDC(hdcsrc);
    ' O0 p8 p0 i6 s6 E
  691.         DeleteDC(hdcorg);5 Y2 A: m/ C% H3 n+ v
  692.       }' o  w' F& z$ K7 A( ]9 x' }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! ^: f4 t2 S( y/ z$ C& Q& e  h  O: W3 M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& M9 f! q0 R. V( K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * x8 M3 j1 J( l$ i8 ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. z, u' l& @+ N1 ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " C6 Y4 H: |* e' [
  698.       if(!Dn.Connected())
    2 S/ Y& J3 f. S4 d1 M" W
  699.       {( e* k; S5 [+ ]$ f/ u  Y9 Q+ F
  700.         dwTotalFiles=1;8 j5 c- c4 [# w+ B/ g& r2 p" D
  701.         dwDownLoaded=0;
    ( O- B8 P" {8 e' V7 o# Y
  702.         bSilentStep=TRUE;
    . E$ P5 c3 H. m, d! R; k: m2 T6 [: y
  703.         bCompressed=FALSE;" x3 p! i! m( ~. N- o
  704.         strExtLocal.Empty();. h! K3 m% \  \9 [" D$ K  d7 D
  705.         strFullName="readme.txt";! d6 u3 ~* i! z+ T8 e) g8 d
  706.         dwProgramState=AP_CONNECT;
    , M" o) Y2 o1 L5 f& ~) O  @3 ], i
  707.       }4 ~3 D: m2 L: y5 s: B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 S( h7 J4 X! D4 N# t* d' c: t1 X
  709.       dwStartUpSteps=2;0 Q6 e2 w3 g, i' _2 m
  710.       break;! R$ l  o0 V0 N7 ]% u
  711.     case 2:# h; v6 {! [4 ^+ B8 k, [
  712.       {
    0 g' X3 v; C& ^3 E3 O/ Q
  713.         int iEOF;, \$ g3 e3 ~0 @' S" z! z- q8 c
  714.         FILE *fp;; Y9 W9 t* _+ q& H) b% X' Q. \! t  O; q
  715.         char szString[512];
    : @# n8 S6 s) K5 M; d- b) f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - b$ E8 P1 l+ r3 L
  717.         if(fp)
    - h- {& m+ v- E  e
  718.         {
    ; }" z2 c0 w3 f4 |8 a6 P
  719.           do1 M3 p* b1 |' E! s) P
  720.           {
    . r8 l- c) G7 O( k
  721.             iEOF=fscanf(fp,"%s",szString);$ x7 y: i# @' c# A# o- m+ g  O
  722.             if(strlen(szString))7 L0 c7 g+ t3 k5 g
  723.             {' w! |7 m! @* T! y: C1 H
  724.               if(bFirstChar)
    0 O; R4 t" N; o+ c
  725.               {2 S2 @' ]8 O4 c7 g$ G/ [0 ]
  726.                 bFirstChar=FALSE;- `1 G5 |2 P! N% o* a4 k8 D
  727.                 bConnectIsBig5=FALSE;& Y5 A5 b1 w* Q) `% }# ?, H. \9 i2 w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , T2 s: M. a8 G# p9 x' w
  729.               }
    $ w) d( M+ j# ?3 i
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- l4 r, c  d! L' B( h4 e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # [2 Q; B& D. Q& l  m7 }
  732.               dlg->m_ListText.AddString(szString);
    , ]. |* I/ U. l( I# ?4 E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ x1 L% C! A$ D$ D4 a" t  T& K* Z
  734.               *szString=0;4 G0 \  x& `" C4 N8 K
  735.             }
    " V0 Q' y7 D5 y1 c' Z
  736.           } while(iEOF!=EOF);1 v# a: v2 \9 T, N
  737.           fclose(fp);+ y% R1 w- P# O9 t/ `% b
  738.           unlink(".\\DownLoad\\readme.txt");- ^& W1 K4 t  s# |- l3 L) O$ x
  739.           dwStartUpSteps=3;
    ; h% H: {" I2 q- _' C. W* \$ P
  740.         }
    $ y; {1 F3 w6 G2 w1 _# f" U
  741.       }8 |  E/ z* ~; `/ E6 K& B+ n; N7 a
  742.       break;
    ; u: ?, F- R. r/ j, E9 t0 A
  743.     case 3:3 m2 C0 k& W/ ]7 b8 [/ a
  744.       if(!Dn.Connected())5 I" L( w, a! v0 f0 I: |7 p/ ]3 \
  745.       {
    , W; T# r$ I) W0 A4 c" J) x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) F' c# Q8 A! k5 @
  747.         dwTotalFiles=1;
    ' J. \6 q& {0 K/ n% k+ m
  748.         dwDownLoaded=0;
    ' `$ A$ N3 l# O. J! I% h( K
  749.         bSilentStep=TRUE;
    " l) z# _5 \8 {2 c$ i
  750.         bCompressed=FALSE;. C! L# t, U6 q5 ?3 S
  751.         strExtLocal.Empty();
    6 f8 ]; O1 @5 W- m, S: ?
  752.         strFullName="checkversion.txt";
    9 Z2 b$ f  _1 Y: }) p
  753.         dwProgramState=AP_CONNECT;# H: A/ v2 s1 }: ^
  754.       }% c# L, e" O5 n3 P
  755.       dwStartUpSteps=4;
    6 ]; R& R' I$ [7 `
  756.       break;
    / Y+ S8 ~$ W! E
  757.     case 4:
    3 l; p) Q6 c0 F
  758.       {1 Z- R5 n  O4 p  \; Q
  759.         FILE *fp;8 Z0 R: w. U4 H' x2 J5 t
  760.         char szString1[128];
    6 I3 ^$ D1 U, @  B0 c) o1 F
  761.         char szString2[128];" T& t% s1 P+ d) k: p4 E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 }5 l4 }/ o( e& s+ X; d2 S3 _
  763.         if(fp)/ M% }. d; n; _2 p4 C* c
  764.         {. w% k2 x" c9 `% C! k! i- j
  765.           fscanf(fp,"%s",szString1);
    0 d$ L4 E0 C: P9 ~4 U
  766.           fclose(fp);
    . ]$ a) c) G" [- W( c+ `
  767.           fCheckVersion=atof(szString1);1 k8 ~2 @' ~& |1 L+ ]$ A
  768.           fp=fopen(".\\checkversion.dat","r");6 w# v/ u& X2 Y4 u0 e) A& i, A' l$ Z
  769.           if(fp)
    " Z- h" A: P" Y
  770.           {
    , o6 o4 x9 p, v! {9 A9 G  d
  771.             fscanf(fp,"%s",szString2);! u; S) W& j& ~, z* V
  772.             fclose(fp);
    3 i2 Q* w$ o$ q- E$ s, L( d9 Z) ~. a
  773.             if(atof(szString1)!=atof(szString2))
    ; n- g7 V4 }  K: [6 F- W
  774.             {8 ]% D/ P! b( M: d3 X5 @# C: D
  775.               if(!Dn.Connected())
    6 I% G" B+ S( M# n7 H; N
  776.               {2 \  J5 c5 d; K7 P; c( d: ?
  777.                 bFirstUpdate=TRUE;' r. m% T! F* Q) y4 s
  778.                 dwTotalFiles=1;& y7 j# l. k+ y+ ^8 `
  779.                 dwDownLoaded=0;
    9 g$ D; a, v( `+ `# ]6 e
  780.                 bSilentStep=FALSE;
    * K* w9 j  `" _
  781.                 bCompressed=TRUE;8 p' w6 E, Z( v
  782.                 strExtLocal=".\\DownLoad\";
    / c+ f( e  [2 h# ]
  783.                 strFullName="update.txt";3 C( U. t  x4 Z4 w: [- m0 z
  784.                 dwProgramState=AP_CONNECT;' y0 C8 {; L0 D+ n$ L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + R% p. ?: A) O# V/ E& T# c1 ?; U; L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 Z9 }) z9 W8 u( c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ @& T* _* F. |0 Q& C
  788. + h, k! K$ X5 O6 I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! _" G; c+ N: v% t: h+ p! A
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 X) n$ d3 v! R, J6 }7 I/ t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 e- B0 ?8 f1 d3 Q" h
  792.                 {; L2 O* i1 X# i& n+ d* `: o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ) Q. ^% T* P" `6 d8 L8 R, v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. B$ a9 A' B2 U3 @2 h( ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % d3 `4 K$ k  @4 W8 q( w% P% o" Z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- x( S7 K1 Y7 }. u' J* C- A- ~

  797. " n4 v* i) R1 ?8 p* Z" `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 F* Y8 J9 O* h. Z2 A
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 k$ ~& K4 o/ \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");2 v! |) G* `: {; Z0 q- m; R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) J' G1 {! [" R9 X
  802.                 }, a$ _1 P7 _% P* _3 ^3 d$ ^% t
  803.                 dwStartUpSteps=5;5 Z5 F' i+ \& D- g4 Q/ r
  804.               }
    2 D& p3 ?  a9 x+ W; m
  805.             }' Q& s. `+ q( d+ Q
  806.             else
    9 s& F8 _7 @0 H& K) Z6 H
  807.             {
    * n9 s7 U: d3 s
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " G2 d! \2 r6 K5 {# y) R1 y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 g" L3 h  X7 R  b; }0 ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 y8 u% c3 G4 r" Q7 C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% W  h" p0 H. d& E4 x

  812. 6 V* l8 o+ y1 m, t3 t9 A! x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 \$ h' f" h$ B" ?& {% {5 f. [
  814.               dwStartUpSteps=99;
      s3 J4 w; X/ @0 J
  815.               bFinishUpdated=TRUE;
    ; o2 u0 m6 e! v7 r
  816.               bCanUpdate=TRUE;% ]2 ]8 k+ P) Q* c9 W+ |/ Q  W
  817.             }6 q$ I* T5 e' P( h. H; `
  818.           }! H2 H- Y+ t9 B7 d
  819.           else
    % n, y9 |$ d/ e8 y4 S
  820.           {' A( h# p" h& r. Y1 y
  821.             if(!Dn.Connected())' f) x! j$ C5 l4 P/ \
  822.             {
    % u+ K! @2 d$ N) `
  823.               bFirstUpdate=TRUE;
    9 l9 e) s+ p9 z0 N( v+ _6 v
  824.               dwTotalFiles=1;1 M3 _2 Y) k% \5 R) N0 o. Q
  825.               dwDownLoaded=0;
    ( _1 V8 P, h6 i
  826.               bSilentStep=FALSE;) E0 K3 A2 J" H' ?* ?0 a! g
  827.               bCompressed=TRUE;
    & {! I9 _, c3 e7 m5 B$ ^
  828.               strExtLocal=".\\DownLoad\";
    + W/ n. ^$ S* l- N7 a, Q* N6 t
  829.               strFullName="update.txt";
    % t) Y2 N! h" O4 ~% g
  830.               dwProgramState=AP_CONNECT;* B9 f  [& L' S" J0 ~# j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 t& |3 T4 J" W! ]- C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' Y2 B7 q: e" }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) ]# _% A4 x3 b% Z8 `9 M% [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 C' n, k. [3 s
  835.               unlink(".\\DownLoad\\checkversion.txt");4 z8 f) `( W0 w) Y/ n% F8 O
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), F4 O, V3 M4 p% j; W
  837.               {
    % g6 S* h7 w0 S1 x" ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! d8 s4 j$ B" Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ e7 i: m& T" W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ R) Z: j$ c2 \( h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! E4 b6 e  h. M# ]8 [/ P) e
  842.                
    * K) H9 d4 L' X2 u$ X1 `  ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 Q' [* B7 R3 ^& r$ }: X$ {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 c' f* S: U1 }) s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    , b  u" E' N( h1 x( ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / f+ R3 h/ g; O4 o  V1 A4 }
  847.               }( X. c9 G( ?$ m- B1 o
  848.               dwStartUpSteps=5;' r( F* a5 k6 u* k/ W" N
  849.             }
    ' @% ?3 b. m5 R/ f, E' I% U* Q* |
  850.           }
    9 s2 I. r) `; s
  851.         }4 ]+ n6 h' ~" ~) |. {
  852.         else
    / j0 `: m( M: V7 _" t5 U0 p
  853.         {
    + c6 \. i0 f9 z9 \  O/ ?( Q
  854.           dwStartUpSteps=3;8 L" U/ v+ B0 m: I+ ]
  855.         }
    9 f! {' N* {7 v, R2 W% _
  856.       }
      ^: r$ v# }$ O# t4 f
  857.       break;
    7 A5 D0 [* M+ _7 [% E- X1 E% y
  858.     case 5:
    ) W7 X6 \. H* W) p1 S5 p" _
  859.       {, p) K8 ]( x9 u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ u; {% U# T4 A4 y3 m
  861.         {6 [5 P3 c* [  \
  862.           int opt_overwrite=1;0 _+ Y1 b% p, h
  863.           int opt_do_extract_withoutpath=0;
    * k% N" P- U4 e0 w
  864.           unzFile uf=NULL;
    5 }' _( f, e$ T, Q" `+ B. l
  865.   I- e; E3 w& \8 x8 C
  866.           uf=unzOpen("Wsa.zip");
    3 s/ t( C" j9 P6 E3 H
  867.           if(uf)  g  ^6 Q, M, x9 r& N
  868.           {
    " W$ z& D" Q! s  M* x9 o; S
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + x! n. n9 l# \; u7 i
  870.             unzClose(uf);
    ' @+ s: p. `  M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ ]  o6 T; Z- Y! M/ i5 Y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) `- g3 ?: {" Y( N3 T! k$ ]9 i% W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( A9 P' r, S7 ]9 {- k
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 o* T- l8 b9 i" [: p
  875.           }- y9 Z/ D; R& O3 l# P% [* A% U. x: ]
  876.           DeleteFile("Wsa.zip" );8 r' ~4 _6 E( }9 e( L
  877.         }
    6 ]: K5 ~- H" U( O4 ~4 u
  878. " u8 _8 U* L2 U% L
  879.         if(CheckLocalVersion())
    3 \  B( h. m! Y- A
  880.         {4 Z3 C; p, W6 ^% ^
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");: T% J$ A1 [2 E4 G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    7 y8 r+ p+ k" C% i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. V" u3 W, M5 |; `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + u5 H: a% j* n& I- q# f' z0 t
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 G) P& d. T% k2 E. K0 w
  886.           dwStartUpSteps=99;
    ( g0 v( _* V3 p; Z0 M) ~
  887.         }
    ' `# L5 k/ i7 d/ {- j) H
  888.         else; c: J  f1 Y2 q/ M
  889.         {
    , ?2 o$ B' ?* n6 E; \, b( `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) Q' y+ Y8 L9 f) [# e  |$ b1 X  F
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( [5 A- M5 O0 s4 e0 M, a2 ^
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");7 |- V9 \+ R% V0 |$ s. F

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

評分

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