CSUpdate.exe源代码

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

/ k; l: j  R. L" v0 g* K3 D8 A# n- o
  1. / RevApp.cpp : Defines the class behaviors for the application., U' L& k/ ]3 F. x5 i
  2. //  q# x1 N/ `# c

  3. . `. t8 P& K2 q# O6 k9 P4 U8 Q" g
  4. #include "stdafx.h"
    ( E. Y, D8 r( j, A( Z0 V% d0 z
  5. / H7 `4 H; L8 v; I* O0 X% K
  6. //#define UNICODE2 @4 u+ s) E" C# [3 _4 h
  7. //#include <gdiplus.h>
    ; j) h0 [, S; Z( j2 A8 z
  8. //using namespace Gdiplus;# N- ~3 ]3 f2 y/ ]4 I5 h. P$ G

  9. ( d. [) W5 N! ?
  10. #include "RevApp.h"8 Q, S6 B9 {8 W* s# h' T1 h
  11. #include "RevAppDlg.h"* B* t/ r2 T) m6 Y4 {& p, C$ t

  12. / S, T5 ~% ~! Q3 a7 {
  13. #pragma warning(disable:4786)
    , _3 x" q! N7 S' _/ @% Y7 D
  14. #include <map>
    4 _# j. S- [/ M0 C4 D% x! f1 z
  15. #include <list>
    * ?# k6 [9 y  {, k6 I- ], y2 b" ~
  16. #include <direct.h>" K' ]& Q% Y2 N6 Y7 a4 |
  17. 1 o5 n- \4 w8 u9 _' w- p
  18. #ifdef _DEBUG! O9 {* K. w* s; E: ~
  19. #define new DEBUG_NEW2 `7 Z9 [# G8 `
  20. #undef THIS_FILE# g  x# H$ y' b9 u9 B7 @' R
  21. static char THIS_FILE[] = __FILE__;
    * m9 `4 K1 E8 s. I' r/ v
  22. #endif' J8 r' l- }; A1 D2 M2 }8 o, A7 _
  23. #include "SkinResDef.h"! Y' }: Q% d2 T# |4 F5 j* L
  24. #include "ChangeBG.h"
    3 ]' g% Q7 M' c9 P
  25. #include "AFXINET.H"
    " r! ^6 D& r: y2 p( D0 B  A3 Z$ P  r

  26. + H+ O1 G( N, _" ^; [
  27. #define TRADITIONAL_CHINESE 0
    * T5 [- l. m- ]% A: A* \. U
  28. #define SIMPLIFY_CHINESE 1
    + s' [1 G6 l5 e; h# O
  29. #define ENGLISH 2! d$ T$ U$ h: z
  30. int m_iLanguage = ENGLISH;" F: j; q* ~  x' ^$ R7 E$ b7 ]
  31. /////////////////////////////////////////////////////////////////////////////
    ! s3 f' F- [+ `" l9 L
  32. // CRevAppApp
    ( c! t8 a+ a4 e) z7 H# s$ Y7 `
  33.   l1 {- z+ i" |& E4 k! |4 g
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); J' C: m! k" k! q
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 y: a0 D6 A1 Y4 q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # s  G/ n4 a, y' h; V, l, S# v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 B$ w" {# s8 E7 q
  38.         //}}AFX_MSG
    ) k! w( _/ M, U/ R  ~! ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 A- h' I- |- t" A7 }0 o/ \
  40. END_MESSAGE_MAP()2 s& C  E# @& C. ^1 N% Q5 M
  41. : S; b. `+ P0 D/ J: f6 ^
  42. /////////////////////////////////////////////////////////////////////////////
    - Y; m( B7 q6 k* l
  43. // CRevAppApp construction
    0 U1 [' [0 P% ?; c
  44. 2 [1 k- ~2 m) c
  45. CRevAppApp::CRevAppApp()1 R' B7 L, A- P* V. d
  46. {0 f" l9 h' X3 [5 k# E
  47.         // TODO: add construction code here,
    % D4 z) D. q3 `' z4 k' V
  48.         // Place all significant initialization in InitInstance
    9 e5 Y' u) v) k. \3 ~& B' u
  49.   bDisplayIsBig5=FALSE;
    ( x6 s! E  D4 C! u( X( F
  50.   bRestartUpdater=FALSE;5 ~2 _) s! E. ~& h3 ^+ R4 I
  51.   bFinishUpdated=FALSE;& Z& V6 c! @; B% O# w9 g1 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& e) Q! v2 L( O: d, K( Z" ]  R2 ]
  53.   InitChangeDataBig52GBKS();
    8 K. e3 p% h( m* _
  54.   InitChangeDataGBKS2Big5();
    5 G4 r& H' \* V1 A) s' d  }# L
  55.         //5 \1 K& j# k0 E# J; W, u0 Y, q
  56.         bClickRunExe = FALSE;
    9 @3 T/ A, _; L% i
  57.         //+ I* W) g6 ?4 N& k' k7 o
  58. }, k) b4 R0 A2 s7 Q

  59. , @) Z( d9 o( t! P/ W
  60. CRevAppApp::~CRevAppApp()
      ~4 ~6 j4 x7 P& e
  61. {
    ) w* p" Y( ^+ w8 ?6 `
  62.         // TODO: add construction code here,0 _" ]) ~; B9 R, b& E* d$ I' S: Y
  63.         // Place all significant initialization in InitInstance' H0 O! o* j) Y( ^
  64.   EndChangeData();. D4 v, `. D) I% b  W
  65. }
      [8 z% P5 U- `3 U! y) x( X+ l* G0 ?

  66. * H& I6 X" d" n/ X
  67. /////////////////////////////////////////////////////////////////////////////2 U/ \  o: U) g2 R* o
  68. // The one and only CRevAppApp object* J% A5 e7 i/ d6 r: i  {
  69. ' s+ ]! x- F; o- ~& r# h
  70. CRevAppApp theApp;+ C& W! A$ W- Z6 R& M1 F: ^

  71. ! V4 W+ O, Y. M& M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! y3 r! r1 K3 k* V
  73. {6 x9 g4 y- Y* V
  74.   int iEOF=0;/ }1 F0 N: r: j" `0 s% }& W
  75.   char szTempName[MAX_PATH];
    , F- Q; }5 G" n# V: h1 e
  76.   *szFileName=0;
    # E5 z- X9 i8 L1 \5 I5 t3 m
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 ?8 o5 f1 g- i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( G* y( ]6 i% t
  79.   {
    8 D/ m* {8 A0 D, {% \: H, c7 j
  80.     strcpy(szFileName,&szTempName[1]);
    - R0 M' a* B$ T; |0 k( ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 K! `0 V5 f1 I+ n- Q* S9 N% v- P
  82.     {
    # o6 l  P8 B3 ~2 N: o1 s
  83.       iEOF=fscanf(fp,"%s",szTempName);" U4 u$ c0 B- ~* Q
  84.       strcat(szFileName," ");5 Q  q  O- X! f5 g/ J. R
  85.       strcat(szFileName,szTempName);
      O3 C1 R% \4 G8 `- r
  86.     }
    ; S! ]0 n! s; k6 _+ ^$ v' M7 Y: f; l
  87.     if(strlen(szFileName)>=1)
    4 e: R# E8 L2 L0 t; ~) V
  88.     {/ L8 V9 M; O# Q; @/ l
  89.       szFileName[strlen(szFileName)-1]=0;: @; p( A3 D! \% B6 Y
  90.     }
    2 ]) n4 b- ?! Y9 K; e/ d) M3 S7 y- f0 ?
  91.   }
    4 l1 X$ o* e& G6 L) W: K' I: f
  92.   return szFileName;5 l: V& r' v+ B5 e9 L
  93. }
    $ G& ]# h# F' C/ J5 c7 w; j
  94. , n, \9 v) o- L6 {2 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  l9 u/ X, E' y
  96. {7 b/ M% C" y5 E+ w# E3 t4 C
  97.   FILE *fp;6 z/ D9 }- Z! p1 ^4 m
  98.   char *key=NULL;
    4 c6 i! a1 i! ?7 [( ^( o; c
  99.   char version[MAX_PATH];
    5 }/ j: w$ j! g& B( V
  100.   LPUPDATEFILE file,olds;
    $ F6 b2 \1 _3 X/ _8 s$ X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* f1 z# {) f, ]6 O0 }1 _

  102. , {' X- P" g; j& }+ Y
  103.   UpdateList.clear();, I0 q+ p- `$ m
  104.   UpdateFile.clear();
    9 s8 ?+ o6 w, [. v, ~' `2 Z* y. a
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( ], U4 q% z. x2 a  G6 ]4 V& D5 k
  106.   if(!(fp=fopen(filename,"r"))) return false;5 M( @' ~+ T4 m
  107.   fscanf(fp,"%s",version);  t5 F8 [: _: ?+ T  N' l" p+ l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 e9 ]$ E- f6 l+ K
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 {4 \4 ~) G8 Y7 C+ O$ f- b! \4 x
  110.   {
    , c7 n) x/ y: j) B0 B8 d: B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- M/ B: `) m+ ]9 e$ J3 \& W/ N
  112.     fscanf(fp,"%s",file->path);/ U! n% H, c" {7 K# [
  113.     ReadFileNames(fp,file->file);
    % r/ n( y" ~, E3 v# d- G" ?
  114.     strcpy(file->full,".");
    2 ~  E3 O: Q# P$ ~( c0 R/ t
  115.     strcat(file->full,file->path);
    3 K4 c$ Q" P9 H
  116.     strcat(file->full,file->file);- A$ S5 j  h1 H( q, Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ e. L( e/ s: x4 A: w
  118.     {% ?+ {, D9 x8 j5 j
  119.       file->vers=(float)atof(version);
    0 i6 K& U+ N# a
  120.       UpdateList.push_back(file->full);
    9 ^& C6 C8 _0 f6 F' |7 M9 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 v* \% n" q4 d& X* |, S) T3 B! e
  122.     }* h  K7 b7 K, _/ I4 S
  123.     else
    3 T# k; D; W6 Q6 H
  124.     {' k' D1 G& f9 a
  125.       olds=(*p).second;
    . E; D! p. k, o' Z6 ?! `1 b
  126.       if(olds->vers<(float)atof(version))
    + x# Y) b- P, x( n$ T
  127.       {& X5 R; J6 v8 e  ^6 g
  128.         olds->vers=(float)atof(version);! g" G9 T! @2 x' Y
  129.       }( P: u" E" U/ Q' Z8 Z  T
  130.       free(file);) x( x0 m9 E' j3 v0 Q! f$ p7 k
  131.     }
    : S0 b; M: H, H
  132.   }/ [; W% f; `* s- P
  133.   fclose(fp);! @$ t9 d5 C  \: e
  134.   return true;
    5 X+ z9 i' W( ?7 u+ v
  135. }
    9 K1 i; Q0 T# z% Q# y

  136. ! t! ^* e2 a1 B3 m0 H: e5 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / G+ @* Q6 T1 W7 t. n  \
  138. {2 ?. Y) Z+ |1 ]; u" u: \
  139.   TCHAR  szFull[MAX_PATH];" o, W4 l* M$ m  r  Z0 D+ m
  140.   TCHAR *token,*inter;# I6 l8 M! k7 ?0 E; d, E
  141.   *szPath=0;! M" R6 N5 P4 e9 U% \% S* w
  142.   strcpy(szFull,szFullPath);) j% D. s, c  [$ p, J
  143.   token=strtok(szFull,"\\/");) a9 D5 D4 g, Y- l3 n" i! L
  144.   inter=token;2 C- H1 O7 i5 [+ A  k5 _
  145.   while(token=strtok(NULL,"\\/"))
    " {. y  S# T5 i) j* N& c
  146.   {
    . N) x% }4 i* ~7 l
  147.     strcat(szPath,inter);
    3 O9 w: M6 U  U5 a
  148.     strcat(szPath,"\");
    3 |+ _' v' H7 O
  149.     inter=token;
    $ ]  Q8 h% T! v* a& h1 W7 O
  150.   }
    3 a6 o" {5 X$ J9 r( Z- h
  151.   return strlen(szPath);3 y( _1 ]8 y/ Y) t7 @$ T
  152. }, g6 f8 D9 p3 A2 r6 ?8 C
  153. $ f3 H6 Z" \8 d6 C1 D# d3 t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , I  Z8 v+ M0 I* P$ X6 p( k/ n
  155. {
    + P4 Q0 [1 S1 R- ^9 n
  156.   DWORD attrib=GetFileAttributes(Target);
    0 z% I* `) L) h
  157.   if(attrib!=-1)6 L: u* l1 `) Q& h: X2 N% O5 G! q; z
  158.   {
    6 G  M* y9 g+ }+ u' p3 Q! I
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ h- o9 y; h0 Z( f0 Y( N+ G* j
  160.     {
    1 o: {3 Y1 d# N5 ~0 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( r+ U5 }  x: i2 X) Q" o. Y: \  h
  162.       SetFileAttributes(Target,attrib);
    ; V! v! E( R2 F8 J
  163.     }& K8 f: T- z- r0 n2 w! ^
  164.   }
    8 u7 N% B) y9 @6 ]2 @6 j2 ]' S3 f' T
  165.   CopyFile(Source,Target,Erase);4 t! p4 f- j. X. L) R
  166. }( v0 C; H! D# N' O8 I
  167. + ^0 R; t7 s& x2 y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " ^. b1 ^) _% G( R2 k
  169. {
    5 l; R) X+ ^4 o, u; n2 W* L2 M
  170.      FILE *fp;4 d1 j* U- B- Y7 n
  171.      char  szBuffer[8192];
    + u, G+ l9 l" x3 L) k$ R/ t
  172.   va_list  argptr;
    ; V5 f! c2 ^& _- C% I' ]0 n4 b

  173. 6 V0 H  F, ?1 P9 V/ h
  174.         va_start(argptr,message);
    # l& j( w7 z% D, H* V8 ^# [9 \
  175.         vsprintf(szBuffer,message,argptr);1 ^$ B9 y% b* q( e% |9 }
  176.         va_end(argptr);  K6 J3 Q+ W  F$ u# l
  177.   fp=fopen(FileName,"a");! ^1 ]6 q2 }# i/ @/ t
  178.   if(fp)/ ~- D  ~+ c* G
  179.   {& A: |. v; i5 j! ?  q
  180.     fprintf(fp,szBuffer);; h, y7 G$ L$ M- S
  181.     fclose(fp);9 X# i/ q8 _9 Y/ @: V8 P0 q7 P
  182.           _flushall();/ s; M+ o4 e/ g+ ?* ~
  183.   }
    5 t/ w7 o8 d  l7 F0 `% Y7 W2 L" @
  184. }
    ( A7 B1 ~, A5 Y! J& Y( w4 n
  185. ) F$ C) e/ X6 P2 ]" s
  186. BOOL CRevAppApp::Fclearf(char *FileName)- W& W: }/ E1 u, w
  187. {
    ' w$ s9 T3 g, }( s$ M' Z+ m+ a
  188.      FILE *fp;
    . H8 o% O& _3 F0 _& h! _
  189.     DWORD  attrib;  h% C# s2 q3 f
  190.   attrib=GetFileAttributes(FileName);
    . b6 u% R) z3 Z% g
  191.   if(attrib!=-1)
    ' p) D4 [0 _" K
  192.   {
    . ^% R( c! Q: k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 Y2 c. A0 l2 g+ N* }) R
  194.     if(!SetFileAttributes(FileName,attrib))$ i! H: l5 R0 _; z+ s
  195.     {
    9 D6 o# y  X; G# S  ^& \  ^
  196.       return FALSE;% a" F( d' G1 p
  197.     }
    1 O4 G2 k8 X' Q/ W" j
  198.   }4 q- G' D* y. k: z/ h0 \
  199.   fp=fopen(FileName,"wb");
    , w" {' F9 f( c4 V% _: c. v
  200.   if(fp), e: W# I/ [2 H# c
  201.   {
    - |7 b# \" P8 [, }! t* R
  202.     fclose(fp);7 R3 `, w. H0 j' I
  203.   }
    9 t9 \. d* f. T9 H& ?3 g5 {- N$ b
  204.   return TRUE;
    6 ?9 t# s: J4 K
  205. }
    - E# G- S; q* E$ i  ]( _$ m; R
  206. $ z) g% Q" g; L9 I, f; j8 D
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 Y4 |7 b3 h0 c/ D' }, R" j; [, m* s+ ^
  208. {, F" a& `6 X/ p- m: K: c0 O3 J
  209.   char filename[MAX_PATH];
    & T' W5 z8 g( a  h
  210.   LPUPDATEFILE file,olds;
    0 ^, r6 T% Z2 `+ f% Y
  211.   std::map<int,CString>::iterator i;7 f& y$ J, x  P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 x/ d7 H( X# n5 [* D, z
  213.   std::list<CString>::iterator l;
    * e/ c( R! d( G/ Z, t" j; Q, {

  214. $ Q+ D0 ?5 l, {, \6 f* b0 ]. _
  215.   if(bFirstUpdate)' R  H; G7 _2 f  r6 b
  216.   {$ U3 e8 d; o/ R/ j
  217.     dwCurrFile=0;; g1 ^2 I+ s. Y$ C2 d9 k
  218.     bFirstUpdate=FALSE;
    8 C. q3 j) ]5 S& T4 C/ Y. r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * y/ B- ^3 {, C' N
  220.     {
    ! ]9 L; a+ J4 z8 p( S
  221.       dwTotalFiles=UpdateLocal.size();+ W8 p+ g' l( d. K( P3 P
  222.       dwDownLoaded=0;2 N* L" j4 j& w3 V( j
  223.       bSilentStep=FALSE;
    ! y+ z6 g  M: F5 R$ R
  224.       bCompressed=TRUE;  P+ W) `$ M+ w
  225.       strExtLocal.Empty();
    3 r3 `: l' A$ N8 a" S" K) Y8 T
  226.       strFullName=(*i).second;
    4 y" V: B7 `; F3 k4 w9 u
  227.       dwProgramState=AP_CONNECT;  Y: e- m8 ]+ u' ~5 ^
  228.       return TRUE;
    , |/ X" P7 S2 n: v7 D) [5 X9 L8 B; Q& `
  229.     }
    * U& Y6 m, v/ |' H* s: G: j
  230.   }
    8 Y7 F' r" l- W! ?* c- w4 Y
  231.   else if(bRestartUpdater==FALSE)/ f: O' C' B8 e: V, W5 L
  232.   {) L. [6 X. F+ h2 S, j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 O) C, P2 l& O( _7 i7 c
  234.     {
    4 @- N7 g; `5 i0 e3 ~" n
  235.       file=(*p).second;
    6 d5 ~( N' p: R3 g6 B
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 n) j" I  Q- O/ Q; P
  237.       {! W; e2 W) w! X5 i
  238.         olds=(*p).second;* |6 j2 X1 [& ^  Z, g6 T4 R/ I
  239.         olds->vers=file->vers;3 a$ y) b: f5 S' T2 W% d( C: K
  240.       }
    / i4 v+ K2 M9 l8 c/ N, m, A
  241.       else* j) s# y+ O1 Q; O+ m5 _* c% ^
  242.       {8 I* z& J6 h+ g" T: Q( R3 U6 r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' B5 w/ ^  h+ I7 [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . b6 C: e- E' I, G( r' |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 j" u% u0 e3 s# L" G4 O
  246.       }, }0 [" R) B4 D) d2 d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");. n- {4 Y7 o+ g* \5 r4 R
  248.       sprintf(filename,"(%s)",file->file);
    & w$ L# O; Z5 @% I3 g# w9 W; b% _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. f2 b1 G: q/ V9 F- @0 k( _% y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 F. b& e$ y3 D4 [9 j3 J( b
  251.     }
    % C$ L7 n- Z+ \0 U& E. S1 X/ n
  252.     dwCurrFile++;
    * [0 ~$ o6 K5 |* T( j! q! N$ G
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + F! |0 P4 A2 s0 n' i
  254.     {
    / D  c& g, E* d0 `- m9 `! L" H# t9 z
  255.       bSilentStep=FALSE;
    # [% c  p/ n4 O: j$ ?
  256.       bCompressed=TRUE;
      h' O! L/ o6 \' |: ]- t
  257.       strExtLocal.Empty();
    ; [% C+ p7 G: [5 O5 s  c5 C: ]
  258.       strFullName=(*i).second;
    5 r/ ^6 Q- {' R' d
  259.       dwProgramState=AP_CONNECT;* _: a# z- ?5 b) O9 ]
  260.       return TRUE;
    4 Q+ ]+ R, A. o+ [1 P
  261.     }
    ! u, f; [# L9 ]  o9 B
  262.     if(!bRestartUpdater)
    % T- I1 l( C& p2 B0 w
  263.     {2 N  [. r% R1 \8 H0 J
  264.       int iCurrSize,iFileSize;6 T, s' ~2 ~+ o, c' Z2 n
  265.       iCurrSize=0;0 a, k, ]) Z/ {/ w
  266.       iFileSize=UpdateList2.size();
    . \8 _0 x* ^# {. ~1 \! a, P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( W; ]8 F  f' ~3 w$ R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 o' L. v: J6 F8 w- i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ c; N1 R! b: ~5 C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 v2 S" a+ p8 T$ J
  271.       Fclearf(".\\update.dat");; o2 _' x; Z( ?9 D7 M
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ Y9 ^& F/ {! \% l- m( g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( j# a+ G5 {: p- Y% o$ N& A3 C% t
  274.       {
    1 C* d) ?* a1 }) U* q7 O) c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' V+ i! H; ?. k: Z6 r. p& J
  276.         {: N- X1 Z4 b) B5 Q4 d! g5 P+ g
  277.           file=(*p).second;0 w) J6 X4 \! x/ J/ q, C
  278.           sprintf(filename,"(%s)",file->file);/ X5 z0 O" d6 T5 B9 j' z6 P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 Q4 t) @  I# {, [6 X
  280.           iCurrSize++;
    ( L% }7 e. ~$ E) c& }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 L  H. N7 s5 c5 b1 y
  282.         }
    7 ~. D  `% q( w
  283.       }$ e$ v  q: A; B& Z
  284.       unlink(".\\update.txt");/ a/ U! l( k1 e5 M+ W0 g
  285.       unlink(".\\update.tmp");
    8 G2 ~8 z! A% N( x( y9 \! T% ^2 j
  286.       Fclearf(".\\checkversion.dat");& b$ U  z2 |- t8 g8 R
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / L& W3 N; H0 }, C% _
  288.       if(UpdateLocal.size())
    7 r' [; t8 T/ p
  289.       {2 W* m( v# ]/ n* M
  290.         UpdateLocal.clear();# W  ?8 H0 ]: j3 ?; B6 P7 o4 X; h' J7 i
  291.       }
    % X+ d  Y4 g* l7 V
  292.       if(UpdateFile3.size())
    : a' v$ c/ q" M  G5 d7 b: c% i
  293.       {) R5 D# Y; ~, Y, d) V! m6 t% q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 X) J7 ~( w( A. y9 a1 K- X
  295.         {3 P2 F  X% J/ R) d! s
  296.           file=(*p).second;
    9 t& Q  ~5 u  s$ n2 L2 M
  297.           free(file);
    5 D0 L8 B2 v5 B6 b( E
  298.         }
    5 N+ Y* m; C# [/ Q% R$ s
  299.         UpdateFile3.clear();' y$ e. H6 E4 @4 m/ j& ]) U  g
  300.         UpdateList3.clear();
    ' d6 p+ j+ m' U# P: V3 b) ?
  301.       }
    , h$ Q$ F. ~0 r
  302.       if(UpdateFile2.size())4 C* p/ M' X, M% H& E
  303.       {
    % p$ G- R* v" A& I% g9 T& ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): \+ \: d0 b! [' Z
  305.         {1 o' i% D- P4 G% Q3 H) V
  306.           file=(*p).second;8 t7 I: Y8 J6 ~9 E9 ?) @
  307.           free(file);& o; Q9 C: R7 ~, K: \
  308.         }* ?' ^; T9 ~+ Q" }3 z
  309.         UpdateFile2.clear();. S. U6 i7 j; [& X
  310.         UpdateList2.clear();
    / \5 Y! p2 Q9 ^
  311.       }1 [- q9 h9 {; T) s
  312.       if(UpdateFile1.size())4 ?9 Z5 G( k3 N: I
  313.       {
    + g& T; ^; D" e! ^' G, W
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). K  t9 N5 W2 m3 s" L0 u
  315.         {! W6 X- m9 {. y; j/ X
  316.           file=(*p).second;$ a+ m- q3 |5 _1 v- ^; b4 a
  317.           free(file);4 {6 Q7 A- X* k* P4 q0 u1 ~# h
  318.         }4 b" M9 I& Z3 c& W2 i) l7 V5 R
  319.         UpdateFile1.clear();
    , K! E- r+ ]1 y7 s( R( Y; T
  320.         UpdateList1.clear();/ B3 t8 j& k1 F6 f+ I+ W
  321.       }+ X2 Y/ u$ ~- ?1 e' w$ X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 r: {1 k: B' m4 N$ o) Z
  323.     }% E1 z1 k$ h  H& N0 I
  324.   }9 c4 M% I6 A, Z  y! j1 h$ w
  325.   return FALSE;
    : o" S1 I1 n- f9 g2 b" h' Q
  326. }
    4 \* q* C) C' u' d# c% |  U

  327. 7 ^* r- S5 X0 P
  328. void CRevAppApp::ClearAll(void)6 J& ?6 c( z' a. _- f2 c; S
  329. {
    # r3 O) w. Z; h
  330.   LPUPDATEFILE file;
    6 l; D$ H+ b& {$ a5 Z3 ~/ v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / s) `% L$ i4 J9 M/ Y2 e- ]9 l$ q
  332. 2 [, B& v2 L4 w: E
  333.   if(UpdateLocal.size())
    " P$ o, r, k( \" f* P
  334.   {
    ; ^# ^- ^% x! g6 ^4 u
  335.     UpdateLocal.clear();
    # _7 f9 o$ Z, [! n; O
  336.   }
    " V/ K8 V; w, N7 g: W0 s) A4 e0 L
  337.   if(UpdateFile3.size())  P5 S- Y' ^' ^" U- v! @5 m4 y
  338.   {  _5 }- f; L. ]- J5 x' Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ y. ^7 `+ X5 O) I# E* X
  340.     {
    7 ~" H# {2 X9 j# w- Y  r
  341.       file=(*p).second;2 j  g* o$ c$ _
  342.       free(file);' q' Q; G2 o- @# z, N
  343.     }) f# o8 J) x6 H7 R
  344.     UpdateFile3.clear();" f1 O2 q$ t) d+ D( S" [6 B8 N
  345.     UpdateList3.clear();5 n9 l' E7 Y5 J; [0 P7 E) A
  346.   }
    ) K% |% n$ J2 [! U! a3 D8 J8 x- R; I
  347.   if(UpdateFile2.size())
    0 D/ ?5 L3 M% d6 U. p
  348.   {3 d% Y' y6 P0 d( J2 q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & B; e/ r7 p; w2 v0 {
  350.     {
    0 \( G6 ?7 _/ A& h, q
  351.       file=(*p).second;
    - Y' X* n7 R, b' Y: \
  352.       free(file);
    3 w- c9 {/ D9 n: x5 j, }& u
  353.     }; p  ^1 y/ o5 t9 [$ y- [4 g; j1 H
  354.     UpdateFile2.clear();! ~8 i) G! u/ I* J& V- o
  355.     UpdateList2.clear();$ h' o! t. ?6 t1 l7 t, k8 x& e
  356.   }0 G9 A' x) @6 o# }
  357.   if(UpdateFile1.size())
    - @$ P. j4 X7 i2 v9 B4 `! a
  358.   {( N/ k2 }! S- ]6 @. q; w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" n' e1 U" d+ Z* q
  360.     {# Q; K- c  ^$ r' q
  361.       file=(*p).second;! ?- {) F0 ^+ Z
  362.       free(file);. _, J4 Q# _7 F
  363.     }
    7 K5 i' s6 m6 O+ F
  364.     UpdateFile1.clear();+ Y+ Q) S/ W7 t3 d8 w0 l
  365.     UpdateList1.clear();
    3 O2 A$ w' I( ~3 U3 T+ ]3 `
  366.   }! L8 G/ [4 h9 ]0 v  e0 S
  367. }  
    - M0 Q9 M* N6 G6 O$ |0 c
  368.   
    7 l) |) Q# w& M1 _+ E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    0 P8 ^4 ~8 `' l' c0 }
  370. {
    & n* W5 S# M& e) U/ n4 `  H) X
  371.   int c;
    0 n+ C% N8 y2 i
  372.   LPUPDATEFILE file1,file2;
    6 N# y8 F1 B1 m4 E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ c( E+ e" I  J, s; s5 M$ e! J4 J
  374.   std::list<CString>::iterator l;
    , o9 t' S" z0 w. d( X6 m

  375. / \8 [- Q( p+ d, l7 h( j
  376.   UpdateLocal.clear();
    8 q0 S7 y* O% Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % R* c9 m0 V5 u* Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 G& z9 ?5 G6 \5 W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( |# J4 y7 d. T+ G; q( U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 u2 S/ @+ d. m% Z5 f% h
  381.   if(UpdateFile3.size())
    5 s% b$ I% E6 S8 k4 \
  382.   {5 {# M/ s9 m* {7 b5 N3 V1 Q8 Y# l! S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! J9 \; ]2 C/ {( t6 ?# q* N  h
  384.     {: @) [2 J* g: n
  385.       file2=(LPUPDATEFILE)(*i).second;2 O' F" c( B& c; y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * v% z9 r6 d$ [
  387.       {% P# [* d7 q8 R; B& C8 C+ y
  388.         file1=(LPUPDATEFILE)(*p).second;
    * ]! `6 F0 {# u2 @) X0 M- S$ ~5 S) v
  389.         file1->vers=file2->vers;4 F/ i+ }8 Q. T5 I
  390.       }7 n3 f$ |$ [4 l+ `( F
  391.       else1 K5 {1 W' Z5 Y8 z" U
  392.       {
    # f/ v% F6 E. `' N) v& J! S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # y" s5 Z0 I2 i  V! c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" B8 z3 ^  M$ ~3 P( G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. }8 |- X* A/ a+ Q' Q) @9 t! M' N& I
  396.       }4 c& F) q9 Y+ j0 Y7 I$ U
  397.     }
    & Q9 z8 B% ^/ m4 T/ V) Q. M  `
  398.   }, e% u% F& }8 \8 x. r6 g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), d% W8 q4 w/ `7 X# K" e
  400.   {- u6 d# z7 r" Y3 q7 {; E& {1 d/ L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : I2 _) A* b% g
  402.     {
    7 K* g/ P3 }( A
  403.       file2=(LPUPDATEFILE)(*i).second;) V7 P, J. z4 R8 F+ B+ b9 i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( ?# c* _9 r) g5 p
  405.       {
    + c: m' M' n% t; m
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 }. j2 q7 g4 K0 C. Y
  407.         if(file1->vers!=file2->vers)* v2 P5 c4 L! E% U
  408.         {
    2 P: w, K3 _9 A/ P3 S: S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 V* I5 \; I- Y! A& O) {$ `9 L
  410.           c++;( v6 `) Z9 U0 T% \- R$ a
  411.         }3 e+ B1 X1 Q1 A
  412.       }
    # r, K& _8 _/ p/ N. ]  T
  413.       else: D3 n7 ?( A2 }* E
  414.       {
    5 B2 H$ l$ _9 t9 k' q: y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 b/ V4 W; A) S2 b9 a; Z+ k
  416.         c++;
    6 v; N) X' y& ~* X; O' E
  417.       }
    5 Z) ^1 [4 e, u2 @* h
  418.     }4 F' ?" w$ D) H) O0 x4 O
  419.   }
    . p- X- V% s7 H' ~  a; R8 V# ~
  420.   unlink(".\\DownLoad\\update.txt");
    , g" L2 _/ V7 p
  421.   if(UpdateLocal.size()) return TRUE;; g0 k# y! K" x1 F# O
  422.   else                   return FALSE;
    + l6 [4 r* @2 W, x& t# z: `
  423. }: }* u, O6 m8 O! q8 H# q/ W# j! R
  424. ! C/ j) B/ L1 C7 ~8 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " G, i" |" E0 T! C% _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / i/ t8 m7 e. b3 }6 j; p& f
  427. / I# s8 d/ ^7 O. p, g' r% h
  428. 1 s: H& s& I( h5 V" t
  429. 5 K0 T1 b( B+ X' R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) `) ]6 U( u4 _8 x. N
  431. {5 Q9 {& c$ ~2 P- G" g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' d6 _* c* n% a" S- A" o! A+ e' X* a# G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 n5 @% V. B5 q$ U3 [
  434.   {! f) W! h; \$ L9 B4 q
  435.     char szLanguage[50];. E  k5 g2 l3 ]5 P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 v- t* H$ |/ R6 ]; l' g7 o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 |. Y& ~0 r, U  Q% g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % L4 c6 D& Y$ S2 a3 b, g; [. P0 b
  439.     else                                   m_iLanguage=ENGLISH;. t6 F% C- d6 f
  440.     char szRegister[100];
    3 d3 n+ k( V+ [3 j# |
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 r4 S! N  k0 x
  442.     strRegsName=szRegister;
    $ r% Y1 o; X  I# C
  443.     char szPatchURL[100];
    & S/ u& r% ^$ r! I9 W1 j. |5 T
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) ]- _* p3 q0 T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / S  q' t: Z. d
  446.   }
    8 M; S  J- ^  W: ^' V; @* ~( x
  447.   else& `; ~& T2 k: S  q0 V
  448.   {
    + D1 z9 f$ H3 I0 i- \4 O1 y, e5 z, R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 u: E# T  p. U  u4 \
  450.     strRegsName=DEFAULT_REG_URL;5 |+ i+ p4 q5 y: L/ `& Q# |4 i  C/ R
  451.   }9 g: i5 o6 L+ q# {* o
  452.   if(GetFileAttributes("hosts.ini")!=-1)) {. d9 \  g6 D7 R+ Y# e
  453.   {
    5 K# K' b, _7 R% |6 x) M$ d. B
  454.     char szIP[50];
    % F# j- A# T4 n+ s5 V: l
  455.     char szDIR[300];8 M# B  o! n/ L  ~' E' ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% F' h' v+ u# M* f+ O  t
  457.     {
    4 v; {0 u" x$ }7 R( ^* g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      _! G8 t" P' B  n- x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 m! ^6 j- k. }  R) x/ W
  460.       strHostName=szIP;  r1 @( a& R/ ?7 N/ k
  461.       strHostPath.Format("/%s",szDIR);  [. s& j! R% Q( m: C! e7 J8 H
  462.     }: q# |$ v, X8 J6 b
  463.     else5 U  N$ W- X! G2 u0 t. [% Z3 }
  464.     {0 A; B: [" }2 {- c9 T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 E, N2 ~8 M/ A. B7 O
  466.       {8 [! l+ L, }" x4 K7 T) f, M" m
  467.         char szLanguage[50];
    ) s) i- ^3 D9 X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + H/ G5 @8 j3 J- t  w6 P2 E* r2 @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : x" l- d1 R1 B8 H, C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 j/ d6 d' _* U7 [8 o6 ?
  471.         else                                   m_iLanguage=ENGLISH;7 n; V7 T- v3 [2 t6 u
  472.         char szRegister[100];
    6 f; @+ \2 i. i- j6 f; ]$ `; G) s
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      m# x8 T3 A' Y% n% w" ?5 d; U% v9 ]
  474.         strRegsName=szRegister;% N: Z* t( B! G" `* z& ^0 _: k
  475.         char szPatchURL[100];
    ) w" B$ e6 G. b" c1 C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % P, N# d6 u3 e9 r- Z2 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' t8 q# r7 v6 r) a/ W3 j+ R/ ?
  478.       }
    / ?2 Z! G# M0 z- C( I
  479.       else
    & S: j6 j7 D6 l) ]* N
  480.       {
    * v/ A; H7 b- v  P* f7 K4 L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 Y. [- K# ^9 p2 x
  482.         strRegsName=DEFAULT_REG_URL;
    8 d+ O) Y  W* h# w
  483.       }
    4 h1 `; c7 a3 F3 O2 x6 k8 e$ f8 X, E
  484.     }2 A+ M3 o. o4 m* u3 v2 V
  485.   }: l) F1 f: k' u* D7 q) T: c/ B
  486.   return true;$ B# V. R7 ]5 f7 e2 I; m* Q
  487. }
    0 N5 m' I7 J% f( ~

  488. , b, F! y* d* _$ g5 u
  489. #include ".\ZLib\unzip.h"5 ?( d) x, `0 m4 D/ W3 j7 e9 M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  w/ T' \* ?0 ^+ y1 t7 H
  491. /////////////////////////////////////////////////////////////////////////////. H" y) L) y- y2 l, r
  492. // CRevAppApp initialization
    : Y( L. j6 H) V* c" `
  493. : N$ M5 h* d+ H& H/ C
  494. BOOL CRevAppApp::InitInstance()
    ; G% k  Y/ q+ X$ O  i$ ^( z7 q) m
  495. {: c; h9 @5 J. N, P- _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! \/ K6 M9 h. g, G6 u

  497. . Z( \3 z7 Z# j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; I! p  `' q9 ], d* G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) }* O6 o5 {: f
  500.   {
    ! e; x- c0 M# r6 t! n; S- s! e
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 {. ?" Z( L, c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % p  m% t, R5 u3 ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' f% F! B6 i: w! |
  504.     {, G, K& k2 P$ e# m0 ^6 e( L0 @
  505.       strcpy(szPath,szPathTarget);
    ) l+ I( Q* }1 p
  506.       SetCurrentDirectory(szPath);* w7 `8 r1 u- {) c2 G9 {' j
  507.     }& a7 j4 {" W# G' E: Y! b8 y$ r+ a8 r
  508.   }* t. z6 i1 a- P/ \" W
  509. #ifdef _DEBUG
    % \9 A; M) C7 }. H) E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( ?! e: \* j  R* ?
  511. #else
    " H6 E+ p% }; J0 S3 ]6 u8 D# t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " b5 p5 R8 s- E; L) r$ O; f
  513. #endif
    - X7 D$ q0 ~: a4 N( A
  514.   {
    $ n+ U6 ]' v" k( x; N7 A1 ~* `
  515.     char tempFileName[MAX_PATH];
    4 j' b# {  p) V* Z  u
  516.     strcpy(tempFileName,szPathSource);
    , F6 P5 p% [" K
  517.     tempFileName[strlen(szPathSource)-12]=0;; n* o' l% r7 T7 K9 J' y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: a$ Y$ Y' G. v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' Y" F  g% \2 ?9 W; B  P. j+ I- \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( \8 ]" D$ ?0 |1 Y1 v
  521.     return TRUE;, ], v4 N4 w8 F$ m3 F5 h7 ?$ S* V
  522.   }7 K- A. r' G9 W! J9 d
  523.   // Nuke 0118: Delete run.exe0 F7 G6 ^. W( z7 Q& }: W
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );2 M. B; b$ b  l8 o. X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : Y1 X+ p: Y; i6 I" M  ?( \
  526.   if(!ReadCfgFile("Config.ini"))
    , Y+ e. h* d' {3 M5 q; J
  527.   {" D# }' W/ d8 Q* B+ z' s9 p) f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 _# _/ m* x/ n$ e# [2 i
  529.     return TRUE;
    " I1 I% L" S: i  Q* ~* U% e
  530.   }1 n# r6 ?% w8 F1 Z/ w! F# F8 c
  531.   HANDLE mutex;
    5 o- S' ~' c# W4 R8 G$ r5 r( r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 F1 C# i9 W. T1 C* \, |( ?: G: c/ j
  533.   {  |; M+ Z7 {5 V# R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      A! Y$ z  O3 g: O. p6 y
  535.     {
    3 ~6 x) x3 f. K- \3 |6 ~
  536.       CloseHandle(mutex);
    & g# J/ Y0 T4 y# u. B$ e9 O; I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 [( [2 p6 j' U" {$ G" F. {
  538.       return TRUE;
    % f9 T/ ~# y4 e) f
  539.     }& R  ^; _! {: F6 s& B) n* Y
  540.   }  : {/ K* \7 V5 R
  541.   CloseHandle(mutex);
    # j* p+ d: X' V* P/ ~
  542. 1 |1 ~6 {1 `9 Z; s0 u% w9 y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);6 }7 X' @7 Q" F- x

  544. 4 u8 |/ e/ t& k% e
  545.         AfxEnableControlContainer();
    * e4 r: x; H: P5 a$ d5 M

  546. ( x0 c! s( [& w
  547.   bCanUpdate=FALSE;
    1 p/ }, S1 }8 {6 ^. V) k
  548.   dwStartUpSteps=1;7 P, }8 ]% V& ]7 s3 ^
  549.   dwProgramState=AP_NOTHING;( p( k  i. \8 o& l7 H

  550. 5 R! |; w$ Q3 S. i; P/ `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 z% i" @2 X! m9 c# E2 p' a
  552. . |: f/ H0 f. M5 ^) Z
  553.         // Standard initialization
    & l  q* N9 p) i5 d
  554.         // If you are not using these features and wish to reduce the size
    $ Z( M' A% Q* S' s/ R, A
  555.         //  of your final executable, you should remove from the following
    $ N- g" l2 n  U
  556.         //  the specific initialization routines you do not need." c" z& b  ^2 ~, o0 h9 Q8 U
  557. 6 J! D/ y/ t/ `
  558. #ifdef _AFXDLL; ]4 P9 H% N2 M/ v# m' [5 `8 A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ N+ P, Q0 r: m' X! w, e7 e" U  b
  560. #else$ Y2 y; {4 y+ H3 g1 ^! ?' Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 g+ M  ]6 r( k+ n
  562. #endif
    ' z, ^( X8 f' w

  563. 4 b7 T& m. o) C  l3 {, r
  564.   dlg=new CRevAppDlg;7 E" t& {5 ~* Y$ }
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( Y2 Z7 r0 n* |2 H/ H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( g6 N# ], M2 G+ p  {2 c+ q
  567.   m_pMainWnd=dlg;% {" K- ]3 Y4 I+ n$ T

  568. # R% m+ t  H, Q9 K6 _4 B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    & m. F. C4 ^+ ?6 [% |- A
  570. 2 P9 e2 r' U3 Y) _$ N
  571. //  GdiplusStartupInput gdiplusStartupInput;+ ~8 G! f, m9 M) q. d/ f
  572. //  ULONG_PTR gdiplusToken;( b3 P8 j9 |9 b* g' q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 g6 [2 s8 T) H/ @% T. A& Q( J

  574. 4 M. o, w" z0 v
  575. //        CRevAppDlg dlg;
    1 n  u  f5 [8 T; n& Z, q
  576. //        int nResponse = dlg.DoModal();8 W+ D% o6 S. M' L) q( J) d* f) c
  577. //        if (nResponse == IDOK)% }+ L" Z! v+ p1 Y8 M! l
  578. //        {9 i& U4 Z# j8 D  C# C9 H+ \
  579. //                // TODO: Place code here to handle when the dialog is6 d/ W7 C( D3 D9 O  a4 b. [* q
  580. //                //  dismissed with OK
    6 o; E1 F2 r- F( @: ~
  581. //        }) M. ?! z2 h( w+ v" _: I$ a0 I
  582. //        else if (nResponse == IDCANCEL)
    * d( j8 K1 m$ V* z  H
  583. //        {
    1 e; D9 y4 L- E: ?4 @+ L* S" R
  584. //                // TODO: Place code here to handle when the dialog is
    0 L+ h* f9 {4 z  t$ ~
  585. //                //  dismissed with Cancel' D' U, d* t1 f& |" B
  586. //        }+ r/ _* }0 o4 o  j4 z
  587. 8 l$ O' a! b) T' Y2 F; S
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 y7 V8 Q0 Q( C/ `3 K5 v7 A0 \
  589.         //  application, rather than start the application's message pump.
    + O) \$ j  D+ Y' e1 T. Q, g3 f
  590.         return TRUE;
    0 |% x$ P! u8 ]8 N- {$ u  e
  591. }/ T1 K( T9 m7 w7 i) @2 y& S
  592. ( ]1 D1 A6 J( ~+ i/ x$ q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)% a* g$ G9 U+ E' K/ ]
  594. {; L: m4 e9 |7 _" C$ j1 U, b
  595.   int i;- U1 y, b" z8 ~7 j2 ?1 A- d
  596.   char *szRet;3 u9 w3 o: I1 Z# [5 Y; @

  597. % V; C) r- B! Y7 A* n9 @! i& m
  598.   if(pSource) { itoken=0; sztoken=pSource; }! f5 X4 a! j6 P3 E( R
  599.   if(sztoken)
    . r/ q9 k. q. X- J+ G
  600.   {
    ; m# h( G5 [0 c* H+ {& A9 w
  601.     szRet=&sztoken[itoken];- }7 g7 `" G( y; j
  602.     while(sztoken[itoken])% B  _+ A; H- F5 }" A" b
  603.     {. m9 m2 c$ p+ ?; ^
  604.       for(i=0;i<(int)strlen(token);i++)
    " I# c" q) [4 d* `. x
  605.       {0 {# I* u+ o3 j- D
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 r9 R+ b9 l" `7 C9 A0 n( F
  607.         {
    5 P: y3 c9 i& t( q$ k
  608.           sztoken[itoken++]=0;7 q. e3 n: c; W4 S! f
  609.           sztoken[itoken++]=0;
    & R8 o$ y3 x3 g& f0 U
  610.           return szRet;7 p" M7 h2 |, l3 a0 N! Y. h
  611.         }, t. A- ~8 n; ^: S1 q9 i
  612.       }
    5 C" U; `; j8 T3 n2 t
  613.       itoken++;
    1 J: p, S# N3 g5 L  u0 m, k6 r8 t
  614.     }
    6 \3 f# q$ {9 v$ r; Z2 |, z( }
  615.   }
    7 }# e+ a# @. e% m, _5 ?
  616.   return NULL;2 R, }- C. j' j% N3 t% ^2 o2 K
  617. }
    # ]/ k5 P& ^% W% Y
  618. / L2 R- V1 p3 x7 A
  619. void ProcessProc(long Total,long Current)
    1 b& E! J4 T: _0 \' x
  620. {
    ! t! V; Z) F4 H5 V1 |8 E. ^
  621.         MSG msg;
    : I3 H9 c( C9 J) i3 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 R3 E1 c5 O% ?- r) Q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) s8 |' O8 t! _+ K( Y5 x" m+ L; b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) V5 A4 G$ w; u; _
  625.         {
    % d5 N# q% G5 C9 O! \
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & ]3 Y1 e7 z' e1 z9 d; f
  627.                 {
    6 u, F% y6 m! X# J: `( P, L
  628.                         return;' K( M5 n6 v" i
  629.                 }
    4 r! V1 _. I2 }4 Q! N: U
  630.                 TranslateMessage(&msg);/ E/ Y- j1 G9 {+ D4 ~
  631.                 DispatchMessage(&msg);5 {: V1 c4 P. u. e+ Y$ y; c% _
  632.         }       
    % j; q0 W& q/ @6 k! Q* ]
  633. }. u; P1 n6 h. B# N+ d& q) V% J
  634. " q+ z; {' W( C7 a
  635. BOOL bFirstChar=TRUE;
    ; M- s$ _2 S# |: p
  636. 5 H3 e, k& ?7 F9 ?4 z8 p4 P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . L8 @0 L. r" c) ^5 ]- K
  638. {
    2 B- k! r/ R& V  e- f
  639.         // TODO: Add your specialized code here and/or call the base class
    ' H2 p  a  n( g/ b
  640.   switch(dwProgramState)
    ( h4 J* [1 e" p# p6 R
  641.   {
    0 a- f# {6 S* ]4 X+ s: ^* k, G
  642.   case AP_NOTHING:
    3 Z5 I1 o/ z3 i5 b
  643.     switch(dwStartUpSteps)5 B2 {+ ^+ f" y7 V: b0 J1 R( Q& v
  644.     {8 U& r' L3 h, j; F0 P+ A
  645.     case 1:
      W2 F# [1 |5 y  u1 x# m9 M
  646.       {
    1 }9 s1 w- F5 V$ _/ M) V+ c, t
  647.         int i;
    - H" b# d+ ?7 S3 m; V( w- X) {- G
  648.         CDC *pCDC=dlg->GetDC();
    5 `! F- f) r  t2 }' h+ j3 e
  649.         HDC hdcwnd=pCDC->m_hDC;2 @, k4 y" L# x3 y4 F4 a6 h
  650. //        Graphics graphics(hdcwnd);) R# r7 ^1 u  s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 @0 |9 B1 f9 X# l' N. d% ~! A' Q. f
  652. //        INT iWidth=bitmap.GetWidth();
    ) Z& f3 I  p: f8 j$ \
  653. //        INT iHeight=bitmap.GetHeight();( T. H4 E+ R4 V: Y  L
  654. //        Color color,colorTemp;
    ( f' Y8 C6 X  c: W) x% l
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)6 Q, V+ A' J- p8 R' J
  656. //        {% v9 l$ o$ U8 f9 ], e/ }+ t- {7 r
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( Y4 u2 t# Z- t' k6 E
  658. //          {" i, T# d- F% F" c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ; \$ }7 C, H5 {! l; y$ z9 f
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 b, b8 ~2 g3 z( b# D) b( {
  661. //              (BYTE)(255*iColumn/iWidth),/ e5 `/ d5 C' {
  662. //              color.GetRed(),1 ^2 `0 V# N/ A3 A4 B. Y/ A. N+ g- `
  663. //              color.GetGreen(),9 N7 N/ p% C! V$ p& s; t
  664. //              color.GetBlue()));
    8 J0 ]6 _! j; H& o0 q4 V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' L1 r+ ~0 f! o1 s, t4 q
  666. //          }: J1 W0 E# _7 U' Z
  667. //        }; {  E1 K7 d  w1 h  W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " l6 ]$ `9 w# t; |$ _0 ]0 P2 x2 C
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% n! ~3 I; @+ B; Z/ B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 H5 H* g; w6 D- p6 M/ R
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 b7 X4 R% s/ C% B# |  m$ G0 g/ q0 i
  672.         for(i=0;i<240;i+=8)
    # A  G9 p/ X4 \* I; E
  673.         {" M  x9 l) A# d; Y# b6 D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' O5 K% f8 j% y5 l; E8 N+ {
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 T0 P* Z0 p: S4 _) J# X7 h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( U+ g# b  P" F% z
  677.           Sleep(33);0 r  u( D& j8 m4 K0 k' ~1 h. I
  678.         }
    4 c2 y% q9 x1 o; k# u' p1 F9 R: {
  679.         Sleep(1000);
    $ M5 ?$ X' a3 q; l8 N) W9 M) }
  680.         for(i=240;i>0;i-=8)
    0 e# U8 U( W- ]7 Q
  681.         {/ \% L- a' \7 d; ^( J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ X: j$ O8 A6 C% G4 T2 J0 f: r  [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 R  y: h6 `+ L, O& f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" w3 K1 b7 a- _! o/ R* D) f
  685.           Sleep(33);5 G5 C6 ~& J8 j9 n1 q) U$ E: f
  686.         }
    ; f4 z" e* ?8 y4 z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! a( }6 R5 r+ i( j3 d2 t3 P
  688.         dlg->ReleaseDC(pCDC);4 E3 y2 B- n2 e9 H6 m( L
  689.         DeleteDC(hdctar);
    0 Z$ o4 ^: ~/ l2 M- U" t
  690.         DeleteDC(hdcsrc);6 q8 |, ^2 @! p7 L, r
  691.         DeleteDC(hdcorg);
    ) v. h  U9 Y6 U
  692.       }# P% m" g( m/ F  f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);8 D0 ~4 T. W* f- O1 y5 p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ g; O& v& m- |/ H% n; b
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 C$ q7 u% L# |, s) `  i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( V: \9 e8 Q. x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 i0 t/ y2 [9 w3 p) ?8 z
  698.       if(!Dn.Connected())
    ' ^0 b$ p) a; m. z
  699.       {2 ]2 L: m( c; k& D7 Y
  700.         dwTotalFiles=1;
    * `1 k8 g  w4 ]" E! b- N
  701.         dwDownLoaded=0;) n. O8 O+ Q# g- b) d8 w! p+ t
  702.         bSilentStep=TRUE;4 l3 {1 r: \, e2 I- z, o/ p
  703.         bCompressed=FALSE;* ~/ z" g( y& o5 o/ g" o- w9 `
  704.         strExtLocal.Empty();& B7 }! U! s0 i- m
  705.         strFullName="readme.txt";
    ' l, c- `) o" j# q0 j# X" P
  706.         dwProgramState=AP_CONNECT;
    + ?  W# d) S  N) k% b' [! D& n
  707.       }
    6 f% P1 |" w& ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - V3 p' l  h" c% J. R  M% D
  709.       dwStartUpSteps=2;% L; m* \/ G' w1 K7 y* q% t
  710.       break;
    ' o/ F9 h' N/ n6 V# d
  711.     case 2:
    # `, }- a$ e. P0 w( p) J; _4 o$ \$ i
  712.       {# V7 h& ]& P9 H' V' B! N4 J" P
  713.         int iEOF;
    9 L, i* J2 b* i, s3 b7 B& b
  714.         FILE *fp;# C. A; R4 I4 z6 |" T
  715.         char szString[512];
    9 ?) c0 U: c( h' N/ U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / e/ q5 g3 a, K. R/ j
  717.         if(fp)
    $ O1 @& _% o( T2 i9 A) \# N
  718.         {2 m2 ]5 W3 P: w# o
  719.           do
    2 f. q7 L. f2 N. l+ ?
  720.           {
    , m5 m# P+ G/ P$ E( I  J# K. f
  721.             iEOF=fscanf(fp,"%s",szString);
    ) \: @* J* B4 m" M( J" b& n+ V
  722.             if(strlen(szString))9 ~1 U' s1 j1 ~6 R7 T
  723.             {
    8 M) E/ r$ x; f7 D/ V' _- A
  724.               if(bFirstChar)  y+ x) j  @3 q  |: ]$ u  e
  725.               {
    : p# u% v1 h9 V% {3 `& v/ z
  726.                 bFirstChar=FALSE;: J4 L* a! K2 [1 ?1 v
  727.                 bConnectIsBig5=FALSE;3 ?2 H3 I) M( d1 `1 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 g2 ^; n6 p5 l8 u) I; \' R
  729.               }
    4 d+ ~! a5 j5 y# M: U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 f7 d9 ^* s0 j; p9 D2 S3 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , ~9 M+ J, e0 ~+ @; M8 C; Y
  732.               dlg->m_ListText.AddString(szString);; k+ w1 e+ k( M0 ~" o$ K5 e. L
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 h0 a$ x1 ^' z
  734.               *szString=0;( s  G1 G4 ^( r& D* G; i+ e
  735.             }
    % B+ H: u( @; t5 X* l
  736.           } while(iEOF!=EOF);
    1 ?" t( H: }: n/ q1 Q
  737.           fclose(fp);+ c* ^6 [/ o" z' l. S6 O
  738.           unlink(".\\DownLoad\\readme.txt");3 r: N& z1 c; a
  739.           dwStartUpSteps=3;) Y; T* U' D! O2 n5 _
  740.         }
    / v  f- V$ |! f, h2 Z, g2 {) m
  741.       }
    ' [2 J6 {8 V  I; `4 P
  742.       break;! s# y/ I4 l7 Y* O' r5 r+ g
  743.     case 3:
    9 u" ?% C, c0 Y( z2 Z( P
  744.       if(!Dn.Connected())
    ( u7 D0 m6 T! c* ?5 ?- }+ G
  745.       {
    1 \6 D- H* H" s( y' z. C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);9 R& F3 y  J) W$ z
  747.         dwTotalFiles=1;% m8 i- q1 T+ V' B$ k5 H
  748.         dwDownLoaded=0;0 t2 w5 l) C4 g
  749.         bSilentStep=TRUE;
    & S" s! E3 a' U  b; a7 \
  750.         bCompressed=FALSE;
    1 ~. W# g) b; x8 N' n
  751.         strExtLocal.Empty();
    * p: n" u4 ]6 l) ~/ R4 l
  752.         strFullName="checkversion.txt";5 l6 Z  i5 g- @8 W
  753.         dwProgramState=AP_CONNECT;
    : G, J; J$ E, `8 Z: U* [& p
  754.       }
    6 d; e2 y) U1 `: R
  755.       dwStartUpSteps=4;
    $ S* [) M5 `& z! l7 v- N+ {
  756.       break;
    + a4 ^% Y9 e+ M, O; d
  757.     case 4:
    6 e) f* b  e8 v4 b& q
  758.       {
    6 B: X; ]  M) k3 g1 v& a# u* @
  759.         FILE *fp;% H8 R4 d; [) R/ i  Q7 t3 }
  760.         char szString1[128];
    ) i7 K0 h5 y% S. R" ^
  761.         char szString2[128];- g6 M, G9 F; F4 o. d- H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% X6 n7 {3 }( z7 ?2 t
  763.         if(fp)
    * ~' Q$ k! i2 }" F
  764.         {
    ) @9 l+ \( P: ^$ A# ~. X
  765.           fscanf(fp,"%s",szString1);
    0 K3 [; A. j8 o! O: B
  766.           fclose(fp);1 q' W6 y( x6 Q- M& |
  767.           fCheckVersion=atof(szString1);  k8 e9 i7 [0 {1 G) b  h0 }- A
  768.           fp=fopen(".\\checkversion.dat","r");# Y4 T& ]; ?  b+ a- e
  769.           if(fp), S, Q$ h/ w4 [' ?. H+ s
  770.           {; v; s3 k+ V" U) ?& B0 U
  771.             fscanf(fp,"%s",szString2);3 e: \+ z. a$ M$ B0 i
  772.             fclose(fp);
    7 }/ f. ?  t# ]5 K) |6 h' ]& O/ \
  773.             if(atof(szString1)!=atof(szString2))
      y+ g/ Y( u: [6 A
  774.             {
    0 u* A' k" D, p3 `
  775.               if(!Dn.Connected())
    - Y! d6 `4 l7 G0 S
  776.               {
    5 t: j* l: U1 D+ ^5 q! e
  777.                 bFirstUpdate=TRUE;
    5 P0 m8 a  S! l% ]  c  `$ ?
  778.                 dwTotalFiles=1;0 U1 C9 n! w2 G
  779.                 dwDownLoaded=0;' J7 a8 u# |! D9 ~
  780.                 bSilentStep=FALSE;
    1 _0 h) e7 E) B6 ^+ g% ]) T
  781.                 bCompressed=TRUE;
    ) V1 f( i; @5 N6 W) C: ~* U6 c. _
  782.                 strExtLocal=".\\DownLoad\";! p! Z- Y/ J" @; V6 S
  783.                 strFullName="update.txt";6 P2 k( y. M3 |( C5 F
  784.                 dwProgramState=AP_CONNECT;, Z+ }" x# w' j( {) T: u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 t3 E" D2 z/ x8 z: M, Y4 H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; n  G8 {8 W7 t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; |: J9 [4 B- E) t+ ^

  788. " H1 b4 l0 j; y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 a# r8 a$ o6 t& T) L
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / X8 P% j; G3 A0 t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; K: W) A) ^* Z" q
  792.                 {( j) h* d, {, e/ M3 h" |
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 m3 W, G9 i) \1 ?% S" d: j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' V0 w* b0 K  h8 B; g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 c$ {. N/ {, Z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ]! K; e) G# S

  797. 8 i* C( X2 w! u* ~) E4 _: E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( G( L6 L: \" P% M$ b! X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : J5 ~5 M) y1 p! l8 m7 z% p; F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 F" m* r/ j* p- K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( e& N/ O% ]4 y1 E6 b
  802.                 }
    + k! s( c, r& }3 K0 Q
  803.                 dwStartUpSteps=5;' F$ C" j8 r" K' |2 x
  804.               }9 }6 ~6 S% g$ Q! t) S7 I
  805.             }$ `9 v' {: ]6 H- E( {
  806.             else
    8 \/ }( A2 Y" i( Y1 s8 ^
  807.             {
    7 H& ^* d6 |9 f* C+ p; K; f
  808.               unlink(".\\DownLoad\\checkversion.txt");$ m7 |" k; K4 ?
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 Z3 u0 K$ n9 f( t7 B# Q5 S0 L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 e* r% w; J' U2 @! C) r* t* x& i: [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 J, B! a7 E2 i; `( z) M
  812. ! }" j1 T0 U" m, k4 Y7 ^8 \, C! m' x1 k
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 I+ A" H+ z. `6 M* F
  814.               dwStartUpSteps=99;
    ( N2 K1 e2 h/ \, R, c2 n
  815.               bFinishUpdated=TRUE;+ j6 b+ t6 M6 Y) V9 t
  816.               bCanUpdate=TRUE;* b1 }$ M% M& V, g& A
  817.             }& u+ I1 z  |. }$ S) `6 O
  818.           }
    . `9 Z" [0 R$ c: Q: r
  819.           else$ I7 R; H) [( W7 b( g
  820.           {
    7 E, ?; r* |: s, E; y8 j
  821.             if(!Dn.Connected())5 U7 ^3 }9 d, B: s0 x
  822.             {
    8 d# y0 S7 {3 m6 S; ?$ q% Y& Y) }0 o
  823.               bFirstUpdate=TRUE;% O' ]6 h- [7 o. _2 E2 r
  824.               dwTotalFiles=1;
    7 L% E! Y. i3 p! D, F4 T
  825.               dwDownLoaded=0;
    4 n4 o2 {/ Z& {  [" d
  826.               bSilentStep=FALSE;
    9 U/ x/ `' d; ~/ j. s0 `' o  j) b% N
  827.               bCompressed=TRUE;
    5 c; U) `- i8 w3 O# A2 P  {
  828.               strExtLocal=".\\DownLoad\";. G4 _. S. ~: n
  829.               strFullName="update.txt";
    7 B5 P8 ?) x. y
  830.               dwProgramState=AP_CONNECT;
      b6 c, r- z# r; W
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# v5 V6 Y6 X; Y9 K( {+ |- ~6 d
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 V$ ]. [4 N/ D9 G- R
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 I5 ^: u. I4 s1 M/ q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 i' [) s* ^" P
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 Z2 a" t+ Q7 `0 \9 g9 J5 V' U) l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 N0 a7 ^. O* @  i, Q  E0 z! Z6 F
  837.               {
    ( R' F, L3 W' c$ z9 e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 G6 E1 [. L# H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : ^) Z7 o2 t  @8 r6 R7 L1 I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ ^: n" x- C2 P- t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / g, @8 E7 _3 ?8 R9 k
  842.                   c& K; i6 w% Z- G( v8 H8 s
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ n. l) V9 t! }% z0 W9 e
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : Z! F0 T9 o+ k" Q/ ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( }" @' l: T' D7 V* `5 `: @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 u3 t+ @+ T& W
  847.               }
    ! H. z9 J- f  Y9 A
  848.               dwStartUpSteps=5;  v8 I3 F0 l3 G& D  _5 |
  849.             }
    * E$ n3 z- j# e  \3 K! z
  850.           }
    + o/ u. F- Z& p0 C" O
  851.         }- d5 V/ L( P3 `
  852.         else$ C/ d; t' U5 P$ M, q
  853.         {
    5 Z. v6 F* A1 X8 b9 _) Z! ~
  854.           dwStartUpSteps=3;. a! _9 _9 ]5 E/ \! |0 |
  855.         }. {4 o3 W0 ~9 ~2 m% u- j
  856.       }% g! g" }! W; C7 Z: E7 ^7 {
  857.       break;. i: q- {; A' f$ |5 p' U
  858.     case 5:
    ! k3 n3 n4 ^8 B. K5 ?) w$ B6 C
  859.       {
    2 u9 t4 F, l) W! q) |0 k* C# D8 }. r
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- Q  o" t: W! d: o& ?
  861.         {. J& \3 R7 r  o5 C4 E
  862.           int opt_overwrite=1;
    : h: d5 i( d: |7 W- C$ T8 ~/ H
  863.           int opt_do_extract_withoutpath=0;
    : A5 W! n1 z: x' v
  864.           unzFile uf=NULL;
    * d- Y0 F: p/ V" t  x' }3 L

  865. ( A+ k% s4 o3 ~9 e% G
  866.           uf=unzOpen("Wsa.zip");
    ) S5 J: i5 A" t' S: S) ~, Y2 G
  867.           if(uf)7 |/ N% F+ Y6 |* E- \3 P0 o+ t
  868.           {
    . K0 K4 [1 ]$ q5 U5 m- y" Z" u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 n% P& h+ {; ~& `" ]' d: V, z
  870.             unzClose(uf);
    9 m- Z9 c$ K+ L, A2 G  S" w
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 g  w& ?/ K3 I! a
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) x$ C6 m* V, J/ f2 r. _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ c3 u0 I& W8 a
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* N  s5 C$ m. C3 o
  875.           }+ I* w7 c  P. e+ y4 A
  876.           DeleteFile("Wsa.zip" );
    / M! f: {: N* u" [5 N0 k( s
  877.         }
    8 f& p9 g% V6 H* G  y1 E

  878. 1 n9 p/ N3 w0 F7 C8 `3 p( L) b* M
  879.         if(CheckLocalVersion())) h- v, F4 K  M& K# o
  880.         {
    ! A- ~- `( q, i6 d9 e: q8 x4 I3 j
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    3 [2 X* M& H4 h- w, u. h) ~
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");4 P8 ~( ~) c: d1 U3 m% c# I/ x! n
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 x: R. F8 |# k0 M* z% R9 V, P
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 x7 x( s' _- ^0 {4 Z% g
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);' g4 s3 A2 t6 P) g7 x. M, W
  886.           dwStartUpSteps=99;0 X5 @1 e: p+ s2 b4 v: o/ k. h
  887.         }
    ) s$ I+ G' V, l: g# e
  888.         else
    2 L! U' G) G; a' {
  889.         {
    * R9 [$ u* q  t* K) O$ }
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . c/ y7 L& }% Z- n9 ^6 a2 y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - w) q  z  B* C) h* A4 c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    - j' S1 j# m7 r4 f& Z+ V! A8 w' n

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

評分

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