CSUpdate.exe源代码

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

% P+ Q( {4 B+ ]" g7 `( ?! g8 h0 Y
  1. / RevApp.cpp : Defines the class behaviors for the application.: S0 R8 e1 c7 n8 n) D# N4 m
  2. //, R6 X7 m* J5 \: j

  3. * _' y! L# x$ f, E* q* Z4 ~
  4. #include "stdafx.h"
    : L2 y% r2 m9 P' D/ b
  5. , }% R; p  R0 w" J9 W, i7 ]
  6. //#define UNICODE
    - w! r0 q1 f. Y, u8 B. m' b. w
  7. //#include <gdiplus.h>
    2 C' s5 C" t* h1 x: {  L
  8. //using namespace Gdiplus;
    ' T# m* s- ]" Z) U, D. D3 ^

  9. % T# c7 p! g' t
  10. #include "RevApp.h"; Z8 h7 d9 e: \  V- G" U5 a
  11. #include "RevAppDlg.h"
    % v3 d) ]# i, @& L
  12. 4 Q: F2 c% n! ~
  13. #pragma warning(disable:4786)8 |( l5 \6 W' H- T  ^& o
  14. #include <map>( o. a" n; [! H5 q4 _
  15. #include <list>
    . d$ s4 R8 v- a
  16. #include <direct.h>
    ; v* y+ t- y1 {; H5 G

  17. & U' g, m. Z: `7 e2 k
  18. #ifdef _DEBUG
    1 c- y" x8 N' W! U0 Y, p- S% |: ?
  19. #define new DEBUG_NEW9 u0 @, I( @  U7 Q4 Q
  20. #undef THIS_FILE
    ! O$ [4 }$ q/ g7 k1 N
  21. static char THIS_FILE[] = __FILE__;
    6 Y6 G2 r( z! Y# l& d0 O- q
  22. #endif
    & z" R4 N+ J7 t2 f8 s5 e+ h6 ^
  23. #include "SkinResDef.h"0 |. v8 Z  f# e8 s, A6 U
  24. #include "ChangeBG.h"
    9 R; w, A* d) ?( M5 P# ]
  25. #include "AFXINET.H"
    0 C1 W9 e0 B4 I1 W+ A

  26. 0 \- p! `; L: o( z
  27. #define TRADITIONAL_CHINESE 0$ S: S9 l2 k9 z
  28. #define SIMPLIFY_CHINESE 1
    % F$ `* E5 j4 ^3 {9 U0 j
  29. #define ENGLISH 2
    ) c! \' M# u4 ?" x% Q
  30. int m_iLanguage = ENGLISH;% O0 ^( H  @. `; A
  31. /////////////////////////////////////////////////////////////////////////////
    + C  ]' H, s8 I: W, g" q- {
  32. // CRevAppApp
    ) d0 J  U$ |, ]  w% I, p  h% n& ^' h
  33. 7 Y, j% \' N' T! R, y0 o3 \% p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * z9 }! g, |- j" z7 `
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 v% x: c3 W) X
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 K: }5 V* r8 b7 c; C) k7 o5 e3 B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" v% g' p+ M2 n* @6 @) }# ^5 R
  38.         //}}AFX_MSG4 d8 W, K, V/ R) d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) Y2 b! r+ n1 `
  40. END_MESSAGE_MAP()% T; P2 [& r! `! {
  41. * i/ `8 l$ U. h) N1 R
  42. /////////////////////////////////////////////////////////////////////////////
    ; B: {* V+ s6 R8 f3 R: s
  43. // CRevAppApp construction0 `0 k( C7 ^; A* F

  44. # h  O6 N, U  [
  45. CRevAppApp::CRevAppApp()
    " C; r. p6 c- e! N
  46. {8 P! k) `1 U, q
  47.         // TODO: add construction code here,
    7 N: i; p  G7 L
  48.         // Place all significant initialization in InitInstance
    : D; @. @4 ?4 s
  49.   bDisplayIsBig5=FALSE;8 a1 q3 _0 k2 d, }  k
  50.   bRestartUpdater=FALSE;* E" \% _7 D, V) J4 ?/ x7 \
  51.   bFinishUpdated=FALSE;
    4 _  L8 X. Y1 E! A! h: X9 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 i* t% c, n) u! u$ d8 [
  53.   InitChangeDataBig52GBKS();  i7 n% f+ a+ x
  54.   InitChangeDataGBKS2Big5();
    2 K/ _5 ?. P8 y8 m, O) P1 n% _& y
  55.         //
    3 h$ v- I, d, ^& O9 G9 D
  56.         bClickRunExe = FALSE;% ?8 B" ~7 J) t
  57.         //
    9 h3 ]7 B8 O: t
  58. }( S/ u- i$ a  {

  59. 9 p5 [7 q0 z: f
  60. CRevAppApp::~CRevAppApp()- b( ~. G9 p6 c& }
  61. {; W1 G7 X2 r* }* B
  62.         // TODO: add construction code here,
    : g" `; a6 g% n& c9 y
  63.         // Place all significant initialization in InitInstance; J6 W5 F2 T7 E5 F. r3 r. ~" |
  64.   EndChangeData();
    , t: F) F/ F/ t; l5 _; E
  65. }
    & F6 y$ d+ F5 D8 F  y- l9 Q9 J

  66. - @7 f" j4 W6 B" ]% p
  67. /////////////////////////////////////////////////////////////////////////////7 @$ n! G5 T3 _# p- ?# V
  68. // The one and only CRevAppApp object
    0 l3 a+ @( L" ?  P1 C+ @6 x
  69. ; B! P8 f' W) Y7 X/ S1 \6 z
  70. CRevAppApp theApp;
    : S+ e1 O1 r" y

  71. - q* N' z+ v. t4 D+ F: C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 o2 G& T/ X+ Q5 B; H
  73. {
    * n2 j- x/ w! b% R: u
  74.   int iEOF=0;
    ! Q. }$ |; Q9 ]) e* f* I
  75.   char szTempName[MAX_PATH];' g$ J, T$ U% F; D: n( f7 \
  76.   *szFileName=0;
    4 w, b( |0 |% t
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 Q! z- O8 Z, g7 U$ C7 \6 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 A+ q# g5 X- H
  79.   {) M4 n! U- F, j* Q  _
  80.     strcpy(szFileName,&szTempName[1]);* Y4 |2 }5 d0 k: w+ t) g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . w+ M" Q  Y# ~, n; [
  82.     {
    & q9 h% f/ m; q5 u; p! H5 y
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ K4 w: Y' M5 g5 K
  84.       strcat(szFileName," ");3 o/ u7 V7 {' L5 J
  85.       strcat(szFileName,szTempName);3 a" e+ C# J9 G! F
  86.     }) o4 s4 j  ?! p. R; T5 G8 R+ _
  87.     if(strlen(szFileName)>=1)! Q2 d6 d! z; C0 @
  88.     {* _: R2 |9 H" o9 s; {
  89.       szFileName[strlen(szFileName)-1]=0;
    4 w. V& u/ z8 }' w2 G/ ?  D
  90.     }
    , `! a# h7 W  a/ Q, D$ j) t4 X
  91.   }0 [5 d# |3 D( q4 R/ z
  92.   return szFileName;1 H" ]0 T; n; i6 |# D
  93. }/ c3 _: J6 l9 f; U8 I) X+ Y
  94. 3 F" d) q- Q" E2 P1 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% _' |: e0 N3 o; P6 e7 j
  96. {5 w" P; ]* f5 T' L: r
  97.   FILE *fp;
    * H$ I2 Q. Z  V- f- d  |
  98.   char *key=NULL;
    , t/ h- w. Q! U" A
  99.   char version[MAX_PATH];: I8 K0 b# }- K7 ^% d( D  Q5 ]
  100.   LPUPDATEFILE file,olds;
    " `) S! d7 c( q+ d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' C7 d* u. r1 `- n6 _$ p2 W  C( A
  102. : D. \' T  d0 K0 D
  103.   UpdateList.clear();& n% e8 ?* Y8 M9 w  d% C' D/ o
  104.   UpdateFile.clear();4 w* @% l1 w4 C' \3 R9 f% |- g
  105.   if(GetFileAttributes(filename)==-1) return false;
    . @0 J# x0 ~5 J4 R8 V4 Q
  106.   if(!(fp=fopen(filename,"r"))) return false;9 p/ u  n0 O, t6 Y9 J- ]% N# r
  107.   fscanf(fp,"%s",version);
      L8 \( {6 t% A) D% N# }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 F$ C' }4 \$ _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / I# M+ d  Y6 n; l, \5 F* z- F
  110.   {
    3 ^! J# V) P' ?% @
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 V6 w; v+ |3 \" ]' ^
  112.     fscanf(fp,"%s",file->path);) e& J0 P2 ?3 |' W; {1 r- K
  113.     ReadFileNames(fp,file->file);
    7 C0 N* a$ N6 ~8 F. S
  114.     strcpy(file->full,".");( I& A' Z8 T( \" r7 `  x2 y9 j+ N
  115.     strcat(file->full,file->path);
    7 _6 z" U  V: _, @/ [# A/ g% p
  116.     strcat(file->full,file->file);# G9 ~! Z2 ~- F, |- t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 N1 S/ M8 _, I$ Y  f% x! B# h% V
  118.     {
    $ U! d9 O( y6 ]  H
  119.       file->vers=(float)atof(version);
    3 O' _6 P' \2 ~
  120.       UpdateList.push_back(file->full);
    5 m: Y8 f# B5 r) v6 ?3 ?; c! Y- i% d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 ~6 N3 L) E, \% l; [
  122.     }
    4 x8 m  l# d  v  r+ V
  123.     else
    ! ~+ t2 ^+ R# q. \
  124.     {, ^$ U0 q. R) l2 W, O& n. d% @( R8 z7 j
  125.       olds=(*p).second;: A0 N* b% B8 h2 v5 L( D) R
  126.       if(olds->vers<(float)atof(version))7 W. e" D$ G$ F% G
  127.       {4 s" @8 F7 e- x8 x( {6 k; s
  128.         olds->vers=(float)atof(version);" J- I+ J) |! [( F9 R/ ~& d" W/ [1 u- p
  129.       }% D1 y& @$ q7 a* s7 h( L: Y( O0 s9 a
  130.       free(file);- n. g$ u+ I% [5 |) n' W
  131.     }
    4 _. Y: Z- E; T6 Y) K
  132.   }
    . c$ i6 t2 r6 j! K! [" N8 ]
  133.   fclose(fp);
    ( L$ i& F3 l" M5 ]
  134.   return true;4 S! {# S$ w' q# m8 \
  135. }) m6 m' m* q( \/ {. S$ P

  136. / l" z: ~' E  x6 f# T9 D3 R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . D$ z, f7 U4 N' \! g
  138. {
    7 @  s; A9 D3 q
  139.   TCHAR  szFull[MAX_PATH];
    & Q. j; \) T$ Y% t
  140.   TCHAR *token,*inter;
    2 o- X5 ]$ G9 U6 `- f9 w* [9 o
  141.   *szPath=0;
    + a2 V5 }' B; b, s+ @
  142.   strcpy(szFull,szFullPath);
    . f. l" \. {& E: X
  143.   token=strtok(szFull,"\\/");; T/ h/ ~0 R+ t! i: B
  144.   inter=token;
    , x7 V7 q: _" ^0 C
  145.   while(token=strtok(NULL,"\\/"))0 ^& q" y/ _5 m4 w# _8 u  _
  146.   {
    , r% S4 `4 V7 j+ j, m
  147.     strcat(szPath,inter);( C. |- X8 T1 {1 o" V
  148.     strcat(szPath,"\");) k  m" v' i+ m' a
  149.     inter=token;
    * ~; a2 }0 W2 @' p9 c2 ~
  150.   }
    7 o' ~$ y) k! t( Q7 G! q" G
  151.   return strlen(szPath);  s7 x4 |* N8 t4 b9 e3 \, B1 T0 [
  152. }
    $ ~+ ~' T6 W7 ?5 i3 A! m+ ^

  153. + z3 T$ J+ ?  ]2 X/ \+ ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)' }1 t& R8 k, E/ y$ [  S
  155. {
    # ]2 L  F6 Y" _8 @6 \9 b
  156.   DWORD attrib=GetFileAttributes(Target);
    - v9 d0 M% F; u4 H+ {  W
  157.   if(attrib!=-1)9 P* q9 }3 l' a4 b$ P
  158.   {
    : v+ Q3 S$ X/ h# K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      Q- E6 n2 p: ^( a3 V% e* w. i" D
  160.     {  W* a, T- `/ A7 H% I9 E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * |) ^8 f+ a4 [5 u- b2 p/ E
  162.       SetFileAttributes(Target,attrib);% g; r( [" e7 ?/ \; Y1 c
  163.     }. }" b5 ~' V5 \- ~3 C; L
  164.   }* n& i. i. ?* s6 M5 W
  165.   CopyFile(Source,Target,Erase);& t' r4 _5 L2 }1 ~
  166. }+ L; P5 M# |  J2 {

  167. 8 U" |; _$ ?; n- {: y5 g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% D+ M5 F- _3 k9 t  @% ?
  169. {% G& u# d! `# [5 S( h
  170.      FILE *fp;2 }6 {/ A5 \: y5 H+ r
  171.      char  szBuffer[8192];
    ; _- C, M/ P) h$ E: [  ]& x# x! `
  172.   va_list  argptr;0 h/ ?$ ]3 l0 ^
  173. 3 U1 d9 @) G7 a2 c1 X
  174.         va_start(argptr,message);* E: z/ A4 G( k  T; L
  175.         vsprintf(szBuffer,message,argptr);
    ! X0 j6 y" l& L8 D' I7 H. K& _
  176.         va_end(argptr);. [$ p7 U9 R* f& b+ N1 S
  177.   fp=fopen(FileName,"a");5 J1 h" W. j/ j" L2 P& `( O( e
  178.   if(fp)
    ! s, j  R1 g/ ^" {8 u6 b1 w4 ^
  179.   {( N; i+ i$ N7 d; N
  180.     fprintf(fp,szBuffer);7 l/ [0 {' p) a0 l& A
  181.     fclose(fp);
    & Q: ~$ ?* x# W+ i
  182.           _flushall();
    4 s+ i$ X3 V2 L: u* h1 t
  183.   }
    $ ~4 V3 Y# C. v  z$ ?7 s8 k, l( D
  184. }
    7 C9 ], d5 d" l2 X
  185. * [* v: N3 G4 R" F# y/ o9 u
  186. BOOL CRevAppApp::Fclearf(char *FileName); ~4 n. q6 T, K% }0 F2 u2 E( [
  187. {+ d% }5 W4 d/ u4 v. D. q+ m
  188.      FILE *fp;
    6 F0 P( q4 K( U# p) p# I
  189.     DWORD  attrib;
    1 @" s# t$ ?. W7 U4 L$ p* u; M  ]
  190.   attrib=GetFileAttributes(FileName);
    , r0 |; `/ o& }* m# [2 n0 r1 [( R. y
  191.   if(attrib!=-1): i3 U  z# O: c4 J& `7 S
  192.   {
    4 m" v7 g0 _" K6 _" Z7 e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);& c+ X# f/ G& j% ~
  194.     if(!SetFileAttributes(FileName,attrib))* Y( D" j6 a3 C: H' ~
  195.     {
    - u$ ~- n' k) }
  196.       return FALSE;& l! D2 a; o- d( ^; W* @
  197.     }
    - r1 {0 `% N/ C0 p' }
  198.   }
    0 P* t; m  A+ v+ K) N8 s+ d
  199.   fp=fopen(FileName,"wb");
    " }. n: A& N! ^) n; D. H
  200.   if(fp)
    . C+ g4 A+ |( ~9 P( B2 ?
  201.   {
    7 t% ^& h; E$ l( R3 G" Z" |
  202.     fclose(fp);
    / A3 A4 o. Z  |6 E! y5 @% a
  203.   }% m) b8 ^( W- a2 T% R# }: z
  204.   return TRUE;
    : F) ]& c% g3 M9 X" |' o
  205. }) [( D3 t  C$ e) Q2 O" ?+ K# h* T

  206. $ M$ v- k! ]) D
  207. BOOL CRevAppApp::UpdateLocalVersion(void)) r5 l, x; w+ R* S( k8 P( t! ?+ n0 M
  208. {
    . r# X! w1 F0 H' t* ]" @
  209.   char filename[MAX_PATH];
    9 c3 T6 H) @/ C
  210.   LPUPDATEFILE file,olds;
    : o8 B% a/ Q1 t8 ~4 K
  211.   std::map<int,CString>::iterator i;
    . z: l% ^4 w+ V9 T9 A4 b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 [% O/ K8 w# l
  213.   std::list<CString>::iterator l;) n8 h+ C# e8 e( E5 X* y

  214. $ |" u& t& X5 D) @
  215.   if(bFirstUpdate)$ R+ C4 M3 ^8 ~9 v
  216.   {2 k- m9 N4 r# R, I% B* B0 ^
  217.     dwCurrFile=0;
    * d$ }! Q# ^( n- b+ w
  218.     bFirstUpdate=FALSE;
    / X$ U& x! M; b: j) v' }2 M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% [2 f" z- P" }% x
  220.     {+ f, ]5 U$ d$ d' X, D
  221.       dwTotalFiles=UpdateLocal.size();6 v0 X0 t2 m3 B+ p9 F
  222.       dwDownLoaded=0;- O! h) O# q; n9 `3 y; m
  223.       bSilentStep=FALSE;9 `1 R/ P1 g: d1 Y' S# Z
  224.       bCompressed=TRUE;0 N9 g$ T9 @1 v; X# A( z
  225.       strExtLocal.Empty();6 e1 S6 M8 e5 o. p0 d
  226.       strFullName=(*i).second;
    & p1 q/ h# c6 o+ n# `
  227.       dwProgramState=AP_CONNECT;
    : _/ T# y# l; d6 E3 z7 E/ `
  228.       return TRUE;8 a1 F. s5 N: f5 I( [: ?1 f
  229.     }* x5 i$ P- }8 `( g
  230.   }/ K* `5 X9 N* ^* |4 K+ l! C& B
  231.   else if(bRestartUpdater==FALSE)" ~( J4 S! n. z- u6 L& g
  232.   {
    9 c- @' U# O, y7 r- B  _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ ?, X2 \4 s$ V/ G6 `
  234.     {
    & w4 B  E7 [3 T& ?5 X+ @( D+ m
  235.       file=(*p).second;
    * Q1 [5 K! V$ m) Q. f& g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ( a5 K6 z7 X" v/ u( s% D
  237.       {! f; q. Q6 W1 f
  238.         olds=(*p).second;! {" r/ h, s7 _* K4 _# g
  239.         olds->vers=file->vers;' R1 C" Z- n! _& b! [
  240.       }
    , X) k5 U3 C. B, o, N0 R
  241.       else/ F5 S) B, Y+ Q( K3 p3 q4 Y
  242.       {
    % j) [# s, m. M, [1 R& t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( H3 G! q) o4 y+ o/ s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));5 _+ h8 f) c8 s- O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 g7 e* E( p+ L8 D0 d& B8 ~
  246.       }
    8 r& b9 ^" v( O' u) \3 M* J" X; i2 Y; K% q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& T; X- H, q% M- W
  248.       sprintf(filename,"(%s)",file->file);
    . k; v+ I% y0 f0 G4 s8 u' _" J$ i2 M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 \1 e  b: b  }8 A5 [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  [+ m) W6 ~$ W0 ?6 [; F& @! R
  251.     }3 A' Z+ J& Y7 ~1 _# L' D
  252.     dwCurrFile++;, E+ n* X9 g; d7 u9 R  o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 z1 O8 K% j, p
  254.     {
    $ a$ E$ l5 H6 H' j. N$ `* y/ k7 F
  255.       bSilentStep=FALSE;0 ~4 {4 h" Y$ I+ l2 b
  256.       bCompressed=TRUE;; {. o! X; U2 p
  257.       strExtLocal.Empty();, O& i) Y8 Q1 C+ Z, e- ^
  258.       strFullName=(*i).second;( X- o+ I3 b" Z2 Y# T$ l* N) G" [
  259.       dwProgramState=AP_CONNECT;0 R  D/ J$ F/ f) u
  260.       return TRUE;8 _0 I3 z% c( a% e
  261.     }
    # s) z" C: ~5 Z& e2 b/ z
  262.     if(!bRestartUpdater)
    , ]9 L3 W$ b; e0 T" e
  263.     {7 u6 X  d+ S$ z$ G; P
  264.       int iCurrSize,iFileSize;
      R: t+ M' o, K7 d9 {) T, n7 n  v
  265.       iCurrSize=0;
    . {9 j% z9 Z9 u! K( q
  266.       iFileSize=UpdateList2.size();
    . E+ {/ E( s) g' P, v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 {# J% e0 z2 U6 ^+ j6 Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ z( q2 p* m! ^" ?0 A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' I8 x- P, y/ k2 ^# @1 ]6 o+ o
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# B7 }# n3 m: Q7 W3 _
  271.       Fclearf(".\\update.dat");0 `. h( r: {* x
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; P% r+ z. g/ |1 r3 d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; Y) h9 B0 \) o. H9 j, s
  274.       {
    / I1 o# X8 ?5 p+ }  Z5 H' }0 J6 M9 g
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! w* `1 ~- U7 w" k1 z. n; @
  276.         {
    0 P5 s+ J! K! A; r0 V! H/ z" _
  277.           file=(*p).second;
    ; J4 U; D8 D& x
  278.           sprintf(filename,"(%s)",file->file);( Q/ s7 c; @! J" c8 f3 ~
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 E$ j- q* d7 [3 P
  280.           iCurrSize++;
    ) \5 `, _0 g4 C; k$ H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    " h# r; I+ M, `% x
  282.         }3 ]( h. o. |. c! ]3 i& u
  283.       }0 d: \; Z, j% t" ?/ d
  284.       unlink(".\\update.txt");# I% V! }9 o+ }6 X
  285.       unlink(".\\update.tmp");
    9 }+ k% q( Q1 n: g  }9 z! E
  286.       Fclearf(".\\checkversion.dat");; H3 v) o  l( X* g! }) j9 W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & A# P# f5 a* M1 P
  288.       if(UpdateLocal.size()); _: k1 i' i9 G# F) F! b
  289.       {
    0 i& d2 Y! J- G
  290.         UpdateLocal.clear();
    & E  H5 X1 u! L; b7 M; [  a4 C* K7 ]
  291.       }
    3 u3 {5 L: F+ I4 G& V% e- M
  292.       if(UpdateFile3.size())7 G5 j5 j. h$ r) m: D/ k7 d9 F& Y  P
  293.       {: X5 o" Z2 t7 Y% g5 g, H  }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ D! ?* n" i$ ?- G/ `. B1 I  R" E
  295.         {5 g& ~4 d- R) k8 @6 h
  296.           file=(*p).second;( b  u0 J& F: A5 k
  297.           free(file);$ \, Z4 J; w/ r8 M  b- z" e8 Y
  298.         }
    ; Z0 _: L7 \( R' x( @! v
  299.         UpdateFile3.clear();
    # z- j4 g% m8 u- S7 _7 B! ^
  300.         UpdateList3.clear();9 k' w# \; j1 i
  301.       }0 S  T" ]9 O8 i
  302.       if(UpdateFile2.size())
    & i. k# m$ E+ \7 H4 s2 L
  303.       {5 _7 y/ t" E: N" M& u. Q7 c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( ~# `/ q! u( x% f! Y
  305.         {( a$ A$ V7 h0 m, `4 f  a3 n
  306.           file=(*p).second;* d* m7 G) n8 ]& |, {9 e! Y
  307.           free(file);
    0 J/ j: n' E2 r5 m1 z) p5 K- T% K* h
  308.         }. m1 x! C& Y; E& Y; ^# h: B
  309.         UpdateFile2.clear();7 T1 E: n0 C6 j' ?7 A9 I
  310.         UpdateList2.clear();
    ) d0 f% A, S- f8 u
  311.       }
    " z2 Q0 k4 L/ I: g4 \
  312.       if(UpdateFile1.size())
    / z1 n1 m. y7 W  q9 Y
  313.       {! [; w1 I+ o+ E6 q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # L) a4 h# n4 V( |
  315.         {: K% a0 h8 V, M* W$ Q/ M" |
  316.           file=(*p).second;
    # v1 l' S6 U+ ?
  317.           free(file);
    % ?/ @2 \* o2 v8 c% e2 F, p
  318.         }
    % ~( l" X! z  r4 I/ e
  319.         UpdateFile1.clear();: s* K" i$ N4 u
  320.         UpdateList1.clear();9 j, t) r8 z7 R5 [1 f
  321.       }; q: {2 a' |5 i: }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ [' v5 L8 q8 J, l3 c
  323.     }* ^' v" U  d' ^7 d, L
  324.   }" y) S& z+ ?2 H2 @0 C8 O
  325.   return FALSE;2 i% s+ T( }  z' ]
  326. }3 X6 _* k1 B7 X3 i
  327. 6 j8 W, u/ l1 f3 g  N; S8 x
  328. void CRevAppApp::ClearAll(void)$ v+ _/ ?4 f0 P6 y: K2 A
  329. {& p: o. R' t8 ^$ U- s7 E7 A/ L& d
  330.   LPUPDATEFILE file;$ p6 J& p$ H9 F1 U& _: r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: A; R. p" _/ \  i

  332. 2 p/ f- V0 @2 Z; \3 P' m8 W
  333.   if(UpdateLocal.size())# W( \: T. u4 l
  334.   {- n+ X" Q: P7 y& z! D5 f0 C& D
  335.     UpdateLocal.clear();
    9 P5 S3 Z# Q2 I: j/ ]/ Z- b2 Q
  336.   }1 [& x( N3 f" s% `/ N
  337.   if(UpdateFile3.size())) j, b5 t! D2 }1 j5 B0 R
  338.   {
    & J( K  D) X7 t2 i+ L1 `5 Q# v7 ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % f8 L8 f* |; D
  340.     {
    7 a. E& P8 K" R  k( e9 i( B
  341.       file=(*p).second;
    ' o- D# \+ ^) b" G$ [
  342.       free(file);" {' p) q7 g( P+ M
  343.     }
    ; q' s7 T# T/ p" F; }1 P
  344.     UpdateFile3.clear();
    % Q; G! c6 m- T! g2 M' Z; V
  345.     UpdateList3.clear();4 W4 t# T& e, I: p8 U7 w
  346.   }! L3 i0 c) K" ~) ]  L* i
  347.   if(UpdateFile2.size())2 S. `9 \& m$ n( a5 U
  348.   {3 J" Q* B% _+ s- g! l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 g- S, e& d+ s  O( O7 u+ @! e4 t
  350.     {
    8 y( Z8 n, N" ]* u% e" d  q
  351.       file=(*p).second;- Q9 ]$ P- }8 q- L$ ~. m/ V
  352.       free(file);
    5 J7 g: h$ l( s2 D- c/ c
  353.     }
    % y! S. u8 h  P- o  B- b
  354.     UpdateFile2.clear();
    # h% u3 [* `3 [8 y) O
  355.     UpdateList2.clear();! ~, ]: J6 V0 i  c7 ^% n
  356.   }
    5 i( L' C) ~+ i- ?+ Y" N/ s
  357.   if(UpdateFile1.size())% w0 I2 J' D3 T5 f! {8 R! ^
  358.   {# d  h4 e9 d9 @9 I1 p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( N9 [  w! N2 }2 y5 X5 z4 B, \
  360.     {
    1 v& H2 U6 J; G, b
  361.       file=(*p).second;/ ~# R1 P1 i/ b1 K6 x
  362.       free(file);0 i& K  s' K* ^4 c! k) w
  363.     }* i( `" W8 }; `  ]# c8 ^+ Z0 q) Y
  364.     UpdateFile1.clear();
    * [7 e, d1 [/ \( Y6 T/ v; X
  365.     UpdateList1.clear();
    7 i1 n. n/ O1 }7 M' G
  366.   }
    $ R: d2 [. I% d% T& `
  367. }  
    ; q9 l/ v4 b% G6 [* k
  368.     ^" B2 N! Y  I; B; C
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 V3 _; M# z6 @& e4 I/ N* S" ^# }
  370. {
    . f: K1 \8 x: }( E5 z
  371.   int c;
    9 m) O0 u, R9 @, s6 r1 l& V1 `
  372.   LPUPDATEFILE file1,file2;' h, W% t& X2 P5 ~, E" H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + V+ i* K/ W8 g( G! ^
  374.   std::list<CString>::iterator l;
    . }+ y) ^2 c- B% A. r- T+ R5 W

  375. ! X2 a9 C* |# E8 f
  376.   UpdateLocal.clear();  W3 Z! b: Q1 `8 A* O+ V
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - s1 Y7 C) }. B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) w. ^: {8 w) o& s# O% H& d
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 I# W& S0 S( @* @$ f+ }+ J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    0 I# }& v4 S+ f: W& F
  381.   if(UpdateFile3.size())
    / n( Y3 P& Y9 \! Q" r
  382.   {5 m# P: k4 w# n" q$ }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). S1 r2 w1 k* e2 B
  384.     {! N3 j+ L, ?5 f2 Y" q
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! t, N5 C) T* I- m" T0 N, n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " J! ^+ ^$ i5 }* S
  387.       {! a* R+ h' H1 I3 K: e, |1 _7 |* v. t
  388.         file1=(LPUPDATEFILE)(*p).second;( o( w/ F; ^9 k% o5 ?9 \! J3 i
  389.         file1->vers=file2->vers;
    4 D- D! u. R9 W8 g4 a9 E/ ?
  390.       }0 O$ o! w' m8 |0 O5 _' q
  391.       else
    4 d- I5 J: ^% f3 j4 r/ `
  392.       {
    6 Y6 L" M4 T& a% S' i& o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& V. U& ]% S; W! x7 k& P0 l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) S4 U# d* d' z* ~% l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & Z5 M( D( O& I/ j
  396.       }
    9 V1 D- A2 `2 O
  397.     }* ?8 N3 e3 \- N0 ?
  398.   }
    " \# J/ e! {6 D" g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 z$ |2 ^. [7 h! }5 |4 x3 p3 ]
  400.   {3 d: G9 L! J. U) a' [% R8 \) P
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 X7 Y6 y/ h. X2 P2 t# l( q) u
  402.     {' m9 F1 u' L8 H1 e' C4 @5 U' E+ e
  403.       file2=(LPUPDATEFILE)(*i).second;, q" V) P: n8 P& k2 z8 Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* [+ b5 P' d$ G
  405.       {
    ; Y0 f$ f, y/ P  z- \* K  O* o
  406.         file1=(LPUPDATEFILE)(*p).second;1 f+ r: p; B' A3 A  O. F1 M
  407.         if(file1->vers!=file2->vers)3 k6 ^8 Y9 S( @* P
  408.         {
    6 e1 d" B  j+ {! _* x0 f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 A* U4 c4 y2 |# a  d
  410.           c++;
    * e% m; v& J/ S9 I4 A3 N3 T
  411.         }- P' o) _" @, [6 v# x* W" |
  412.       }+ M' o5 H# P9 Y, }
  413.       else* c# @. C- j) b8 {+ i
  414.       {/ H# `+ W8 o' o* `) y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# ~; @$ L3 Z" }
  416.         c++;
    ! |% n5 n2 c( O, V# _: {" a
  417.       }
    + \4 [& _6 K$ ?1 |0 t
  418.     }
    3 [  Z% w  t+ ~' V  G  Y
  419.   }  f! o0 q0 Z" D6 t. h$ x
  420.   unlink(".\\DownLoad\\update.txt");
    * H$ t' J3 r! |7 l+ ~0 }
  421.   if(UpdateLocal.size()) return TRUE;1 |9 G8 c( B+ e( t6 A' P5 l
  422.   else                   return FALSE;
    3 Q8 w! H- Z  w' D& X+ E! m
  423. }
    : x8 R0 _+ |8 D% A! D5 h

  424. , d# c( |" Z, F0 ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* D& X. F: o0 Q3 w) y9 }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 [9 l$ t2 W- U8 p5 i7 B" n" R

  427. % a2 p+ ?  R# e3 R& Z4 T. i+ ^

  428. ! ~: x- N# R. `! C- Y

  429. + T$ X7 G8 i% W5 c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- Y2 V' N6 \8 H4 N0 B
  431. {$ [+ j# X3 P/ J1 k/ O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. U# a; u4 b# ^) S" N& I1 w6 Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + ~/ o  q0 [8 @) A1 s$ w, y7 `
  434.   {
    $ _- P+ B# E2 A; K! u0 _& G8 S# g& H
  435.     char szLanguage[50];
    $ b( l& V0 d( N' ]( ?2 ]6 }$ d3 g/ }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : `! }4 {9 G, R+ G' A0 e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; a, I! U' T& G3 o" W+ W# S' c: C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " I! N8 Z) `% c9 j: k" [( a
  439.     else                                   m_iLanguage=ENGLISH;
    ( `, X' ?  A1 G" Q0 E) ]
  440.     char szRegister[100];$ }# q# x* `# _# p: I9 y% y" J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      w  V: D& r  q( d* u2 i/ l
  442.     strRegsName=szRegister;0 P' E6 f; E6 B0 ^3 M$ j2 ?( i) m
  443.     char szPatchURL[100];+ e' j0 e9 n' b/ ^
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 J+ D* f" V* o  Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) {1 _9 _9 H8 E
  446.   }; m0 f0 P+ t( f* Y
  447.   else$ }" C; C3 y# W- I( z' {, `
  448.   {
    " P2 O1 b* |: W' B4 a
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) i  @6 \( o5 D. O& K- m
  450.     strRegsName=DEFAULT_REG_URL;
    2 j* U- U8 T; ~2 C
  451.   }4 }5 T4 `# G, w3 f: G' S
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 K8 s2 Q' U% C0 s
  453.   {' v( E5 d( C) |! ^' x8 G1 K% d
  454.     char szIP[50];
    * c5 F1 f3 Y4 g( Z- S* W- A
  455.     char szDIR[300];
    ; \1 X+ u, o) _) W# T7 M: \' ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 L. g! Z! }& L( F
  457.     {
    , r3 i! Z/ _$ Z/ Y/ M9 j, H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* ]6 e5 O4 L; u* V6 F  o( _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 \+ F/ ?) Q0 }! B7 o# t: Z, p3 j) o
  460.       strHostName=szIP;
    ' T$ ?( i2 W/ S) O3 s6 K+ q4 v
  461.       strHostPath.Format("/%s",szDIR);) d8 c5 [/ q: i$ ^& l: L
  462.     }" j1 T5 B, f) t
  463.     else1 p! B1 |2 R  C2 X4 {
  464.     {
    $ k( j3 `& l+ t. Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + ?% s% f, C# H* w
  466.       {
    3 H8 k, {  |9 K8 m! A
  467.         char szLanguage[50];
    9 |0 P2 ]2 f, U# r8 |: B: J/ f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 h( E8 v8 C+ U2 f$ F
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ B, W% e5 T& E" Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 H+ m1 K$ b6 B  w5 f
  471.         else                                   m_iLanguage=ENGLISH;
    ( N% n. s6 a6 w: S2 @7 X2 n3 N
  472.         char szRegister[100];
    & F. d, {5 H8 z" c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: g1 a% p' c, @7 v' k- R) l7 I( e
  474.         strRegsName=szRegister;
    * m2 {0 f6 ~7 D( I; b; `4 n
  475.         char szPatchURL[100];8 l( L$ D, H# N% V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # Y+ T' v$ A9 _& U3 k3 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ D, }0 X; B0 f! ^
  478.       }
    5 ^1 n. \# O$ i$ v  h* w! h
  479.       else3 E8 c" w9 Y5 E. i! R6 r+ f
  480.       {$ _. ?  j( j6 m+ l: L* i1 o5 X+ G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 W- w5 P9 d3 l; W% c) M
  482.         strRegsName=DEFAULT_REG_URL;
    / S4 E( J( p: J! w8 k
  483.       }; b- H: _2 w3 b
  484.     }/ x/ v; m* r. [; R! S
  485.   }
    ' ~: `& H& a# Y' k3 A7 O
  486.   return true;# A* e! M9 s( q/ P2 a% a
  487. }& _( H0 A. }- u  K) l, u
  488. 3 z- d" _, |0 J& K- P9 T
  489. #include ".\ZLib\unzip.h"$ d$ Z" L, W1 n2 _
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( y% v& H3 o3 c" q7 ~# {
  491. /////////////////////////////////////////////////////////////////////////////
    9 f3 m, M% K, w
  492. // CRevAppApp initialization9 z* {% J+ p; L" b/ R

  493. 8 R; z. m4 V; M
  494. BOOL CRevAppApp::InitInstance(): z* N9 s2 U" u
  495. {
    $ @4 x% {- F# _$ x$ a( J) c0 t3 e% D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & W" g, T/ [- j& S  z
  497. 9 r- V" F7 W5 K5 q: ]; v+ {! x. ]; ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 b% q) D* r/ B( m, K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ p6 J; B% G5 D* l$ ~3 i2 q
  500.   {* j; p( n$ v5 s8 B* C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) R* c/ ~* u7 c' C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 i- A% d% ]! |0 J% V" F3 h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 N- r, }6 K# e3 b' G/ d9 O
  504.     {& U$ T9 o7 u7 R& t' F( q- }
  505.       strcpy(szPath,szPathTarget);
    9 o* r+ R9 ?# d* t  N) s! X7 k
  506.       SetCurrentDirectory(szPath);
    % w$ B5 g* z$ C
  507.     }
    7 ?2 u% w5 Y, q  z3 v* i% E% S  U
  508.   }; ~6 k/ i1 a' L7 o, j/ Z
  509. #ifdef _DEBUG  O1 \4 O3 M0 f9 X% c8 z5 [" e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( m6 U0 V/ D) M2 x& Z0 q
  511. #else( C. N9 Z, h. T  d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 h' @/ s% }; c' E  R( _) I3 b- }6 E
  513. #endif4 d0 D" Q2 i) K0 h  ?9 U2 R1 n# f2 J6 V
  514.   {8 A9 J: q8 O* B% _2 w
  515.     char tempFileName[MAX_PATH];) }8 ^/ T4 ]' e/ m
  516.     strcpy(tempFileName,szPathSource);6 }* V& Q# X2 H0 |$ n
  517.     tempFileName[strlen(szPathSource)-12]=0;* p" r% Q8 W( _( w- I7 X# x$ L
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ Q- |) `* l9 s$ [% ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" U' g/ @( z8 L" [- s6 o" A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! \( K6 ^, J2 p% E' i) @
  521.     return TRUE;
    2 ]) o# O1 `& `, X; P' v: C
  522.   }
    * x0 x  z1 u% _8 a; \3 c0 N
  523.   // Nuke 0118: Delete run.exe8 P  }+ T. X3 M. X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );; y$ d/ {0 @2 N$ c6 P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 t& f5 c6 U; D# U
  526.   if(!ReadCfgFile("Config.ini")); \  r' {* \2 r9 a1 m
  527.   {
    ' P* Y) u1 |  F5 ~9 b8 [9 l: @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 f6 f; j5 n, n. D1 r$ c. r: k, C
  529.     return TRUE;
    2 N% P" z3 f* n
  530.   }
    - G) O( o2 s& \; i
  531.   HANDLE mutex;2 T; E) E* i& o+ S# o# O9 f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& `4 E( F# d. I0 L6 T& @/ R7 x0 @% M
  533.   {
    1 l) J9 p5 \2 C2 s& `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : S- |  N% @, R! _
  535.     {  k- s# C2 d' R) D4 `- ]
  536.       CloseHandle(mutex);
      u; {$ F% B7 P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, a. Z1 q7 U, \: J1 T% X1 K/ Z) D, Y
  538.       return TRUE;
    - ?0 V) [5 m$ J$ T$ m# {$ [  s) L) M
  539.     }$ \- s( B2 ~. G  n) j
  540.   }  
    9 U2 ^7 q2 w; ?) o2 `
  541.   CloseHandle(mutex);
    % W% l' ]  b4 ?! R0 o0 ]3 r
  542. 8 E& l9 h6 w9 ^1 l2 }' p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  ]+ B/ k1 J- Q  E, S
  544. 3 Z9 D3 C3 i' H8 x- c  m
  545.         AfxEnableControlContainer();& \4 e1 T6 P2 U5 y
  546. * I) F2 U4 `( a4 N, r% t
  547.   bCanUpdate=FALSE;( k' h. q7 a6 f0 W. H1 `2 j
  548.   dwStartUpSteps=1;
    9 ]/ v2 M. n/ u
  549.   dwProgramState=AP_NOTHING;
    ! W# @7 L; _- R4 u- K! P8 E

  550. " u" C, B6 k1 b; s1 g1 p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 `) s$ R; u( L, z, Z

  552. ( R: |7 S: X& V
  553.         // Standard initialization
      W* ?6 i/ I; t. s
  554.         // If you are not using these features and wish to reduce the size
    9 X( u# I1 y- B8 i; {* a  B+ L
  555.         //  of your final executable, you should remove from the following
    $ a, q" e& [; p# u
  556.         //  the specific initialization routines you do not need.
    , n2 H0 `: O2 `- e3 ]

  557. 1 q) d' B3 o+ O% y5 V; a/ ~" y
  558. #ifdef _AFXDLL: {8 f( ?  i$ \6 J8 Q; k3 g: y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. O0 b- j$ q) O
  560. #else
    ' U0 b% U) ?- g# O  k
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 P; t3 Y, T& U
  562. #endif
    " N. `: _/ [6 d, Z
  563. 8 z/ }* L" c/ k3 M6 I4 E
  564.   dlg=new CRevAppDlg;
    + i. d4 C: o( T/ i+ U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' U$ |" X: B+ ~) L1 }( M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 D0 I( \2 c. L
  567.   m_pMainWnd=dlg;
    4 I( G7 u6 |0 F- n3 f! g. q

  568. 7 D: h0 i2 t+ Y' j1 u3 H+ n: R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! H0 w) V! Y! R1 D# Q
  570. 8 B" j' l7 v) r; @! H1 U
  571. //  GdiplusStartupInput gdiplusStartupInput;' U+ }4 Z  p' ]) b. s) n7 v
  572. //  ULONG_PTR gdiplusToken;
    ; A4 i* `. f4 i* _4 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    0 `8 v( p0 g6 b' A# ?* P

  574.   d: z; j6 q: m9 m3 x( v
  575. //        CRevAppDlg dlg;
    4 \$ L- e7 L0 o- x
  576. //        int nResponse = dlg.DoModal();
    & }  x7 H! M$ R9 r2 h
  577. //        if (nResponse == IDOK)( e6 f; z# J$ U$ g9 {% Q' B* L
  578. //        {6 g8 }; G% p# F
  579. //                // TODO: Place code here to handle when the dialog is7 U) J' ]; J+ M& k- ?& D+ Y& @/ _
  580. //                //  dismissed with OK
    ' w2 ?! u5 ~! D5 z4 f5 ?. R
  581. //        }6 k, t( W$ e4 J7 n0 R! B/ M/ w
  582. //        else if (nResponse == IDCANCEL)
    2 K; p" N4 p) ]  I
  583. //        {' j9 l3 \- Y0 Z  W! ^% y
  584. //                // TODO: Place code here to handle when the dialog is
    % i( Y- P7 K) Z% \( R9 C7 _8 p6 w
  585. //                //  dismissed with Cancel
    ! ^: r1 h  G' C7 I
  586. //        }
    $ H2 H& v4 T+ m
  587. % ~8 p1 f2 @$ {  v+ }7 @4 C. |2 B
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / j  L  K+ U: N& Z. r3 \$ ~
  589.         //  application, rather than start the application's message pump.. b1 l  g9 r8 M; ?
  590.         return TRUE;8 y8 F) Y5 R3 c  P% g
  591. }
    % N7 Q. s! u  }
  592. / j3 T4 E4 q- Q7 I8 q: n' S9 O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : R: W' K$ q  X7 }! B
  594. {, @8 T2 h, }) H
  595.   int i;/ T$ W, i( [7 h- g$ E2 ]
  596.   char *szRet;; p3 r, V0 |% c- {. D
  597. : _) t* a# F; e# O% I# G
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / @5 A, |7 B: Z4 c! t* U% j
  599.   if(sztoken)
    - C; {' |, _: ]+ k' z  E' Y8 ]
  600.   {9 k1 |9 Z9 J) m/ W$ m5 f
  601.     szRet=&sztoken[itoken];* l+ z  {6 |  c% U2 i$ n5 @
  602.     while(sztoken[itoken])
    ; m! {0 R) s# C; p
  603.     {
    / k! n) P. v0 q6 z$ m$ a
  604.       for(i=0;i<(int)strlen(token);i++)
    4 W, Z' Q/ J6 \7 K/ E
  605.       {
    9 b) s* {/ V1 p) I
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* N, o, v8 k& ~0 o+ f# h
  607.         {* w7 L' _& b% z9 j( z: e
  608.           sztoken[itoken++]=0;. O( e& Q/ b/ f) _2 ]; x6 t( e/ L
  609.           sztoken[itoken++]=0;/ U. a0 U8 @1 w( q: I
  610.           return szRet;/ P" r( w  ]8 \6 J+ q
  611.         }
    # M' ]8 c* j" p- b/ f6 o
  612.       }
      f7 y/ M% l5 [
  613.       itoken++;/ |- e5 a) x7 B! p8 [: `
  614.     }
    " j* y( m$ p% i* H7 P! x  Q* T' G
  615.   }* c& r; K6 ^; k1 P& ]0 G! i7 D# d
  616.   return NULL;$ Y: `" e; \" q+ {
  617. }
    2 |# k9 o% @. Q1 T; t
  618. * Q8 F4 \0 g  s4 _
  619. void ProcessProc(long Total,long Current)6 o8 p( T' }2 e# }5 V" @7 W& K) B
  620. {' I4 p( n2 R5 S/ p% e
  621.         MSG msg;
    6 u. G: b# t6 T' F7 \+ A( N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 {! W2 J5 @' K  c" u
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 s, R( L, ]0 S% x# J) u+ T8 x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : u8 a( ~* C( h# r6 c
  625.         {
    5 W* j- U* E0 F' f4 o: l6 X' ?
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - l: O8 l  t: T# _
  627.                 {6 l2 J$ Q% \/ B. c3 Y
  628.                         return;0 }4 p$ ?$ B' @
  629.                 }
    , X& v& `5 I' Q
  630.                 TranslateMessage(&msg);
    4 o4 n/ A5 {: V+ l- h% P
  631.                 DispatchMessage(&msg);1 c# }. B  b; c* }
  632.         }       
    * a4 c) y( R( Y5 q: x+ y4 x
  633. }2 a1 P/ `5 J2 ?) B# w: t1 J
  634. + k  k% v) v. o  w( v
  635. BOOL bFirstChar=TRUE;' j' Z( @/ f* k
  636. : x/ E( o0 }4 h, w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 U2 ~  y7 _4 ~$ u- d: l
  638. {
    $ H/ s( N# w% |' P' D
  639.         // TODO: Add your specialized code here and/or call the base class: Q0 S; Q7 J1 y: @0 `7 _) `
  640.   switch(dwProgramState)/ }2 C) V0 [4 L9 k% Q. L
  641.   {
    # o/ }; G; i2 @; a  {
  642.   case AP_NOTHING:
    - Q# y5 u( A9 j' o1 {( j
  643.     switch(dwStartUpSteps)
    ; J. U7 p  `' ]- W
  644.     {
    & F. I. N0 Y+ h) r  l. C
  645.     case 1:: L0 ]4 l; |) I, ?3 W
  646.       {
    + ~$ }, u1 l$ W1 I- A: J
  647.         int i;9 A5 V1 g7 c2 j# i) j$ m4 G' f
  648.         CDC *pCDC=dlg->GetDC();+ V! y  |" q5 l* B" O$ e/ F' J
  649.         HDC hdcwnd=pCDC->m_hDC;
    2 X) F! ^9 Z# {' g  s* q' N7 ~0 m
  650. //        Graphics graphics(hdcwnd);3 L5 E" u/ S! Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 g: p& R  y4 s* A
  652. //        INT iWidth=bitmap.GetWidth();
    ' {- ^  N, R' {" b% j) m( n, n
  653. //        INT iHeight=bitmap.GetHeight();
    ) C7 P: G4 r: I% P: \3 y
  654. //        Color color,colorTemp;! Z: ~! Y% i" a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% D! G8 V) V5 `. F& a. E
  656. //        {' p- b2 C" q- {' _8 v9 u# B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); ~' B8 ^0 {7 U) o6 _8 Y
  658. //          {
    2 q3 P' K$ C1 H+ X7 x: ~
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 l# z7 T! N3 V! }# O! ^
  660. //            colorTemp.SetValue(color.MakeARGB(2 V6 `! p$ I8 A! X
  661. //              (BYTE)(255*iColumn/iWidth),) T8 ^, b% F8 |6 `/ g7 u- j6 J
  662. //              color.GetRed(),
    # @0 o* x' g1 z6 W# l9 S4 a
  663. //              color.GetGreen(),9 U- }+ q5 U9 i' _  ?
  664. //              color.GetBlue()));: s- I+ y8 F: \" S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 |2 ^& v8 n! x
  666. //          }
    * h. r/ q  g7 a8 ?8 a0 F! D
  667. //        }
    $ \* x2 h' q/ D# l) a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: i* j- ^" e* T& C  O9 P1 h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 d/ f' S3 O4 J2 q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ y) }8 `$ c. b( N6 r3 l+ a% e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 A5 y7 G( L; A+ D" e: c
  672.         for(i=0;i<240;i+=8)
    ) |, B5 \% h( i% P
  673.         {1 r0 N; B; O( z8 @8 q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 \0 }: `+ R* V& l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + C$ \0 Z5 D* r  B7 g' C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 n4 h+ l* R) n) E) N
  677.           Sleep(33);+ W1 R+ o- ~  L0 e$ ^5 ~6 y
  678.         }
    6 `/ d' B; |% U, ^  @; ^* a& \
  679.         Sleep(1000);. ~/ n# R; K$ n' L5 u7 R8 ^6 a
  680.         for(i=240;i>0;i-=8)
    7 f! u0 T8 Q# ^& ~
  681.         {
    5 B% h* R! x$ |  Y
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 J, K* x, z5 ]7 l6 Z2 y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      \$ b9 ?( e- i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / U$ Q' V% h0 d4 T0 W
  685.           Sleep(33);
    3 }, S' H4 ~& B6 i
  686.         }; E! ~  Z( w5 g9 ^+ s$ m/ \- Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ ]" R% d) z; m, j
  688.         dlg->ReleaseDC(pCDC);
    * o& O" f" n. Y: x
  689.         DeleteDC(hdctar);
    & K3 ?6 `7 O5 y
  690.         DeleteDC(hdcsrc);6 b2 x* j% V9 f  o7 i
  691.         DeleteDC(hdcorg);8 N# Z& g6 [, X/ `
  692.       }
    8 Z$ K+ K9 p$ Y& f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! W! N. _1 h' _5 V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 y' u" B4 b# ]/ U3 p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' f0 k% w' K# y/ t1 x; H# i7 P) h, Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : ~% Q, M2 r% q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 U# M: L8 u' o: K; Y$ q
  698.       if(!Dn.Connected()); a! n: D2 G4 |2 B" k$ I
  699.       {
    - d  G1 U& U5 d9 i7 Y
  700.         dwTotalFiles=1;* B) ]$ f8 |0 H& A/ D
  701.         dwDownLoaded=0;
    8 I" G  V% g5 ~' x' t$ U( m/ s' x
  702.         bSilentStep=TRUE;
    8 o+ Y9 e7 {# [- F+ s8 L" V/ w
  703.         bCompressed=FALSE;; v4 ]( e- {  x3 y( L6 }+ e
  704.         strExtLocal.Empty();5 T8 w0 x. @( O7 Y1 M
  705.         strFullName="readme.txt";- ^- [3 b4 z/ `4 \
  706.         dwProgramState=AP_CONNECT;
    + G7 M- A# o! {4 z5 ?/ g
  707.       }
    7 e/ c2 L, Y* ]" n* z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( @6 M$ _7 {# Y; G' D/ K' N
  709.       dwStartUpSteps=2;0 |0 y, Q) `! q- V7 j; h
  710.       break;
    # k, {) c+ w( p  ~
  711.     case 2:
      C) Q3 L6 |; Z: J, ~/ P# L
  712.       {  N: z& a" @6 d) d" k6 C% V' L
  713.         int iEOF;
    1 n2 {% f7 J) K& ^4 M
  714.         FILE *fp;
    9 n1 C( l' w6 O4 U: z4 N0 {
  715.         char szString[512];
    ( B3 ^! M$ U$ R! `" f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; z+ |6 _2 d) E; u
  717.         if(fp)- L0 R4 j* n' c# E# H! T7 R
  718.         {$ p2 s0 T1 I- x9 D
  719.           do
    5 |, E( [1 s& m& S  I9 O
  720.           {$ q5 r! }5 }$ L: i' O( m. p, u
  721.             iEOF=fscanf(fp,"%s",szString);+ Z: J9 ?3 B5 N3 s& z
  722.             if(strlen(szString))
    5 M- F( J; Z- {
  723.             {4 D+ B" H1 u( h( S9 d& n
  724.               if(bFirstChar)( l4 C2 e- ]+ A1 N/ a7 i1 O
  725.               {4 x" {# H' u6 x
  726.                 bFirstChar=FALSE;; C6 I/ o0 l5 Y3 B8 N: d) N, S
  727.                 bConnectIsBig5=FALSE;* _8 [5 m) k9 Q- p5 _2 I" w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! \' L! y# u6 f: p! _# E' v/ H' {% X
  729.               }: v2 F1 X$ O1 _. L& o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( t# x* U, g8 z4 U0 t6 x% G3 T2 e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # }: ~; A3 k# p; n4 Y
  732.               dlg->m_ListText.AddString(szString);
    ' Y% @2 D+ t' R8 i$ ~1 Q9 N
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( x- ]$ j6 U9 f! C) d7 `; R* u
  734.               *szString=0;
    ! \, {4 ?& o, y% Z
  735.             }
    * d# r. }1 z/ T4 T& Z. K
  736.           } while(iEOF!=EOF);
    5 j$ M" H' m$ n
  737.           fclose(fp);1 }; C& P3 z& U; }; v, R' j
  738.           unlink(".\\DownLoad\\readme.txt");$ z, d- b; ~5 X! W; e$ e
  739.           dwStartUpSteps=3;* j: i+ ~' q. D! t
  740.         }) ]8 V) h6 S$ D6 ^* d- G7 {* B# l
  741.       }
    7 V3 m) O# D4 E: h* y% g& {" m
  742.       break;
    9 W( r" @% ~% ^; e7 @. b# j" I& H, _4 ~
  743.     case 3:
    6 [6 @% l: y" t. y
  744.       if(!Dn.Connected())
    5 p3 b4 t/ G! ]8 V( x9 f1 w
  745.       {
    0 S8 H7 d- z( Y/ e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " l: t& Y9 e& R2 }+ c; }
  747.         dwTotalFiles=1;& R5 i* g, Q7 [  U; D" ]
  748.         dwDownLoaded=0;
    5 V. ~. ]# X: T! ~5 u) m
  749.         bSilentStep=TRUE;
    * [. w7 Y6 d9 u( ~
  750.         bCompressed=FALSE;
    ; \; E( y8 F% ?0 a. A2 ^+ R
  751.         strExtLocal.Empty();* T, k* d& z% y% |8 p7 F( X
  752.         strFullName="checkversion.txt";
    . ]( ?3 D. N# Z2 u: w. }
  753.         dwProgramState=AP_CONNECT;) H1 w# V. O5 M9 N
  754.       }- Q5 l  T" N' J4 M4 F* Q. d
  755.       dwStartUpSteps=4;
    " w2 Y2 V) _1 g' v, Z
  756.       break;. ]  I2 r! _5 Q. @" x; g! Q' Q5 x
  757.     case 4:# f  ~- O$ R$ G1 j! e& ~& ?' w
  758.       {
    ; ^9 f/ S! s" p. J2 h1 a! `' A4 ?7 P: `
  759.         FILE *fp;
    7 }0 a" h! U2 i) M- |
  760.         char szString1[128];
    ) \) v9 V( P6 M+ B( x# ~0 A8 I
  761.         char szString2[128];
    " \  R8 |3 F" F* s  r3 a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) h4 r8 k+ l/ E% e, p) z
  763.         if(fp)# X# N& w+ _" [* k; ~" K6 B
  764.         {
    3 N5 ]8 j  j3 r( D+ _5 K% }; q
  765.           fscanf(fp,"%s",szString1);5 L1 T/ ~9 e8 Z& V# d4 j1 B' ?
  766.           fclose(fp);1 y3 B3 |' v1 K5 x" r
  767.           fCheckVersion=atof(szString1);
    , \" c' q+ A8 \4 @( G( z
  768.           fp=fopen(".\\checkversion.dat","r");1 D. D, v+ t0 `4 M2 P( k0 R: \
  769.           if(fp)
    # k/ ?& b+ s2 T; m6 n) n
  770.           {
    ; U+ \# O; f% U1 a. }  _
  771.             fscanf(fp,"%s",szString2);
    & q5 U( f" P! j* T" `: |3 D; u
  772.             fclose(fp);0 V% Q& E! F: G# A5 l+ Z& b7 X
  773.             if(atof(szString1)!=atof(szString2))4 V) {2 X7 @$ H# b( G9 N
  774.             {
      i, M! x8 k+ S' `' h4 Z  R
  775.               if(!Dn.Connected()): r) N5 b& J, V9 I  _/ S# K
  776.               {' }, b7 x+ q- z9 N) g0 t* f6 I
  777.                 bFirstUpdate=TRUE;
    0 v7 ]+ _2 o: B
  778.                 dwTotalFiles=1;
      f$ U9 r" x5 A+ ^; H
  779.                 dwDownLoaded=0;
    $ j* @; N2 g  H$ \) U
  780.                 bSilentStep=FALSE;9 z6 F  \5 D( H) ?9 f6 {
  781.                 bCompressed=TRUE;
    : I2 [. f, I7 H& c" |8 m8 `
  782.                 strExtLocal=".\\DownLoad\";3 }" L  [0 C  x: r; `5 A- }4 \
  783.                 strFullName="update.txt";* D8 k% R& O. U4 |+ n
  784.                 dwProgramState=AP_CONNECT;0 J/ y. \  r, \5 }# Y" B, l4 u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * n% d3 J( Q; q. Y  G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; M; h" a; D. U( \7 \' o. d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 O0 y1 F' w0 `7 }# l$ g2 F" Y
  788. 9 @: C/ A" q7 R% G4 @' A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ], k& t) t+ B; v
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * M, h+ r1 c5 f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! d" K4 F4 \/ D; p& e
  792.                 {9 y; o4 r6 Z. Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 R, H" ~9 X3 ], \& Y) e$ ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");  P' {$ {  u. x6 f; t' r$ D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 F, _/ u( p7 ?  p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& M' _8 f$ x9 u) S

  797. - b  C: B) I# {7 N2 E: ~* i3 J
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 B( g- S% C: t. }" l$ c4 Z( H! T- t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. K& ^* @$ W/ L' H& R& W9 [+ i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 B7 s) B" T. s) }, D" K$ R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 X$ r- H: G* N8 s
  802.                 }: M3 Z$ ^! C2 p% e: W3 P, h5 q
  803.                 dwStartUpSteps=5;3 u0 D! \  N( t" p* R5 K
  804.               }
    7 Q) |7 [5 U( O0 V+ Z2 [8 ]$ b
  805.             }3 N$ M" Z( e! J1 O6 p# B
  806.             else
    4 z% j) o) x( Y$ k5 Y8 ?
  807.             {
    : M6 L! ?/ Q+ v' F" R
  808.               unlink(".\\DownLoad\\checkversion.txt");# p5 s: b/ ^) i4 a5 _  T; z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 {: b. f5 K# ]  J$ f' h  Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + z. v  N+ d4 b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, Q3 J4 o+ X, ?4 ?. q
  812. . n0 W  V4 U& J% M  j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . L2 _6 `! q9 g6 k, x3 V; R( J* F0 Q- h
  814.               dwStartUpSteps=99;: S8 c  o" i3 x2 d! H: l
  815.               bFinishUpdated=TRUE;
    1 Z. @2 Z. S" @9 B# t0 r1 i7 U
  816.               bCanUpdate=TRUE;+ C3 _; m9 n1 ]! f* a- s
  817.             }
    4 d- Z# B- ?- b1 K; @# F6 v. z, G0 \
  818.           }+ v4 b' z9 o  m8 _) v8 J1 _
  819.           else: u" ~, T: r" D; U& p. g" w
  820.           {3 I# O7 @4 v- x! i# u6 _9 ]/ s( W
  821.             if(!Dn.Connected())
    / a- V6 |5 A  E1 }3 o
  822.             {; j- H* w+ n6 }2 b3 {
  823.               bFirstUpdate=TRUE;  b4 O9 O# f9 \# B9 k
  824.               dwTotalFiles=1;* D, ]6 q! f, f0 M  l
  825.               dwDownLoaded=0;5 @3 j$ W1 S* G) d! Y$ y  R
  826.               bSilentStep=FALSE;
    $ m! @" |5 @# r" L% O5 x
  827.               bCompressed=TRUE;
      F$ \5 \5 v2 y# k$ o! `1 k) T6 s
  828.               strExtLocal=".\\DownLoad\";: l" G7 n4 S7 v* @9 x" J" L8 K5 |
  829.               strFullName="update.txt";- `# o2 H$ g2 v  [7 p* i5 o3 m/ ^
  830.               dwProgramState=AP_CONNECT;
    # f; }! V* S/ Z3 ^: ~  M
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) W& z( v; S& B) r+ N6 g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 T( R  ]' g0 x+ C* a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) f1 n/ I. n# |0 p. U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 N" D2 @- j, T) Z) w3 f
  835.               unlink(".\\DownLoad\\checkversion.txt");3 i+ e. ^5 n$ I# O# \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% o9 O: |3 D# k- a, v  `
  837.               {" `$ q8 V8 R/ ]- R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' ?: z: P9 @4 _4 W9 Z4 m+ D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 Z& ~: [& l* u0 b+ G2 n4 A
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . X- F# p1 y6 W+ E- t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 J- B0 }% [  q) P$ d; n2 B* H
  842.                
    2 A3 k# ]# @9 \# k7 B; s5 Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , p8 b& ?4 F0 }8 k/ P; g) H9 S9 [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ ^0 v' v, Y4 n# H! G% o8 B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");3 f4 q' o* I  h0 o8 J* \; y- N
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: @& \. h1 y  F* t' D9 z* c! {. E
  847.               }
    9 k7 ?6 k! p- ^8 t0 A$ X
  848.               dwStartUpSteps=5;( i! L" l- Y5 @5 V) K
  849.             }1 ~/ `" C0 G$ a
  850.           }; Z" ~! {7 Q3 F) H" {2 A
  851.         }( K; X) y7 q, J5 n! B
  852.         else! A/ G3 Y9 O4 v' ^
  853.         {# }& s. y- f/ Y1 S5 g+ t" Y, v! z
  854.           dwStartUpSteps=3;
    : s9 _, d4 b: W1 d; W
  855.         }
    3 \: @! m5 @* v9 E! E" a. O
  856.       }/ C; L9 M& X# n- O* v# l
  857.       break;7 ^$ U: I# I" \% b* E
  858.     case 5:0 _5 H3 }" h+ K: I7 E& x
  859.       {
    ) d/ ~$ d+ h3 Q! v" u4 c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # G; L% i6 \# B  @  V3 F( |
  861.         {- _7 w1 ^" _) r/ U; X4 z: L) U
  862.           int opt_overwrite=1;3 {- v5 p, k( _! B) D4 [% w4 p, X
  863.           int opt_do_extract_withoutpath=0;9 q8 N3 n" m$ D
  864.           unzFile uf=NULL;" o3 u4 ^% W* k( b. G

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

" T; _3 g! d9 g4 z3 _6 ?' }: @1 I+ P. S) Q5 C+ ^7 ?

評分

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