CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
/ F3 h( \3 x' O4 ?5 R( g
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; L1 I* Y0 Y7 m- V/ c
  2. //$ m! p4 f: a/ i. @/ T

  3. $ _: Z9 R* K' a, t: {4 T
  4. #include "stdafx.h"2 V3 O- f! p/ T( ]
  5. 7 H9 w7 P1 m# i
  6. //#define UNICODE
    . \/ C8 m! @, m+ K) N! U  k) h2 Q' y
  7. //#include <gdiplus.h>6 p7 g1 y' f! ]3 f. D
  8. //using namespace Gdiplus;
    $ f! g7 s7 r; ]4 t* E3 f
  9. + p: R! ?. `( c9 {( a& H
  10. #include "RevApp.h": @7 j; j" k. B4 z1 D8 C6 N
  11. #include "RevAppDlg.h"8 X; k4 k( G! ~* m2 [
  12. & N# M/ E0 \4 ]: t! l) L
  13. #pragma warning(disable:4786)
    4 L3 y: _# e, P2 u$ ?& m! p
  14. #include <map>6 t8 z9 x6 F6 C$ U8 y& N- [8 U
  15. #include <list>2 Y3 R0 H) Y6 W& d" f
  16. #include <direct.h>$ f6 K" n  B' K. N* y) X$ q6 N3 L

  17. 7 b* f! P" m' T1 p. O% o; ]. r* ]
  18. #ifdef _DEBUG3 d. @& T# g- S! |1 R
  19. #define new DEBUG_NEW
    3 `; h) \  l8 o& y7 q* K3 Z
  20. #undef THIS_FILE6 r. r) T3 s1 A8 C6 |+ l
  21. static char THIS_FILE[] = __FILE__;$ K* }, |: a! \2 l
  22. #endif
    ' b6 K5 {/ U. s) s1 n0 j/ m; ]( a
  23. #include "SkinResDef.h"  k0 f+ w+ R3 t' g) T, T8 Q; [
  24. #include "ChangeBG.h"* P& O, |' n% V6 [8 k
  25. #include "AFXINET.H"
    * U+ \' ]4 v. S+ k. E; d( \

  26. ' w9 ?$ T  v6 M5 C' t* |
  27. #define TRADITIONAL_CHINESE 00 f% a- x, F0 e, r( H, Z& m/ H
  28. #define SIMPLIFY_CHINESE 12 c( C. g; k+ h. o
  29. #define ENGLISH 2
    % H. H/ G7 c$ _6 e
  30. int m_iLanguage = ENGLISH;& ~) a7 w& P3 l, N2 o, B* ^& q
  31. /////////////////////////////////////////////////////////////////////////////4 V; t! r1 U9 l2 {, g- E* J
  32. // CRevAppApp6 x6 v, K. ]) O5 n( s5 Z

  33. 9 k$ p( E' i0 D+ [5 a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp). p# u/ U6 H( T9 C9 D/ G
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ M( ]5 L7 Z6 a  T( z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 G! u7 d5 e3 z2 f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, S7 A, k; {9 _- F
  38.         //}}AFX_MSG/ l* c4 x% ^6 x* O! I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 r; Z' _- e, ?$ }# L. {
  40. END_MESSAGE_MAP()/ ?3 G# y5 M; H. ]" F; e

  41. ) K, a7 H, ]* U% }+ n6 C  z6 p
  42. /////////////////////////////////////////////////////////////////////////////9 h( ?9 s& F2 A0 i9 v1 K
  43. // CRevAppApp construction, \: _  W2 Z  T  Y2 d" j

  44. # |& X, x& k1 j, Y" |9 x0 U
  45. CRevAppApp::CRevAppApp()7 M/ \2 [3 @1 y: n* |. }
  46. {
    # D! N6 d2 L1 C  I( Y
  47.         // TODO: add construction code here,
    6 z4 e0 O2 N# T
  48.         // Place all significant initialization in InitInstance. q$ S. V1 d  V
  49.   bDisplayIsBig5=FALSE;
    . {2 z! O' Z, a6 @; D
  50.   bRestartUpdater=FALSE;! x2 j- h8 `2 t: H  S
  51.   bFinishUpdated=FALSE;" g6 I5 k+ W0 |0 e1 G- G5 A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 v) _9 Q1 Q! c8 X5 Y
  53.   InitChangeDataBig52GBKS();
    * T3 g6 t$ V+ Z! E/ E
  54.   InitChangeDataGBKS2Big5();
    2 y( Z; `# [9 ~0 @' L; S- D" r5 ?8 O8 s& F
  55.         //% v' d* u' p3 I/ q' {
  56.         bClickRunExe = FALSE;
    : g5 f1 v) W/ w. P, @
  57.         //  D, v; h  e- |" P7 @5 \
  58. }
    $ R; f& E) T. ^/ m3 N7 N# w  S
  59. - ]) x$ z, R+ t9 ^: v& i: T' i1 w
  60. CRevAppApp::~CRevAppApp(): p0 Q- m/ X( a
  61. {
    : w" w2 D4 L# T, `0 A" S
  62.         // TODO: add construction code here,3 B; @3 j: ~* _* g$ c. r4 v
  63.         // Place all significant initialization in InitInstance1 t# B$ r+ G: Q- G0 ]$ E* q
  64.   EndChangeData();+ a/ L0 z3 n1 Z$ U5 L$ l5 p. {
  65. }9 x) r+ s& y) j
  66. ) W0 Q; y/ L; {2 y; w
  67. /////////////////////////////////////////////////////////////////////////////
    / Y$ }6 f8 d' W5 l& p& B" @
  68. // The one and only CRevAppApp object9 C7 x) U) B  w4 P4 Y- ^: e

  69. 0 x, W" R5 J+ M4 P
  70. CRevAppApp theApp;
    $ g0 ^# d3 y& q' D4 F. M5 H

  71. / o1 r7 w* l2 w6 R1 I  }+ B* [
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , `- z3 I3 x+ W
  73. {
    2 f: s3 }, Y; J& X9 p3 }' m
  74.   int iEOF=0;
    7 S& W# B- ]) @, v  w& g8 W2 u+ {
  75.   char szTempName[MAX_PATH];! }5 h* [" \$ y; A' k
  76.   *szFileName=0;+ a& t) `4 Q+ k- R: @1 L) ~* U
  77.   iEOF=fscanf(fp,"%s",szTempName);6 x0 ^( ?, i: U- _2 Z) ^3 }7 |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ k! V* Y$ o) R
  79.   {
    : C0 g& @- @4 D* c
  80.     strcpy(szFileName,&szTempName[1]);/ S3 L0 s6 a8 P0 `  I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 l% w* X) n% k' V" M# u9 p, C: K
  82.     {4 ]8 L, f! N; r3 b
  83.       iEOF=fscanf(fp,"%s",szTempName);- I: e' ?- Z- I6 V) F% A2 V5 `8 R4 ?
  84.       strcat(szFileName," ");
    % E4 q) j( J/ v5 \- F0 X+ E
  85.       strcat(szFileName,szTempName);% Z. ]- F" A3 Q$ o# ^3 ^' B  V5 A
  86.     }
    # c. ?) o$ G+ H7 A
  87.     if(strlen(szFileName)>=1)
    : Y  s' s; O: Y0 U$ }( j) M
  88.     {, x, m; a: i! ?) i+ U
  89.       szFileName[strlen(szFileName)-1]=0;- q' _- |: k/ r1 n. \8 u  Q% W+ ?7 p
  90.     }+ e# ]2 k/ R5 J: O6 H
  91.   }) \8 G& k, M3 X  G$ W2 c
  92.   return szFileName;
    ; S6 ^, O7 L) _8 ?* S: G
  93. }
    6 E$ L2 _# M8 |

  94. 4 P) b% s: c. j. E4 S9 q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + U- X% s6 q' t# l
  96. {: r: j0 ]2 |' g9 q; f
  97.   FILE *fp;
    + _: |; C. j8 u* d
  98.   char *key=NULL;+ @9 B$ C5 _- Q. n; O
  99.   char version[MAX_PATH];
    ! r. {$ V1 }3 I, |
  100.   LPUPDATEFILE file,olds;
    & K/ z5 x6 h0 @! M/ Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , m, ]' z6 p/ S. ?) S

  102. 8 i; M5 ~6 r- m" b+ Y& W7 I2 u
  103.   UpdateList.clear();' P4 s& P; u: l; n
  104.   UpdateFile.clear();
    5 E8 ^* m4 I  [
  105.   if(GetFileAttributes(filename)==-1) return false;
    % t* U0 I$ w" _9 W
  106.   if(!(fp=fopen(filename,"r"))) return false;( I( a8 o; r- ^2 R
  107.   fscanf(fp,"%s",version);1 x" k# T. C/ j; n" p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 }8 J6 I, n) m8 h/ \
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( e" l7 G  E, M2 U9 T4 r
  110.   {
    & t/ b+ Y  j4 b0 Z! L# C
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, J1 J) z1 {, O
  112.     fscanf(fp,"%s",file->path);
    / s5 B& ~' l( N  y- O$ G- u
  113.     ReadFileNames(fp,file->file);
    , u' b. [9 ?% z6 p9 m3 o
  114.     strcpy(file->full,".");
    * d; G, a* I, u' a3 x
  115.     strcat(file->full,file->path);. D, t" ^, }# F; P/ A
  116.     strcat(file->full,file->file);4 J5 o, }% L+ O! y: Q$ p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). t/ [! ?8 s. p' M% V1 H6 b5 W
  118.     {! R5 H1 R( M& ^! V1 z5 R' y
  119.       file->vers=(float)atof(version);; J" c# w! ?% m, m' j: ]* R2 y2 |8 ?
  120.       UpdateList.push_back(file->full);$ o' Z& A) p( n- U/ C$ A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 P' T+ m' u: d1 l9 Q
  122.     }6 s! u1 f! S, j+ y; B
  123.     else
    5 g+ M) T+ |* c9 M% [! h
  124.     {" T3 ?3 m4 b5 A2 A. Y
  125.       olds=(*p).second;: K- J, s' z2 Z2 E
  126.       if(olds->vers<(float)atof(version))5 w$ W. u+ N* f1 R" H9 y# S* y: |% B! W
  127.       {% L; N: A  h6 f& r( n+ z
  128.         olds->vers=(float)atof(version);
    - Q; \& a7 y1 U8 j/ E  \3 x! ~: x+ K
  129.       }% F0 P" ~+ `! O& B. k
  130.       free(file);
    / m& K: ?8 t3 s, a- e
  131.     }0 \6 X% U* D* S1 r9 X! |
  132.   }% I7 ]4 p; m- h) L; }
  133.   fclose(fp);  G5 k, P: ?' [5 h- ]! Z9 D, N
  134.   return true;
    0 r( h) w% [4 e/ U6 c  A
  135. }" j4 o) i: Q! q8 Y' ~0 e  @
  136. # o4 t" j9 M* q5 g7 S: y* Q8 U5 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & t; X7 w% J/ n+ [: u; N" p
  138. {+ O# }% b+ T+ i3 `. E4 p! `
  139.   TCHAR  szFull[MAX_PATH];6 ^5 t9 H: K/ n! Y" u. ~" D
  140.   TCHAR *token,*inter;
    5 `0 k# V1 f; Z
  141.   *szPath=0;
    4 G0 U9 G* v: D9 \
  142.   strcpy(szFull,szFullPath);. h" K; h3 s/ j2 Y
  143.   token=strtok(szFull,"\\/");& U+ W- e8 v/ R0 ?7 [: Z9 l
  144.   inter=token;
    / a) s7 |- z6 a- b! D' r. S+ V% I6 F4 c
  145.   while(token=strtok(NULL,"\\/"))
    5 l+ z0 _* W8 j5 H5 H0 y! g5 X. M6 e
  146.   {
    3 T4 n' t; y( Y1 o9 F
  147.     strcat(szPath,inter);
    . \3 W0 m: Q1 \' `% H$ t" i6 W# m( Y& B
  148.     strcat(szPath,"\");
    1 Y, E. J- u) Y. z: n6 _
  149.     inter=token;% n+ u/ ]. x5 t7 b. x) O! c
  150.   }
    ( Y3 A9 V4 a0 }  \0 \; u" \
  151.   return strlen(szPath);
    8 d/ ~3 ?! I0 L4 ?
  152. }( z( ^+ d+ g. K. \1 h  }

  153. 9 z5 A+ U7 \) T3 ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    5 u+ {$ p) }& z4 P3 f: m- C6 V
  155. {* k# k4 l# c4 J, M' F# d" r
  156.   DWORD attrib=GetFileAttributes(Target);/ W; ~5 Q9 V- V
  157.   if(attrib!=-1)
    - f3 v) F6 ^; Z
  158.   {  b1 L4 p7 S9 d4 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( A( q, ~/ t- S  f# u% X
  160.     {: k% ^* u9 o# @3 D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 N/ C& m/ U& l7 g! H6 c2 M6 v
  162.       SetFileAttributes(Target,attrib);. m) Z# H9 C  s; o2 \7 W2 R* g8 k
  163.     }
    0 h3 t( z4 x) Y/ H
  164.   }6 T  {4 B. e  g! B6 s
  165.   CopyFile(Source,Target,Erase);+ I9 I# |2 t$ T+ f; [6 ?
  166. }
    3 H0 G- N# N. h% o0 h4 _' M

  167. ( o) J* `" O; X6 O4 i; ^6 g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  k) [" Q* S* g0 R' F$ b8 k
  169. {
    ( M/ h4 L; F) z5 p, U
  170.      FILE *fp;4 S) h6 t1 Q0 }5 }) {
  171.      char  szBuffer[8192];
    0 u* Q" T; X$ u
  172.   va_list  argptr;7 V, a0 ^' w, k& A+ P- H3 V

  173. - S; \  D( R/ j0 Z  [
  174.         va_start(argptr,message);
    ( J( M" H2 Y8 w- k! j- T9 [( ?
  175.         vsprintf(szBuffer,message,argptr);
    7 x( V; S: B7 I8 v: ?" `( C
  176.         va_end(argptr);, ^$ G/ [1 O: e/ ]& U, \8 D5 D% k
  177.   fp=fopen(FileName,"a");
    2 u# ?" j  F2 n% S' E5 s
  178.   if(fp)
    * y. y; X7 ~" j, @8 P
  179.   {
    . N* l7 O$ d; L: j/ x+ E
  180.     fprintf(fp,szBuffer);' w  L2 Q6 g) V/ e: S
  181.     fclose(fp);3 N; D; |% b% A/ Z8 q& r& F
  182.           _flushall();
    : N  O8 V" n. [1 j
  183.   }
    / ^+ k8 Y2 q( n
  184. }
    5 n3 m) s( S; I

  185. 3 ~. A2 q. m6 u: B$ O# p( ]! n
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' ?) \1 l7 p8 V$ t  h2 P* Y/ Q
  187. {
    : l9 _0 K2 [, Z3 r+ L& N
  188.      FILE *fp;0 g! l4 w: D. r( r& C! u4 O; L
  189.     DWORD  attrib;
    + H7 F+ g/ H. k% m
  190.   attrib=GetFileAttributes(FileName);
    + ?  ~( F7 U: o& U, w# Y- K3 w- g
  191.   if(attrib!=-1)8 K$ O& O" a9 {# X2 n: ~0 W  i
  192.   {- L6 y: h3 r7 O; Y' x; a% o/ u
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! q; L$ P* v3 A6 v6 A, \* _
  194.     if(!SetFileAttributes(FileName,attrib)), L5 T7 q( V( x  U3 W, E+ J! G
  195.     {
    9 p" g5 D- }8 I1 |  X3 O$ I7 b
  196.       return FALSE;
    ! |' v$ m! W" _: A
  197.     }9 n/ Y3 R6 L/ `! c3 Q; Y; c. }' H- }
  198.   }
    - W( n+ R0 Q5 U, i8 F  q
  199.   fp=fopen(FileName,"wb");: G; Z, ]0 f  z% N6 \
  200.   if(fp)
    ( S2 c3 z: ^# X/ L7 |5 u# ~
  201.   {! X' [& X! H& z* f. o' {7 h
  202.     fclose(fp);
    3 A) h% H' a5 L$ T
  203.   }
    1 Q6 o0 `0 R% x+ n
  204.   return TRUE;- G/ D1 J; q6 ]1 k8 t2 j! _7 ^
  205. }
    7 F4 C2 \$ V: |4 ]% F

  206. 1 s9 I/ L: J. f+ ~" u9 @  j1 g; E% I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' i9 v7 i& Y$ J5 [' E, s  _  l
  208. {$ l3 A/ g  }5 ~" n5 V' f+ z
  209.   char filename[MAX_PATH];; L" P4 i8 j: a; w
  210.   LPUPDATEFILE file,olds;
    & U( i; L  }5 o6 i: W/ E4 X" w+ u! p
  211.   std::map<int,CString>::iterator i;0 ?2 w! p9 W) F$ i" ~; R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 [  Y5 Y. `# i+ g5 T# p
  213.   std::list<CString>::iterator l;
    ! i6 }) U& D" g- Y9 c

  214. / E2 e: }+ g% Z+ y1 }
  215.   if(bFirstUpdate)
    # P- k+ q5 ^: A
  216.   {; _" `7 R. E% v- c* X# @
  217.     dwCurrFile=0;1 k9 A! G7 M1 ~" G
  218.     bFirstUpdate=FALSE;9 D" ~! b& f$ X, I! g5 r3 w" m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : o: n# ~9 z% ^
  220.     {2 O* c# D3 g$ [& M9 m1 G/ r5 h* q
  221.       dwTotalFiles=UpdateLocal.size();9 }2 M4 }  T) [7 J3 G( s' L
  222.       dwDownLoaded=0;
    2 w/ a: N6 h6 U! c; E8 B
  223.       bSilentStep=FALSE;
    4 R: B! r. `8 O
  224.       bCompressed=TRUE;
    ) Z1 T& F& M* u0 n& d
  225.       strExtLocal.Empty();
    ! X/ L7 l1 V/ j1 l0 M" }4 W
  226.       strFullName=(*i).second;
    9 i5 v6 o1 S) s2 `6 h
  227.       dwProgramState=AP_CONNECT;
    0 R7 H/ v) d6 h$ c  X) P
  228.       return TRUE;
    & g4 P2 S" P' e( f+ n
  229.     }
      k1 F9 A8 s- S
  230.   }2 ?6 ^4 m; @# R* X( {7 r8 S5 B; n
  231.   else if(bRestartUpdater==FALSE)
    " O# ?- i2 Y: ?# y5 A
  232.   {
    * \, c: u/ V/ t0 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 s4 B/ I9 K3 u9 X- _5 F
  234.     {
    % s; G$ k- G, r! l$ Z5 X0 s5 x
  235.       file=(*p).second;
    # `7 g/ [0 q1 y% y5 c+ z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 u, e( L! Z! w) `) i8 K5 z
  237.       {$ A8 E' }" e" {1 g
  238.         olds=(*p).second;
    9 b1 k5 p; X. s  ?) c
  239.         olds->vers=file->vers;
    8 r% a, _6 W: f/ E
  240.       }  t5 \- w1 W' w
  241.       else
    1 f* |8 e" x: v6 e7 R9 V; [
  242.       {0 U+ n; b/ \2 J' I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 y- o# n- P7 \2 n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( ~! I! N' k, ?3 \0 `  |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- S; U0 y" ^2 D, s) k# b
  246.       }% t' u) s2 t, D& I* i- r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 [* [( m4 T7 G0 _) b
  248.       sprintf(filename,"(%s)",file->file);0 i1 i4 F7 Q1 ?4 S! [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 W- Q6 k2 z8 f2 y5 l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 H( r- g2 H* {! A" [1 E
  251.     }. l( M% [7 e" C2 E
  252.     dwCurrFile++;
    " h0 u* v- R5 X  G- V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% G2 W7 X: ?6 n  L5 u
  254.     {
    5 h5 d# h8 b' W7 f# c- Q
  255.       bSilentStep=FALSE;. z4 v9 F( R" ^! ~5 }% I
  256.       bCompressed=TRUE;4 h: k- h* @# ^4 e  M' d9 v
  257.       strExtLocal.Empty();* ]* m3 J+ g1 b$ q+ V, F
  258.       strFullName=(*i).second;
    0 O- B8 V7 _  R/ S
  259.       dwProgramState=AP_CONNECT;. @  C$ R6 G, m
  260.       return TRUE;6 M2 t3 R' e- x! z" ~
  261.     }
    ( Z' g0 ^  E5 Z# C5 C
  262.     if(!bRestartUpdater)
    , j5 n4 v2 H5 [0 y3 z+ V; r  P0 b
  263.     {
    1 ^$ h) j: D& S1 ]
  264.       int iCurrSize,iFileSize;2 a! \  _: |+ t- c8 [2 _/ S
  265.       iCurrSize=0;) m" \' j* f" [8 r# B$ ?
  266.       iFileSize=UpdateList2.size();
    ( n( J3 o: y6 V" d; A, x' `& H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      T" [0 {9 x; \' k1 ^; ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& L# C; I5 y( Q! y. y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & m& {8 `/ G6 Q1 s0 v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ i5 i5 `5 V, G* q9 m  C1 X( k. d
  271.       Fclearf(".\\update.dat");& t. A0 Z  N! L
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 r( t# L! h2 E/ z+ @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# @. c& \! [! A% C3 q5 _+ \6 S9 }
  274.       {
    # a1 `" S5 f7 g
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ T( V% W8 k6 o! Y, Q2 f
  276.         {
    ; _% x, p% u. A: V. b8 ?! R
  277.           file=(*p).second;" h4 Z) k4 P0 m* q) J2 Z4 y
  278.           sprintf(filename,"(%s)",file->file);
    / n1 G, \' V" s/ P" t/ [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 U+ I4 {& Q9 w' z- N/ S: ^
  280.           iCurrSize++;
    % Z* _; b- W! B2 c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % D/ c3 U' n$ J; a" d: k" k  C
  282.         }
    8 ]: E' q8 w+ a+ Q
  283.       }
    / M6 Y! n# U6 \7 v' d
  284.       unlink(".\\update.txt");
    * r' @% l# e, O; G8 F
  285.       unlink(".\\update.tmp");) q2 O% n: R+ X$ K9 T# y% s  \' a: s
  286.       Fclearf(".\\checkversion.dat");) p6 G, m: B  V) ~" V5 [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' Y2 t) Y" X% G
  288.       if(UpdateLocal.size())6 \; `$ k3 V9 L0 s; I, W
  289.       {
    & c# G% w) A( d# \9 F5 X( `0 S, v; @
  290.         UpdateLocal.clear();
    . b" {# ?1 j0 k  Y
  291.       }* a% H) ?% L9 V( z% }
  292.       if(UpdateFile3.size())' Z) R7 V' m9 t* K7 {2 Z8 J
  293.       {
    + `. S- B1 ?1 Y  w, J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % a* M4 @$ a9 _, x
  295.         {
    : M- ~4 W% z3 }/ t0 N, A
  296.           file=(*p).second;2 B9 G' u: s! f0 |, ~* D5 S
  297.           free(file);  c& f% J- s% b1 \
  298.         }
    % S" U) U  W2 r3 g' P2 n3 a4 T
  299.         UpdateFile3.clear();- t! t1 G8 _# o6 v, l& V7 G/ V' @
  300.         UpdateList3.clear();2 {& Y8 o# A; q8 p7 G
  301.       }. s5 j9 f9 `5 E# N
  302.       if(UpdateFile2.size())
    - \' }( j- `+ Z6 ]. V. O, g6 _
  303.       {( c) d+ A  G& I! K! P% B
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / _0 K4 A4 J6 l+ Y/ s' @3 I: F
  305.         {
    / f: ^& d$ M! v8 R6 G
  306.           file=(*p).second;# v2 i: F! u: m5 m( |. Q
  307.           free(file);
    2 |' U& T  Z3 G
  308.         }
    - j; P2 R; ]# N/ `
  309.         UpdateFile2.clear();1 g( L  L. o7 J  P# V
  310.         UpdateList2.clear();
    1 a7 ^9 y" O. u1 ^5 ^
  311.       }
    ( T7 i( u" x' V, ?- V( {9 w
  312.       if(UpdateFile1.size())
    . C# {" B0 ?& s* t3 y- e
  313.       {
    2 }" C" W% p! j5 V! J2 h
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). x8 z  S) q6 k( a9 \
  315.         {2 C% n# A1 h" s! a
  316.           file=(*p).second;. f! u" p3 U$ n7 {2 y7 z
  317.           free(file);
    ) g+ I- j; r9 |. ?
  318.         }! ^& j# O! \, L( W
  319.         UpdateFile1.clear();
    " u! J0 Y8 A9 l9 |
  320.         UpdateList1.clear();+ a  Q- Y5 |% z1 w( G; g
  321.       }
    # y& f8 ]) ~, Y  L) c! P7 w+ G% l- x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 P. `& {- p5 I6 I" i
  323.     }
    ) Y1 P  r" o3 U# ~' r
  324.   }
    ) M. w0 H8 P) ^( q6 T" q* b1 O
  325.   return FALSE;
    ! N$ z9 g3 Z1 \& @* h1 c
  326. }; Y7 r/ a; A2 w$ d' ?

  327. , |& ]* E  Y* t+ b8 P/ k; ?. K
  328. void CRevAppApp::ClearAll(void)* d, T" [- a8 ]$ {: D; q! m& h$ @
  329. {' I$ C# [0 A) M1 c
  330.   LPUPDATEFILE file;
    % P' @- ~7 _6 D" g
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: S9 I4 j# O$ O; S

  332. 2 D6 e& c: J: i# w. \9 W& U( T1 G
  333.   if(UpdateLocal.size())
    ! F  v: w" }1 k. h
  334.   {' K4 k9 I5 c% N9 h) }! t. N) o- [
  335.     UpdateLocal.clear();2 d) j1 U( j& c$ x# f" P3 J$ e
  336.   }* g1 y$ P7 @% n3 z
  337.   if(UpdateFile3.size())2 u2 P% n( {& G. }% B) w
  338.   {6 }3 z3 `6 ]/ z5 d' I# \
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; `' I4 S8 V0 V9 J0 M
  340.     {# @& v8 o2 k+ {1 X, Z1 j
  341.       file=(*p).second;3 M4 b* {$ ]/ W% a  g* k5 ]9 v
  342.       free(file);- W9 ?. C: a5 W: t) c7 M  t$ G
  343.     }$ B0 r8 o  r+ B8 T/ z# P
  344.     UpdateFile3.clear();
    2 z4 f" C; o9 \, {/ x0 V2 L
  345.     UpdateList3.clear();
    , @0 }7 e7 s/ H7 {
  346.   }
    $ @! z2 j' o7 I- F8 [+ K  j5 V. ^
  347.   if(UpdateFile2.size())
    ( O2 ?0 ?  \; U" F0 N' z  t2 g6 E
  348.   {5 y$ X9 h2 Q) C# p. r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); I7 p9 k! u4 [; q9 A
  350.     {
    & \; T- Q3 d0 o! t9 C, G
  351.       file=(*p).second;( f8 }6 o4 \; p" ]- U8 w3 s
  352.       free(file);5 ]$ l* ]/ A8 \
  353.     }
    6 T0 H. G: A/ P0 j
  354.     UpdateFile2.clear();
    1 V9 X2 F8 q9 |9 O5 X  f% G
  355.     UpdateList2.clear();+ U; s" T1 @8 b9 C! P: |  h$ ~$ g
  356.   }
    * o& k) o  |8 J( ^$ W7 C1 V( J
  357.   if(UpdateFile1.size())
    5 M6 q: L- O% H2 V6 a: F
  358.   {
    ) M: ?0 t! k4 I6 e6 N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ F4 k/ V1 g$ F6 R
  360.     {) m6 J5 X7 Q0 F
  361.       file=(*p).second;- `& J: e8 {0 w: Q0 w
  362.       free(file);; }6 c3 y6 E6 ^/ `1 N1 l5 q
  363.     }
    4 C+ b% z4 O4 Z+ C7 y! w# G
  364.     UpdateFile1.clear();2 Z9 n0 i, }% }
  365.     UpdateList1.clear();
    2 U. L2 c  }9 b/ |: C2 D! M" w( J9 ^
  366.   }
    : D+ ~% R- S$ I( }
  367. }  ( L$ T4 @5 u/ c
  368.   4 ~4 h$ ~9 i2 c$ s& l
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' C# p+ R6 E  P+ M
  370. {! M8 Z- {! k  L- w' D
  371.   int c;
    1 w0 M  z! O7 X0 L
  372.   LPUPDATEFILE file1,file2;
    4 E  I) f& O  F; ^+ A; G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;1 m7 Y" M" N' e; i+ z. Z$ ]0 a
  374.   std::list<CString>::iterator l;
    ) Y) Q' D; R' d# o! @

  375. " ~: \1 ~: W& P
  376.   UpdateLocal.clear();
    % i) t9 o5 C: k* }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : ^" S; ~1 }" G  _2 {9 m) i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , g) h( l$ D: I
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! m. r) M. U1 d* G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 d) U2 O8 A: m# e- T4 O6 S
  381.   if(UpdateFile3.size())
    7 d; c/ D! ^, N% P8 K
  382.   {4 a, I, O  k7 Q* T1 b# |8 J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 J, n6 ]+ V& u9 R* t$ z$ v
  384.     {
    1 e2 f& H& ^6 o+ _* u
  385.       file2=(LPUPDATEFILE)(*i).second;- a  D' X- x$ {& o& e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( ^& O# x+ U, G% Y3 {; H
  387.       {/ V! B; y, N! T" {* @
  388.         file1=(LPUPDATEFILE)(*p).second;4 f1 [" O) b5 ?% E) p
  389.         file1->vers=file2->vers;
    : K  A# ~- T* k# f
  390.       }
    0 ]" O9 S" V+ _( K  l5 |7 Y
  391.       else( K0 @2 w5 V2 Q" H" l9 V6 O
  392.       {. G: X+ P4 y% m6 \% @4 O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * q0 G* `( @4 c) M. J8 o; P( G6 C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));/ m5 r" Q# W$ V* N- p& R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( q. F) u% r1 B( q2 y3 L$ ~
  396.       }
    - U; _( P- F! s% W9 S8 j) q
  397.     }
    % \) ^5 R( P5 J$ Q
  398.   }
    9 q/ n6 C- F+ B2 C, ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  X: ?1 k# Q( Q  o2 T
  400.   {
    . S3 c5 S; c( z* M) i: H9 D) E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). U$ @9 ]9 k5 [
  402.     {% ?/ o# [( G' d& c# i+ `7 }
  403.       file2=(LPUPDATEFILE)(*i).second;) [9 e: w& A& p) a0 `3 q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; H  R3 j  I) _4 s* ^0 w
  405.       {* O1 A( @  f$ _0 N6 v% B  O
  406.         file1=(LPUPDATEFILE)(*p).second;% {  D3 O+ l3 y/ O5 s2 ^. N$ ?
  407.         if(file1->vers!=file2->vers)
    ; D7 u4 @+ m! k7 O  b; v
  408.         {' m* g8 p7 \- d  L, X( x# x5 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 R; e& j$ a( B  j4 t: D
  410.           c++;8 U+ H1 X  p- k0 f) r
  411.         }
    / Y- }' Z0 e# r# F
  412.       }* m; W( G: O9 i9 S7 D
  413.       else% y) U$ c% F" L) l0 T
  414.       {
    / K" z8 e' D9 c' c! d& U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      [5 v& e0 V% R
  416.         c++;. Q( B$ ^# B& v5 C% g
  417.       }: w6 p6 s2 f% Q3 |
  418.     }
    4 c" x+ p, l6 j* V2 ]
  419.   }: E5 z. c0 Z5 |9 K5 f: b
  420.   unlink(".\\DownLoad\\update.txt");2 Y5 a" M/ K, V- U8 U
  421.   if(UpdateLocal.size()) return TRUE;
    $ s/ M$ z6 }. k! Q
  422.   else                   return FALSE;
    * V" c- Z9 r  G5 g
  423. }8 o: p3 R7 c2 x% P. T6 z6 s- C

  424. 0 d. x4 Q" b2 p- t8 a* a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 Y. @7 E2 U3 v4 |0 \" y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ G4 e  Q& V$ o3 W# V

  427. - H9 B) z" D& e: V( a- a

  428. 5 S8 a' I$ \+ ^. k1 @
  429. 3 ~0 O' Q, ^% P" n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / K9 f' c. T; o6 z) t- j  g
  431. {/ ?" U5 \2 ?: c5 X& \1 ?2 Q* c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 i; w+ `% K9 o  ]( p5 @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % X# f, E: y/ Y/ s: L0 j
  434.   {
    " K) l% T+ Q3 l  c4 ]/ n
  435.     char szLanguage[50];
    0 y( D9 K0 O. K$ E4 m! A- A0 T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / I' D5 x+ l% B2 e% a5 J9 G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* Y0 B5 b! ?( ~0 I+ k# A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- g# V( S1 k1 F8 n$ \- Y
  439.     else                                   m_iLanguage=ENGLISH;
    # \9 y" K$ h8 b& ^" |3 O' n  j
  440.     char szRegister[100];
    5 g# E" d% Q2 L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 Q" T1 F: d$ B- b5 D) o6 D
  442.     strRegsName=szRegister;  @. c) f5 I, G; ?
  443.     char szPatchURL[100];
    ' r0 F* ]! U2 F: V3 c/ z2 E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! ~" p) B3 \+ E. h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" l3 B3 m# O( q+ H/ u$ k- H0 `
  446.   }" `8 o5 T3 E* q0 @3 O% D5 o, a; ^
  447.   else+ @. n) Q# |+ M/ r! |
  448.   {% Y2 x- O2 F4 r: ~& f0 j! c  [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 `" l1 M; |5 V3 z) P6 Y
  450.     strRegsName=DEFAULT_REG_URL;6 {" y4 ]- `2 Y
  451.   }
    0 _0 ?% S: T$ W' C4 ]. b" a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % H5 o0 b( d' ~5 a! K1 F
  453.   {
    - t6 G, N/ A" y. |; U) u* S, D
  454.     char szIP[50];
    ! t1 D- b+ u4 J" H8 h
  455.     char szDIR[300];6 C5 {: m. q) I) S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" |3 |$ h5 l. P- v- H
  457.     {3 P# q. x/ f2 h$ D' R1 z( o: Q3 P
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      c; d! e' f# e3 t) i1 Y/ k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 n7 H. p/ b/ ]9 R
  460.       strHostName=szIP;; v9 s( y# j  ^
  461.       strHostPath.Format("/%s",szDIR);( a  M( {: f: [3 v
  462.     }
    " h' `4 m6 u3 K- a
  463.     else
    2 W- }, i! g+ S! q4 J) @
  464.     {
    . }* Z) ^/ d# n+ M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ a" q* {. r6 Y) r6 Z! B
  466.       {: R9 w4 B5 K4 _
  467.         char szLanguage[50];$ Y* e3 h1 L& e5 E8 }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 B% _5 }$ \. {, T( o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 K& _9 s$ [& \* Z: j5 e' M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 R; Q' T* }" [- I
  471.         else                                   m_iLanguage=ENGLISH;
      @% ~1 B# u$ K; R) l& H0 O# H# J
  472.         char szRegister[100];+ Z% Y2 h7 b# O; S' A) L- f  \1 k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 F. q' U7 l3 ^: D+ A
  474.         strRegsName=szRegister;" E' L6 U. d: R0 g9 u& C: t
  475.         char szPatchURL[100];
    8 `( h3 g. s8 @6 c  P0 m. q: U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , F- H1 m* d! }" t( U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + L& `3 C- C9 ~; T
  478.       }4 K- x* |5 o" u6 g$ _
  479.       else+ y5 g5 Q! t8 e/ ~- V8 s
  480.       {0 I& Y# J: R5 T4 m/ ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + d% D; b% s6 z( O% S
  482.         strRegsName=DEFAULT_REG_URL;0 a  @% u6 A3 f6 b( K& s2 y
  483.       }- o2 P( W! \" c& E6 u) z
  484.     }
    ( G+ v& s$ i3 o7 F( a- X$ u3 l5 _
  485.   }
    " K: Z% g1 f- E8 [# k
  486.   return true;' Q" G; y) A- ^0 X, z
  487. }6 ]2 x0 i& Y' ]; c# X: A
  488. " H' f6 }& X; N& ^/ |
  489. #include ".\ZLib\unzip.h"1 m% S- @* i. X  M3 _, x+ I% o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  z3 n! Q5 t3 M' m
  491. /////////////////////////////////////////////////////////////////////////////- K9 W1 ]% p$ Q6 g1 ]4 [5 w
  492. // CRevAppApp initialization3 t3 D8 [$ d1 E5 X+ a

  493. ( ~! [; @/ H8 x' y4 R4 q+ z3 P
  494. BOOL CRevAppApp::InitInstance()
    1 X- N2 h$ O/ |; m
  495. {
    : p' |& Y/ c) y1 L1 C2 K* N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + s# v( ]; P$ Z) X+ H" {% |- U

  497. 6 Q& V. f- F1 `& x, Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    . H. }8 W& R. b4 L/ a9 O8 u
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % m# }' R) c: \/ y8 m$ z" v" r
  500.   {
    " @1 j$ @1 [* o0 ^' B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    + R- r0 S9 S( p- G4 T4 u2 O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. X6 t" P' U1 J* ?9 w4 }$ p7 U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) F1 f$ _% t" G$ p
  504.     {+ y4 s" O1 ?3 h8 @1 q1 c
  505.       strcpy(szPath,szPathTarget);
    9 L7 U8 w$ e9 S: {. L) h
  506.       SetCurrentDirectory(szPath);
    ! j+ X% l* I' E( u& I# c. `
  507.     }
    ! S6 b# n2 r0 V) n. W1 K! b
  508.   }% I# a7 d" m5 T+ O# q5 |
  509. #ifdef _DEBUG
    8 I  v4 W6 ^7 F) P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 w* `9 j7 I) z8 g$ G8 ^9 }
  511. #else
    - `# r6 k1 B) Q  E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 v) v/ J" ~3 l1 U8 R6 X1 G& ~) _" y
  513. #endif
    8 T$ ?6 I2 l7 c3 c0 W. R; U7 Y
  514.   {) d. n& b  n& N% g" A8 h8 ]
  515.     char tempFileName[MAX_PATH];7 S7 I0 {5 I' r
  516.     strcpy(tempFileName,szPathSource);( c! ]2 a5 k; o* ~1 S! t7 e9 t
  517.     tempFileName[strlen(szPathSource)-12]=0;. F7 k) D; f6 I- |7 E) O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . q. d" v( I4 T( n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) P1 `" r, S  P+ F6 g8 e2 X& L8 }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' B# \. C2 M8 @* h0 \8 q! W/ y2 x
  521.     return TRUE;
    8 o" U; {$ C. H1 E! Z) v3 f
  522.   }8 w+ U  Z/ d8 J9 ~' G
  523.   // Nuke 0118: Delete run.exe
    + B; o. o; b% K, |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( K  A: |6 t8 N. Q3 C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 k6 g- S5 d* g
  526.   if(!ReadCfgFile("Config.ini"))
    2 V* G9 k! v) O7 ^1 j4 E
  527.   {
    % [' Q) [" U# ^- j* k4 `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 F) j+ B6 K* Q0 Y" ?( t
  529.     return TRUE;
    " l+ I' K1 D  D5 A( L  L- @3 y$ M8 z
  530.   }
    : P1 i6 N9 |! f1 j. r
  531.   HANDLE mutex;
    2 ~- h3 A2 S3 j1 z& R0 \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* c1 c. \+ e; U
  533.   {
    ( k4 r2 l( K. F7 g! E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ o6 I* O" F* O3 ]8 n
  535.     {
    $ u" g3 W8 E' W+ B) X3 W" o  W
  536.       CloseHandle(mutex);. |! ~) l5 p, X6 ~
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) Q+ j( g0 j' a! [7 c0 x  a
  538.       return TRUE;
    " w0 z0 m# ~$ J
  539.     }% [1 _( O) k/ D
  540.   }  0 H/ S3 d8 Y# S; U; {- S
  541.   CloseHandle(mutex);5 O. D( C) ^/ c3 Z
  542. : @) F3 R6 O+ M; {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 Z& w5 s& C% ?) G
  544. / U  s4 G( I( z# c
  545.         AfxEnableControlContainer();
    3 S+ a/ c; n) w/ J
  546. 1 a, r* N) M2 [: H5 L
  547.   bCanUpdate=FALSE;: E3 a# y6 l# d4 t! p5 ~5 q# Q
  548.   dwStartUpSteps=1;: I" [; G+ D# U0 q
  549.   dwProgramState=AP_NOTHING;
    $ b. O) f1 A5 O/ `8 n$ p
  550. 3 B  {0 B  {9 C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% }6 e% \0 u: D4 j+ p" J( {+ n3 J

  552. 1 F+ ~% n7 h( J7 {
  553.         // Standard initialization! a8 i" L5 L- i% t$ e3 Y
  554.         // If you are not using these features and wish to reduce the size" |3 F+ Z$ x4 o. L; \0 S. ]
  555.         //  of your final executable, you should remove from the following  h2 N! [& u8 I! k. l& K, x( q9 Q. O
  556.         //  the specific initialization routines you do not need.1 G, ]8 R2 G0 b3 n
  557. & p4 ~2 N' D, q2 Z0 o
  558. #ifdef _AFXDLL
    2 }0 h8 V+ b  [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# @! t) f4 a2 }, k1 R- Y# W
  560. #else  l0 w9 C9 |8 z# n6 P; g* }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; {5 {# Y7 b0 M+ r- ^
  562. #endif& m; n) _. {3 j! h
  563. ( M; Y4 y/ g4 G( h" \) S6 h* q
  564.   dlg=new CRevAppDlg;. o+ ?2 }6 i8 I" h- m
  565.   dlg->Create(IDD_REVAPP_DIALOG);) w1 n5 b1 ?( L0 Q! t( m. H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);$ a0 H, T4 q+ {$ F! m# a
  567.   m_pMainWnd=dlg;
    ; v; T  Q6 m  C; d4 j$ {( o
  568. ) ^9 V# s' L  _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' V% r% e/ P, j9 v
  570. 2 W) B' @" R+ s" W- f- b$ E& w/ f- B
  571. //  GdiplusStartupInput gdiplusStartupInput;5 s# O" G8 q0 \3 u
  572. //  ULONG_PTR gdiplusToken;
    ; d; d1 \: c( {& M7 ~# N" l7 X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" d! Y9 R! h* e5 g* ]+ g8 N
  574. : b/ h# S+ K' J) R9 m
  575. //        CRevAppDlg dlg;3 G3 d$ Q  A+ a5 _) P2 r
  576. //        int nResponse = dlg.DoModal();
    % y& [$ I) F: a/ l# D; ?# D
  577. //        if (nResponse == IDOK)
    & a! B* I7 @( Z5 r1 f& N
  578. //        {
    8 _9 K' {4 A' L2 {( O( N9 C, h& A8 v
  579. //                // TODO: Place code here to handle when the dialog is
    0 ^, @) ^8 \% @, t% l8 J3 Y! y
  580. //                //  dismissed with OK
    2 _; B6 l' `$ o8 P
  581. //        }% a  a! v4 K9 ~3 R2 c. L
  582. //        else if (nResponse == IDCANCEL)
    , i; c1 h0 H: ?$ S7 i
  583. //        {
    1 h4 M, q, V! R3 C
  584. //                // TODO: Place code here to handle when the dialog is
    # {  C$ Z  `! Z6 R' C5 f2 p
  585. //                //  dismissed with Cancel$ J! c/ @+ p3 P' ], H
  586. //        }" S; x4 M, Q( b5 u. o6 k3 z( u

  587. # Z, p' L; t1 R! W7 F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! E' f: y8 \* l5 ^
  589.         //  application, rather than start the application's message pump.
    7 h; i4 F0 d" ]$ ]. L4 e
  590.         return TRUE;4 `, F" Q( `2 w5 |
  591. }
    0 E( s$ y  C0 s. {( [. v- S
  592. $ l5 H1 V. V* C' @& \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 y5 l- x& d/ P! Y5 D
  594. {& `+ ]% w& ?0 d' i3 V) r
  595.   int i;
    & H& w. y9 D+ `  D
  596.   char *szRet;  K, q0 e: v3 f, H

  597. 1 {. y' z4 @: Z/ Q9 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 z* [2 M; K9 m7 ?& G2 z
  599.   if(sztoken)# M4 g- o, d/ P3 e8 V1 c: {
  600.   {
    0 A$ t' N. _6 ?# c7 H. w
  601.     szRet=&sztoken[itoken];8 x, T3 h& y- `& B& U" G
  602.     while(sztoken[itoken])5 K2 D& Y+ Y5 b. i7 b
  603.     {
    ' F; b6 _- u- ^. u
  604.       for(i=0;i<(int)strlen(token);i++)
      B: L5 _% C1 B' G
  605.       {
    3 E. C$ J: S0 m3 {% A4 k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])9 k3 t( M7 b4 T3 o
  607.         {
    , b: z) I' F7 q
  608.           sztoken[itoken++]=0;
    & {9 q$ `& `, V1 u2 g8 Q" O  Y% @9 P
  609.           sztoken[itoken++]=0;
    1 E# G( ]' A% l. X6 V" l/ j& x2 V
  610.           return szRet;% f3 Z: ~0 C2 B. Y; o, {
  611.         }
    . o: n8 R, o# c) Y* H
  612.       }0 ?' X2 `; B4 x3 ?7 F0 L+ G* S
  613.       itoken++;
      q, \8 {" e) L* \' `! n
  614.     }, U" S6 z" X4 ^6 X/ Q& F* i
  615.   }; t' z: R8 p, P( G0 F
  616.   return NULL;( X) j' H9 g" ]9 j
  617. }) H2 P# q& v; _/ `  u6 J: I

  618. * a5 D- S7 f' ?; m: {  B/ t
  619. void ProcessProc(long Total,long Current)
    : v0 y# _' {$ a# N* \# T7 x/ W
  620. {
    ! E% d& f. H# l; K" \0 C
  621.         MSG msg;
    " r. s. ?% O0 S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- P& a. l. z4 o. O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & t: O$ g: ?" b: \0 R( [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' M3 c1 P& e, G- u8 n' n
  625.         {4 Q! [1 Q7 x9 M1 _2 a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 D1 X- b/ Q1 P0 ?
  627.                 {
    + y  }* g* G" J3 C" b
  628.                         return;
    " Y9 y8 I6 D2 D
  629.                 }- \) `( G. k" ?4 s) d
  630.                 TranslateMessage(&msg);7 B8 S' ~# Y. k" V- w! x
  631.                 DispatchMessage(&msg);
    & k" U! p( G( \) L. p% j
  632.         }       
    + C! S3 A) N* S- M- R
  633. }, C* u  _7 u1 R, U9 s+ b

  634. ; U. H8 H5 T9 N) B- c" }1 q$ A( b
  635. BOOL bFirstChar=TRUE;/ A: I' ?9 i% c/ Y  O! j( }: V

  636. / i# F7 T% A, H. O( v4 H0 [" w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 j! J3 f* h; F4 s5 m  p$ n
  638. {4 o" q2 O  ^% k
  639.         // TODO: Add your specialized code here and/or call the base class+ B' I3 r2 g2 {: m4 x8 b
  640.   switch(dwProgramState), k5 b6 Y, Z# Q- E) }
  641.   {& B; J; n' O, O6 }! Y
  642.   case AP_NOTHING:+ w# r/ Z9 [# u- h2 s
  643.     switch(dwStartUpSteps)
    8 w9 P+ u- {! R; j
  644.     {
    ; k* M- s' ^# X$ ]. Q
  645.     case 1:# [+ @7 U0 J0 T
  646.       {
    - ]) S& @( w& t
  647.         int i;
    ' G% L/ _! G( p" T" F6 c# h3 x  ]4 u
  648.         CDC *pCDC=dlg->GetDC();
      }6 J3 A) `+ Y$ U
  649.         HDC hdcwnd=pCDC->m_hDC;, u8 N# m; ?! V2 T
  650. //        Graphics graphics(hdcwnd);2 d9 X: {  A& u1 c* N% f& ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 |# k6 `# \# R+ W7 w; ?
  652. //        INT iWidth=bitmap.GetWidth();
    ; f$ Z; Z  _) ~: {
  653. //        INT iHeight=bitmap.GetHeight();
    ; _1 C4 R2 A- S; t% ^* c9 Z
  654. //        Color color,colorTemp;
    % H4 e9 n# n! }) K5 v: c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 F( Z2 J6 x* N4 |0 j
  656. //        {9 B! Z# a  J" S* L1 u4 D9 i- a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 x8 ^. }  M6 m5 F/ Q4 W; ], T  \
  658. //          {8 L0 j- R" U6 E; y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* j7 i7 K: N1 m
  660. //            colorTemp.SetValue(color.MakeARGB(3 h1 P- G' a* a+ D
  661. //              (BYTE)(255*iColumn/iWidth),$ [6 b& |, x" r: V0 T
  662. //              color.GetRed(),
    1 W+ Y  K8 G/ Q" J7 {
  663. //              color.GetGreen(),/ c& u" E1 `; m2 [2 D/ g0 w$ f
  664. //              color.GetBlue()));
    ! y8 L3 O6 C/ e. O: H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% b* }. {* t" s9 z+ n
  666. //          }& ^! k+ K& B1 r/ f. I: ]
  667. //        }
    3 G. D* P7 r7 ]. h. b- y& h% p
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ( r2 P( O& h' q" Y) `+ D' x' s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) E7 b" S3 G) n2 ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 C* K! ?0 Q. b4 S" M! B7 l2 ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      W8 n. V4 J. D: i
  672.         for(i=0;i<240;i+=8)
    0 ]$ h/ x3 M0 q0 B+ Q/ E2 C
  673.         {
    , a+ \6 J: W0 ^( M2 l! G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 U6 ^$ n$ E. Q9 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 r4 V6 O; Z6 [) T& X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 O' F! Q- i! G) D
  677.           Sleep(33);
    ( w# U( s- `" y: L) W
  678.         }
    $ |" S2 q* n0 e" @$ E* I1 u
  679.         Sleep(1000);
    : a$ c& G' [2 o& v: i7 z
  680.         for(i=240;i>0;i-=8)
    8 n7 i8 g" q8 U& B& l0 W
  681.         {4 e  n1 g( s; |6 q. }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) b4 J, d  }3 }# R
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 _7 g9 l. E+ q2 z; g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 P6 A% j- N9 }6 C7 O
  685.           Sleep(33);
    , |: }& @' o6 j" f
  686.         }
    / D9 _- Q) o( g- z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / y! p) @1 R& j) o% v7 Q, b
  688.         dlg->ReleaseDC(pCDC);/ Z! u3 M, x3 s* h& N
  689.         DeleteDC(hdctar);* Y+ ~: h7 M) f
  690.         DeleteDC(hdcsrc);
    % r% y  H  Z7 J" |- ]) i5 p
  691.         DeleteDC(hdcorg);
    9 B) t6 D/ H8 a% U6 b
  692.       }# N9 \- z! r# R. d' \8 |  `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  t3 s) h7 ~( ^& r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . _- |$ w* t+ m% O% M8 C! a: r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 R- K  N3 G1 z3 G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 q9 g6 }; f: `  I" C) x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- l/ d' Q+ n' A# H6 O
  698.       if(!Dn.Connected())8 V% R9 g5 x" H% X3 b$ Q
  699.       {5 d% r2 M% e8 L; C; W! j' V
  700.         dwTotalFiles=1;
    ( f- g- |% j0 V  @* ~0 C( `. B
  701.         dwDownLoaded=0;
    / w- {) J: w( d, b
  702.         bSilentStep=TRUE;  w$ k9 Z( N1 V" k" s" J
  703.         bCompressed=FALSE;8 {1 B2 [9 S' \3 ]% G
  704.         strExtLocal.Empty();* u! ]; w$ j/ F; u
  705.         strFullName="readme.txt";; v$ w* {) M" T9 [
  706.         dwProgramState=AP_CONNECT;* v* b  {- I$ U& U
  707.       }
    7 F: p5 v7 J/ ~3 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / @+ Q5 J: V- }) j) B( x  B( u
  709.       dwStartUpSteps=2;
    , Z6 o: i5 G6 K! t
  710.       break;
    ' W  x4 G9 ]0 [, q" {$ N& M& {
  711.     case 2:. c. Z9 B7 j( Y/ }, c3 C
  712.       {& j$ k! B! @& G% h; o0 y
  713.         int iEOF;
    ! s# t' R7 o9 x" d3 m4 a# u. m' ~; R
  714.         FILE *fp;
    * ~5 E, p; W# K! e. _/ D/ y
  715.         char szString[512];
    5 U* _" Y1 a2 a8 j) O: L, k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ r. F3 x! `" C* f. X3 L
  717.         if(fp). |, j4 M+ F! X0 ?
  718.         {+ Z/ v* t1 m, o4 J! _
  719.           do0 J2 `( @, x& T' D2 c
  720.           {
    6 y0 k/ R1 h2 e2 j4 h2 R
  721.             iEOF=fscanf(fp,"%s",szString);
    6 ?0 ~1 c( e0 l! ^6 r- Y' R
  722.             if(strlen(szString))
    ) ^+ U6 |$ r1 K! ?% R2 Q% E
  723.             {
    $ x/ _  E6 m: |9 h+ i6 M
  724.               if(bFirstChar). l+ k9 q( \9 w, G/ G
  725.               {( M# q* v6 ]# K+ V  s7 ~
  726.                 bFirstChar=FALSE;
    & e$ ~4 j, K# s* i: o0 {
  727.                 bConnectIsBig5=FALSE;
    4 x- S# }8 u2 c4 w* K' y9 y, e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 Q. [- b) ?8 @1 L" P
  729.               }
    ( u! Z$ O4 C0 |; G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . q- Z% T. U" }( @8 x- F/ M6 `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - y: u* H# e2 X
  732.               dlg->m_ListText.AddString(szString);
    : Y  L% u( {+ ?6 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ c) o. X9 O5 ^0 C
  734.               *szString=0;
    + |. g: c+ k+ e4 ^2 Q9 x$ l
  735.             }
    1 T5 q  v+ \3 g/ k
  736.           } while(iEOF!=EOF);
    & |! z" l3 B  V9 O
  737.           fclose(fp);  `3 b* P) T% U' g' }* p
  738.           unlink(".\\DownLoad\\readme.txt");
    + U6 \2 D8 a. A. y' {" o7 Y
  739.           dwStartUpSteps=3;
    , t2 j& ?4 n, \9 q: H
  740.         }
    - ?- U8 ^' X: S- U# \% Q
  741.       }/ V3 c$ r: j( R, X- d7 h
  742.       break;
    4 k. G  \( j" E# }; c$ F+ g" J4 c
  743.     case 3:
    3 L5 u0 m" g2 R! N, }0 @2 Q
  744.       if(!Dn.Connected()). e# u. ^' W9 t7 ?! v
  745.       {
    3 E2 Q6 ^5 _7 C, w& ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 o3 J8 Y6 n) O% L: U( B& T1 g
  747.         dwTotalFiles=1;
      b6 L) g. K+ q5 G3 m( }
  748.         dwDownLoaded=0;
    - l- b# l+ @% M, _. @8 \5 n
  749.         bSilentStep=TRUE;
    0 |& H* ~% e/ v
  750.         bCompressed=FALSE;! j0 Q5 x1 M/ ^
  751.         strExtLocal.Empty();
    ( r# @1 B* B9 A5 J. x
  752.         strFullName="checkversion.txt";) q9 k5 @8 E( `0 ~5 G( G
  753.         dwProgramState=AP_CONNECT;
    7 q2 N/ @0 ^$ Q: O! C( b
  754.       }
    8 H  c  E; y4 x
  755.       dwStartUpSteps=4;
    4 F+ ]6 W5 C) l- c
  756.       break;
    ! M+ C$ S6 Y& o5 T6 R
  757.     case 4:7 T6 V. G; t" |9 x+ b" n+ X
  758.       {
    & G& l$ v+ D( G4 r# O# R: L
  759.         FILE *fp;
    ! O- z* D% z# {" q+ u+ B
  760.         char szString1[128];
    - V9 X% [% f! x
  761.         char szString2[128];" ?1 L" {" x: Z& p  d, W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & W: R7 D1 J& r  H" A
  763.         if(fp)
    5 |! a7 h- a/ l& l" S9 F. u  q9 h
  764.         {. S9 W% X* I/ z% h/ E
  765.           fscanf(fp,"%s",szString1);2 E+ K1 g- X3 R* n  U; D; C7 x
  766.           fclose(fp);# g/ d- M* ^9 x# ]! v$ y
  767.           fCheckVersion=atof(szString1);
    ' S: U$ o# r$ P
  768.           fp=fopen(".\\checkversion.dat","r");
    8 v) s1 P  k: z2 a# X1 [
  769.           if(fp)
    # Q6 B+ i  q4 W# g" a
  770.           {
    " [7 A- l, n* ^' B
  771.             fscanf(fp,"%s",szString2);
      c+ Y& x9 \' E( f$ F  y
  772.             fclose(fp);
    - m( T/ a  R& {1 y2 K% I
  773.             if(atof(szString1)!=atof(szString2))/ b! V: u. C8 i4 c. ]! E3 Z  z% M9 N3 j
  774.             {; q9 q/ K% k4 W1 Y
  775.               if(!Dn.Connected())
    ( p: X, o% R! b' D# s" W% |
  776.               {+ p) u# R3 L' l" r; C, N" F9 P/ r
  777.                 bFirstUpdate=TRUE;' s1 C0 A" R7 y( E
  778.                 dwTotalFiles=1;
    / y" Q+ H6 A+ ^( B
  779.                 dwDownLoaded=0;1 Y- v2 D7 S$ [, Q" }% i: m
  780.                 bSilentStep=FALSE;
    & m# b% D* r9 j. q
  781.                 bCompressed=TRUE;3 A* M1 O# q% w6 ?. w: i* M
  782.                 strExtLocal=".\\DownLoad\";
    5 }; s. i$ o0 O4 q# a
  783.                 strFullName="update.txt";3 o% v) ]/ g7 }. d
  784.                 dwProgramState=AP_CONNECT;
    , x" A1 @' z) r) z! j& N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ [- G( s# P5 g( U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 ?! s3 o/ n7 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% t+ L* _5 \6 ?" f: N0 o

  788. 2 S. P1 a- O2 T4 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# B0 P4 ^6 Q" V9 f* d
  790.                 unlink(".\\DownLoad\\checkversion.txt");" h; @4 B: ]& k0 x4 c" s3 w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- t8 R! C# P/ Z' I( G
  792.                 {" ?/ o% m0 N) Z5 C9 P  {% x8 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 e2 o7 `, A4 [0 _! X
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % ~: C. @! c2 @$ |0 Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 d' O7 [0 n3 x% O+ t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 f2 I; F6 U8 \6 [- t6 K

  797. . g% Q9 I# S& I& Q5 m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" g# N/ `6 z1 k% P
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - y, s, g. r$ m% Q) N4 h: }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . u" `! B$ ]0 p' w" q6 O& i. y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / s; {2 j0 Z+ X6 A
  802.                 }- E" u, a6 X* Y" K% \8 \4 E
  803.                 dwStartUpSteps=5;+ T" q! S) u- j1 R$ i+ U
  804.               }5 S6 i0 Q% J& M3 ]# r- v3 W8 i8 J; X
  805.             }
    & Y# O% ?  j/ X3 T& S' ^
  806.             else7 D  K+ S3 P1 p
  807.             {
    $ x! J1 F  L, r! c- o% i: d$ }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & j2 v% |& y$ g
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) P! R  w6 s9 G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + n. m# X2 T1 {* C" J1 c4 S. H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , ]* M: \% B5 d6 T* e% x, }0 I$ t
  812. + h9 b/ m( b' p# H9 h' A* F' P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. R9 z; i: l3 _  ?) M9 o( E: u
  814.               dwStartUpSteps=99;
    1 p/ ?: h) l; T  p# c* W7 Q6 i
  815.               bFinishUpdated=TRUE;3 Z) f! j: R1 w# ^+ y, e- q7 f  e
  816.               bCanUpdate=TRUE;
      t( F) o2 v) p7 K. C- V2 f
  817.             }( Y  G6 x# J3 ~( Z2 f- z
  818.           }: T0 X  c: X1 }3 U! [
  819.           else
    : H" G- H6 H$ `) _4 J4 L
  820.           {( z% ?, b* M6 ^1 M$ K
  821.             if(!Dn.Connected())
    " X8 O8 ~1 l0 \& y
  822.             {
    ) a9 A6 p% J' M) \! w
  823.               bFirstUpdate=TRUE;  Z4 R8 G/ C; H2 r2 t
  824.               dwTotalFiles=1;
    * H: ]$ f: [* |# E% i4 {+ ^
  825.               dwDownLoaded=0;
    % l: L8 T7 {) e2 x5 v
  826.               bSilentStep=FALSE;
    8 E; O, m1 y) P' ]. X
  827.               bCompressed=TRUE;  H: @4 W8 E9 C3 d  i
  828.               strExtLocal=".\\DownLoad\";
    1 B7 v  _( f1 o# ~+ K8 G- x# C
  829.               strFullName="update.txt";
    1 h: b) y! g$ ]$ [  W
  830.               dwProgramState=AP_CONNECT;
    2 O6 v8 [$ r& ]% f8 ]' C& K- O% e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 D3 I( u0 z; k; J& i4 P6 ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! |3 J4 z8 N( z  _. f* M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % R  D/ z- g! l: J+ q0 x9 N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* e( i# Z9 m. [" t, F0 S. P
  835.               unlink(".\\DownLoad\\checkversion.txt");5 r# g# F9 e& M% z2 J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ y8 z1 X4 U+ T$ j
  837.               {( z! y; C4 F' w4 B% z9 T# ^+ M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 O) r# n- A+ p* M/ I( S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! I. y/ D/ o9 R, O* c
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : l  q" v! t, D1 f4 s  g2 Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 C& l* ^6 N7 m( R! L2 I5 s
  842.                
    4 |, T& M& w7 u1 B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 J9 \2 ]8 z) k  a; F! k9 d% H
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; l& A% ]" i  s) P/ K6 M5 o  N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 \( {. J2 I" T2 h, v/ i6 Q/ v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; c4 W9 _5 N4 W, d% B
  847.               }
    0 u* D9 m# V) Z% s# ]
  848.               dwStartUpSteps=5;! n" |) B& C) m8 F
  849.             }4 i3 n) p  [. `: x' w
  850.           }
    & a/ Q0 U* d3 x9 W& f5 _
  851.         }
    ' D8 o, F; p- Q% Y% ^
  852.         else* E1 `  W1 r4 T$ E- K! D
  853.         {
    6 ^7 j8 r. v: F5 |
  854.           dwStartUpSteps=3;
    ) y' z' v# k* D  s6 J+ y
  855.         }
    ) k6 r7 s* P+ ?* ?; C/ F
  856.       }
    ' D* [) B3 e8 f7 Z% ~) m0 E
  857.       break;6 O' V" C2 u. G1 g: d* k& v
  858.     case 5:
    + h" }4 a: f1 c8 F; r
  859.       {2 J% v1 r$ S/ B, H) |' E: W7 x
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% U. l$ X0 j  n# o, }
  861.         {
    ' a: F/ h4 L* g3 p  o
  862.           int opt_overwrite=1;
    2 H6 n$ Z2 w1 i
  863.           int opt_do_extract_withoutpath=0;/ E# f' E7 z: N( v9 U' u
  864.           unzFile uf=NULL;
    & D1 W# z5 L4 V" N

  865. ! {% S0 c1 ?' l% t) u7 ]5 a
  866.           uf=unzOpen("Wsa.zip");
    9 J, T, _+ P# g7 s5 R$ K
  867.           if(uf)
    , B8 J8 C6 L' D
  868.           {
      |( W0 E% W# ?! ?  V& u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 w  L, W& N0 n' c- r
  870.             unzClose(uf);& a: v9 c4 M' j1 y$ w0 C9 ~% T8 g' O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ X' F" {' g- F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 z+ F8 k$ b& ?: v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");2 Z; ^2 U1 w7 F1 A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 M! j0 e# F+ c( \( _: @
  875.           }
    0 L; S) E' t8 r+ @2 n6 O
  876.           DeleteFile("Wsa.zip" );
    - e7 f  s% J5 V& j6 z: z6 V0 l
  877.         }2 f8 S9 |  e  q, X. D) V
  878. : N3 `; D0 V/ I& c8 B: z+ e+ c
  879.         if(CheckLocalVersion())' d/ n4 i2 P5 R5 e9 U
  880.         {0 A2 L$ C. e4 a4 X# q, P
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    * Q& ?& w% w- o# K
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; x5 V) C  u4 R5 a1 c
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  }! E: v! J+ p* h1 }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' p* f4 L" l6 h/ R
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , h' n9 n  }6 i6 t. X
  886.           dwStartUpSteps=99;
    ) [6 d4 }- m# D% z# o! C3 G7 K# n
  887.         }
    5 F9 q* n8 I2 F9 b
  888.         else
    & M! J% R3 O3 Z4 N2 {% U
  889.         {
    1 X" s7 y/ P1 h
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . P  V  A8 z1 ]5 J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 j' w# U& j, \2 [! [. Y" N/ }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    - m1 Z/ G3 i7 Y

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

評分

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