找回密碼
 立即注册

CSUpdate.exe源代码

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

( r7 ]  o- C3 ^/ u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 `' k1 p8 C9 c4 v: c
  2. //; A" b$ R$ X# r8 Q* ]
  3. 6 l" d  j0 q( ^/ q0 U7 o
  4. #include "stdafx.h"
    & B/ ^( m' ?  B4 v* J

  5. - x: ]$ [7 e$ V1 ]8 K! v  R& O
  6. //#define UNICODE
    ) h4 l% }* n/ w1 q
  7. //#include <gdiplus.h>$ S7 f8 ^. n! a9 S: V4 ]4 i* W+ |
  8. //using namespace Gdiplus;
    ) K! H( e$ @/ i$ `" b+ O+ [( f2 h
  9. : D  R' G9 |8 h/ L( Q( V: d
  10. #include "RevApp.h"/ p3 o: C* ?9 G. ^0 b7 J
  11. #include "RevAppDlg.h"
    5 s, Z8 Q% v9 K+ B2 I
  12. ! ~& x. v6 [+ Y3 p
  13. #pragma warning(disable:4786)
    8 ^4 Y+ V' W6 R3 v" [
  14. #include <map>, s6 n% t  u- H7 q) d  e, P
  15. #include <list>
      ^. q/ C8 v, [1 b9 O
  16. #include <direct.h>
    % {% R, }6 `' M+ l6 E! F0 d) X
  17. 3 L6 S* a, B8 M0 B5 s; M/ K2 v" n
  18. #ifdef _DEBUG
      V- x- K9 _+ L
  19. #define new DEBUG_NEW
    6 H7 T$ ~8 B8 O7 O% G6 l7 ?+ p% S; `
  20. #undef THIS_FILE! c. {8 K* Q) R9 }
  21. static char THIS_FILE[] = __FILE__;
    / c6 Q6 p- w; Z9 Q+ r2 v
  22. #endif
    / W1 i) e( `/ A
  23. #include "SkinResDef.h"& M* p: r  L/ G) U$ ^. \
  24. #include "ChangeBG.h"
    9 ?) F, L' C8 u
  25. #include "AFXINET.H"0 I/ G6 c% H" T0 H( R

  26. 4 G! e1 S/ f- G
  27. #define TRADITIONAL_CHINESE 0
    9 z; e7 P7 o0 z+ V6 `3 r) ~- O
  28. #define SIMPLIFY_CHINESE 16 H: V  Y# X" p& l0 q& H
  29. #define ENGLISH 2* V" G; A* R6 z7 Q. E6 U5 J* J
  30. int m_iLanguage = ENGLISH;
    5 V' I. x% c& _; y
  31. /////////////////////////////////////////////////////////////////////////////+ R: L6 J0 C: B& P2 o6 _
  32. // CRevAppApp: Z$ E) N% u. ]: ^6 F  B
  33. 2 C0 X! L5 V: J! L
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); t. j% s$ e1 u$ w& y
  35.         //{{AFX_MSG_MAP(CRevAppApp)& A% u0 J* g* }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% w" {' {1 d2 K+ r! t2 |, {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 m' V1 w7 H% u( B+ X. e/ @# m
  38.         //}}AFX_MSG; o5 _+ a3 m6 @: n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , }+ R, E% Q1 `0 [) q  W, K& s
  40. END_MESSAGE_MAP()
    9 `* k3 P- q5 Z0 j# E9 Q& K- j
  41. 8 |2 Z' a2 h9 A* D, ?; g
  42. /////////////////////////////////////////////////////////////////////////////5 W/ p) N  f9 d! y9 k5 |
  43. // CRevAppApp construction
    ) \/ d/ G1 e. h
  44. 4 Q# R' [  H/ A% k. g
  45. CRevAppApp::CRevAppApp()
    . ~' y7 H) }( I9 b9 r# J8 G; ~
  46. {
    - p" |+ ?) R) ]+ G- p3 j
  47.         // TODO: add construction code here,
    ' G3 {, q9 c' V6 e  z1 ~/ Q
  48.         // Place all significant initialization in InitInstance! J" m" }3 a3 Q
  49.   bDisplayIsBig5=FALSE;
    7 M, V+ c' l: B$ u& V+ A7 M
  50.   bRestartUpdater=FALSE;
    8 N2 B* y" p- [9 P
  51.   bFinishUpdated=FALSE;# ~8 e% z% E& ?! g; p8 }' a) o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # b; `0 \! w/ u! M% z$ L" b
  53.   InitChangeDataBig52GBKS();- D: S- A; U* m5 m2 @5 v' e% Y
  54.   InitChangeDataGBKS2Big5();
    % Y$ d& ^9 S$ c+ Y4 g2 g: {
  55.         //
    : v. j/ |4 |: K1 ~' q) j6 J# e$ h( r0 h
  56.         bClickRunExe = FALSE;$ y0 _) P9 k2 P+ f7 [% @0 I/ z% h
  57.         //. t% e& t7 b  L2 _4 W
  58. }, o$ d9 S8 X7 v3 ^6 d

  59. % D8 ?' \2 Y3 _1 I% m0 ~
  60. CRevAppApp::~CRevAppApp()
    , y% G' S0 w; S  w0 R
  61. {  c# v9 X; i! {) L6 G0 T
  62.         // TODO: add construction code here,7 F; D! X& l6 m- Q! P+ I
  63.         // Place all significant initialization in InitInstance' D3 s$ B4 ^/ K0 ]
  64.   EndChangeData();
      W" J$ f- i* ]5 \4 K$ i+ E
  65. }2 l4 F6 v6 }/ j

  66. . ~8 ]' r4 V' c8 D
  67. /////////////////////////////////////////////////////////////////////////////) P  `+ i7 {6 j1 h" R
  68. // The one and only CRevAppApp object
    ; R" C/ ~& O& x& ^

  69. $ p" N7 c1 ^! K! ?* _* \( ]' f/ F
  70. CRevAppApp theApp;
    4 r9 Z; C; b/ g6 z6 i/ m* n

  71. ! C3 o. c5 [5 t/ I9 Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* e1 T1 ~% f% y& {$ L# c9 W
  73. {
    ' o/ O5 G% B# T) A6 U5 @
  74.   int iEOF=0;, p  H$ I  M5 W' p" J
  75.   char szTempName[MAX_PATH];+ |+ u' _8 W- r6 T, S+ t$ e$ v+ n) a
  76.   *szFileName=0;/ i8 r0 e2 Q' `# B
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 v$ G' s( }# W0 j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , w; Q( y4 I; x' _8 d, O$ _- o: p
  79.   {0 D& P0 T" @# {! @! Z; W) E
  80.     strcpy(szFileName,&szTempName[1]);
    ; R0 o8 S! u5 K; c) g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 I  h/ |- D  H4 b! i$ e) x
  82.     {. y; c) Q; e- C& B) H/ h* [8 U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * t) z& m3 ?' J8 B+ ~  P4 Q% _: h
  84.       strcat(szFileName," ");
    : C/ g4 o7 z9 {/ w
  85.       strcat(szFileName,szTempName);. \" y% q* S9 {2 L1 Z: u. ?% u
  86.     }. e& u$ u; x- o( \1 T) _  J7 H
  87.     if(strlen(szFileName)>=1)
    ' v: `  ~  x$ l' o- P; |. V- c6 U. @
  88.     {( ?8 e3 \! \6 [
  89.       szFileName[strlen(szFileName)-1]=0;
    * o4 u9 u* S) {6 p+ L
  90.     }
    8 v2 F0 c4 C$ s+ }
  91.   }
    , L7 k5 z; `# X- I3 `$ _. @% a+ |! Q* t
  92.   return szFileName;
    9 G# F5 G+ T* H4 i* A) o1 h
  93. }
    + F, L2 f! F, D5 L5 e5 G: R; ^9 s

  94. 9 L. c. k4 r$ t# Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  n- O2 H0 p7 Q0 {* w
  96. {" p1 P9 s: p, U6 {+ n: k
  97.   FILE *fp;0 I; S( w. j+ K
  98.   char *key=NULL;
    7 d5 I1 A/ N* m
  99.   char version[MAX_PATH];
    * h  z: ?3 Q3 E$ n
  100.   LPUPDATEFILE file,olds;/ D5 p5 y5 i" ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & U" j1 J) C$ W% W
  102. 8 `. H  V; j$ C' q2 h
  103.   UpdateList.clear();
    / h6 e' E9 @2 E/ i
  104.   UpdateFile.clear();
    ; w6 u. B  _- V+ c, r% K* M% a1 m, E2 y
  105.   if(GetFileAttributes(filename)==-1) return false;# f( T$ J* m5 K  Y0 Q" g$ }9 U
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + T. U7 B5 y/ c1 i" H7 ]
  107.   fscanf(fp,"%s",version);
    6 H7 a- Z9 O! \1 o6 ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & ]& j% G6 n; o" M9 _! h6 P
  109.   while(fscanf(fp,"%s",version)!=EOF)& E1 s2 I2 j9 E! P; v/ u- b
  110.   {: D: E) {  T* N$ F" l8 q! [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 d3 m) E" I$ b9 S
  112.     fscanf(fp,"%s",file->path);
    0 a, t0 T! j8 B. m) Z6 I
  113.     ReadFileNames(fp,file->file);2 z3 K. t; N1 [" P
  114.     strcpy(file->full,".");
    . }0 Y2 h1 u. [2 n2 Z2 W3 n
  115.     strcat(file->full,file->path);
    * `4 B) \2 w0 N
  116.     strcat(file->full,file->file);
    # _* }+ F% K5 y! l" }- F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . K! V! }% C0 I+ v
  118.     {
    5 {; `) @8 g4 i2 \0 m4 S
  119.       file->vers=(float)atof(version);
      |0 g$ a" `7 M# t  `
  120.       UpdateList.push_back(file->full);3 e, i3 q$ I* r- \+ y4 g, f( \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " n. T. q9 O6 q* P6 k7 c  E8 S
  122.     }. l3 ?7 o7 {' v+ g, Z
  123.     else
    5 ~! Z" V" p: e# ]2 Z% E2 t
  124.     {
    - b# h* G' o- q$ J# a9 ^  c& i! |
  125.       olds=(*p).second;
    1 F; h& d  a3 g' P
  126.       if(olds->vers<(float)atof(version))
    2 [, {% L0 s: c6 a3 ^: [
  127.       {
    4 T3 k! F4 }5 r  j% H
  128.         olds->vers=(float)atof(version);
    * e' q; m5 l' x+ E: H" J0 {
  129.       }: f; r- e6 _( B" j5 Z& ^! k
  130.       free(file);
      @4 k9 |, v# M& B* b+ l
  131.     }
    ) B( ~! s- ^$ k# J
  132.   }
    # b$ ^/ l6 Z- T- r' N) ^$ }
  133.   fclose(fp);
    ' K! c' j' V( z- L
  134.   return true;( g- A& A2 S" a$ [( C* `  C
  135. }6 y% _+ D- l: D. M. x
  136. 0 l% p( l- W* i, ^4 A* e/ p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# S9 o+ ?* e+ O% g5 z
  138. {
    . Q" |, Z+ d. l" I
  139.   TCHAR  szFull[MAX_PATH];$ d) X* C+ d) k- s& t
  140.   TCHAR *token,*inter;" Z, k: {" Y& b' }; d" L# _  S* G
  141.   *szPath=0;
    8 o+ d1 E) n$ Y( B3 C1 W8 [6 T- N
  142.   strcpy(szFull,szFullPath);! z8 Y& b# S5 e6 l
  143.   token=strtok(szFull,"\\/");3 G3 e5 H/ m- X+ m$ l
  144.   inter=token;* E7 \+ J4 E. j# K/ w% U6 _
  145.   while(token=strtok(NULL,"\\/"))5 D' A" K  j1 Z  ]' }2 l9 j
  146.   {" f$ L3 J' Z- O/ o0 n& v
  147.     strcat(szPath,inter);
    - m, E4 U* t9 j7 h; l0 T
  148.     strcat(szPath,"\");7 s+ N$ n/ Y$ O9 N% d9 y6 V
  149.     inter=token;/ u# f. U) U$ e' ^
  150.   }- h+ [! b2 b0 v
  151.   return strlen(szPath);) Y! j7 ^, i, n" z9 M# f
  152. }
    : g% y2 g! g* [0 f/ y" f2 o9 n

  153. ( R* s, {, w8 S, k1 A( ]
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# K" o% e' b$ s
  155. {: `5 q& [( {# w$ E
  156.   DWORD attrib=GetFileAttributes(Target);
    8 @" t" h% H9 Q$ o1 n" {7 }7 m
  157.   if(attrib!=-1)' }9 N5 P0 ]% h( j  |" ^* ?. F
  158.   {
    8 ^1 J$ }# B5 `4 m" v! h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 i# v( l$ i0 K8 F
  160.     {
    1 Z3 ~; o+ y' o9 ^2 K7 t2 N1 k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 q0 G6 l9 a5 r; g( i9 J: {7 u; y1 T
  162.       SetFileAttributes(Target,attrib);
    ' H( C2 h/ Z3 v" Y+ P
  163.     }
    8 F( J" n4 L2 \& ?4 l7 Z* W. A; T
  164.   }! O5 U, m) n9 n9 ]( B6 Q
  165.   CopyFile(Source,Target,Erase);
    4 S$ Z$ ~0 M1 q
  166. }
    % P; a3 X9 }  L7 M9 e

  167. ) x7 Z0 p$ S' V9 {- ]6 N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * Y& O# z: W) j1 L  W- v% u! o
  169. {4 ?5 B' B/ E- J6 n$ G/ X8 z
  170.      FILE *fp;* Y. `' i6 B4 ~. C9 ~! A) U  p, S4 ]
  171.      char  szBuffer[8192];
      _9 T3 P. }+ ]1 l- h" Y% M# z
  172.   va_list  argptr;
    * ?# @6 n3 R! s7 x5 r

  173. % o5 P/ r- r5 I, y
  174.         va_start(argptr,message);
    ' X$ A% `" T5 s  ^# R# y
  175.         vsprintf(szBuffer,message,argptr);; X+ _% D& U, p& X. W' h$ K( S8 l
  176.         va_end(argptr);
    % w& a& M7 H' i" W' Z  ?4 Y$ j
  177.   fp=fopen(FileName,"a");
    / B. M' z3 {( a7 P
  178.   if(fp); a4 E' ?9 U: {
  179.   {; O7 A1 q. t# }6 t
  180.     fprintf(fp,szBuffer);
    4 t8 d$ a* q) D  e! o& D
  181.     fclose(fp);
    # l! H/ r: X6 o. @* i
  182.           _flushall();
    + q! V" p# z% Q- A4 n
  183.   }4 B# W* [0 j" G$ G! A$ x6 T
  184. }
    - y' |4 [6 [/ q

  185. ! U) c2 J" ^* V$ J  P$ {) Y
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % h+ B+ z/ Y% g5 N& E
  187. {
    9 |: q8 a& G. I3 N+ J: _* F7 L
  188.      FILE *fp;7 o3 E" s- j& Y1 Q; e
  189.     DWORD  attrib;
    & K( N8 z0 F; O# F7 ^6 n
  190.   attrib=GetFileAttributes(FileName);0 h3 o( `0 _6 w2 Z# F1 b
  191.   if(attrib!=-1)
    9 |/ c9 [7 @) `
  192.   {
    5 u$ z4 {" C8 P! e! W$ t) _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 a; _: N3 l* I! T; ~7 @7 {; j$ }
  194.     if(!SetFileAttributes(FileName,attrib))
    2 O2 @. f1 l  Z3 R5 t7 U
  195.     {' N1 g; Z! f4 c: H
  196.       return FALSE;7 K0 h2 h8 w& v
  197.     }  R0 i0 Z* k1 f1 h
  198.   }
    ; ~% h+ u3 T( R% v- Q
  199.   fp=fopen(FileName,"wb");' r" r& Z! \3 P) w7 Y/ t
  200.   if(fp)
    5 K! S1 A6 W' _; v, Z1 I# H+ |- V
  201.   {
    3 e1 u! D# e+ f3 w5 q, u
  202.     fclose(fp);/ H9 q+ |1 j9 g8 \% j
  203.   }
    , U  ^2 V1 y# h8 O( \
  204.   return TRUE;% x1 i  A7 W; [1 G9 Q
  205. }& q+ [! w& ^! [, [2 e

  206. * i: M# g5 Y7 d$ L' B8 V3 \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* D1 H/ N; Y3 }  J/ @
  208. {
    . w  c' r+ I0 M& U
  209.   char filename[MAX_PATH];
    . [- G' Y) [* d& S' g9 c
  210.   LPUPDATEFILE file,olds;
    # E( ~9 Q6 m0 ?- {
  211.   std::map<int,CString>::iterator i;! h5 A8 C$ ^, i5 E' O, @6 |8 c: P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 O& k0 R1 k3 a& e. G- p0 Y
  213.   std::list<CString>::iterator l;
    $ N% @( A( r5 f
  214. $ F( ?$ {( _/ V8 t  ]
  215.   if(bFirstUpdate)% Q; ?- j  f4 }, q6 o
  216.   {: m9 b  L& l: A! L/ ?" ?% c. X5 @
  217.     dwCurrFile=0;
    4 w7 ?! G! Y7 p: e( B
  218.     bFirstUpdate=FALSE;' a4 Z: v" V1 |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : J3 O3 y* I& p1 C5 r3 p/ j; k" Z
  220.     {' y; r# j4 W% o8 B& ~: V$ ]
  221.       dwTotalFiles=UpdateLocal.size();. k& e! Q! m# j( ]4 r
  222.       dwDownLoaded=0;9 n/ ^/ R$ G: s9 y* ]& Z9 Q
  223.       bSilentStep=FALSE;
    ( g  R9 m- e0 a( v5 B0 h7 ?/ O' k
  224.       bCompressed=TRUE;
    - A4 n0 L8 b5 H' J% I
  225.       strExtLocal.Empty();% g# C' D, }' I$ \2 k: D/ }8 C  _
  226.       strFullName=(*i).second;) d  v. @8 B. [/ f! @
  227.       dwProgramState=AP_CONNECT;8 `8 {; Y- P3 W& N. W4 U. O1 L
  228.       return TRUE;
    : m: g* D) }( l4 s4 ^$ C& W' c$ n0 m
  229.     }
    / ?+ h& z) t, D8 E# g  X% R
  230.   }
    7 b2 n/ e5 f) r/ h+ [& i2 [
  231.   else if(bRestartUpdater==FALSE)( ^2 a/ h- E/ @0 ]7 A; _
  232.   {* a% N/ C2 E  \; |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 O* F% L; P: M7 C5 b8 x0 p
  234.     {
    9 X/ a! n* f* e( z/ l
  235.       file=(*p).second;! ^; B$ I/ l$ b. `. m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 ^- e9 R; F) t
  237.       {( L0 o  a% k" x9 e
  238.         olds=(*p).second;+ t5 I5 W0 @2 n5 o; b7 {+ d: f5 B
  239.         olds->vers=file->vers;3 K8 c+ N1 u: @
  240.       }! ^: G: [6 I1 f  A( H# q
  241.       else( |) k1 e' w. }( z6 B
  242.       {. V  H* a7 R" B4 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* T7 m/ R0 q0 \* Q$ O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 \6 G$ G- p4 J9 v
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + y- C* g/ [8 _! D1 n, z
  246.       }6 I. ]$ r; Z; n9 T: q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 ^, a$ E% e2 S" Z
  248.       sprintf(filename,"(%s)",file->file);* w6 {' A/ J$ I$ t8 t! t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " Z5 f  B; u+ s  w; h2 i4 T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 u# M* v. ~$ [8 H( f) b& f
  251.     }
    / X7 |4 P' o+ k$ K
  252.     dwCurrFile++;. ^5 V. u) _) s1 M& m) e8 H' }3 J' F! R
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - G0 h3 c' g% W4 n. Y
  254.     {
    ( D& e' G) w) Z' V
  255.       bSilentStep=FALSE;% W  J9 v6 J/ V. X) Z
  256.       bCompressed=TRUE;5 m- q  b9 v; q+ {
  257.       strExtLocal.Empty();3 q* ~; y. ?1 t0 T% D1 a3 k
  258.       strFullName=(*i).second;* A( `* i' u7 L; O7 P
  259.       dwProgramState=AP_CONNECT;+ O  V0 M' Y. G5 t* V" @5 a! v
  260.       return TRUE;- Q' m2 N6 G, k& {4 [2 G
  261.     }$ A6 K  O5 P* V% }- r
  262.     if(!bRestartUpdater)
    & C+ b- p( t  W: v. a& b4 }! P
  263.     {
    ! t5 \0 {9 T* [( x2 v0 q& |7 S
  264.       int iCurrSize,iFileSize;
    ( l$ P0 h7 c9 ~' E
  265.       iCurrSize=0;% K, q; _; @9 }2 l
  266.       iFileSize=UpdateList2.size();0 U- C& R8 a  Q' }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & c3 ^4 O* |  K$ \8 o. {/ Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 y" I6 F" Y$ b1 t/ d: K$ d# V. p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 A5 r1 h/ R  K" Q8 O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 f% G- N) b; Q2 A
  271.       Fclearf(".\\update.dat");
    ) k  E: g+ M( C# g
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; ?/ D" M1 @7 O. m: N5 }+ B3 A1 v6 }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% f- w; t* w3 h  u% A
  274.       {2 {- a- y7 [# a& o7 k4 Q7 Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# I0 n  u& u2 K2 j3 r: w
  276.         {+ y% M+ D  ]: j& \
  277.           file=(*p).second;; k6 U0 }: L8 P1 r7 @
  278.           sprintf(filename,"(%s)",file->file);* H1 V" m# G7 n+ X4 p- t2 Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , `: U* K. f3 k* M
  280.           iCurrSize++;
    / n* B4 N- s. b. K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 J) g# k3 |0 M  r  ^3 r9 l& g
  282.         }
    ' J0 N3 p. Q. z! i  p) T2 f7 `
  283.       }
    8 P( E! ?; {0 c( T+ B) ?( S, b
  284.       unlink(".\\update.txt");- z3 n# a/ l7 D2 E3 P
  285.       unlink(".\\update.tmp");/ f& o: [* F4 N! l
  286.       Fclearf(".\\checkversion.dat");0 M- d+ M. B  |& ~- p/ Q# w4 B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! t7 P4 H" Y  M% `
  288.       if(UpdateLocal.size())
    $ Q! Z) U2 U/ p6 M4 a$ u- G7 ^
  289.       {
    4 D# h3 ~. N0 p) a2 g
  290.         UpdateLocal.clear();
    ) C7 ~9 `: Y5 T0 j& }" l, `/ Y! [
  291.       }
    ( Z. B& c7 F; g" i8 q( i4 D
  292.       if(UpdateFile3.size())- N  F; t6 D. M
  293.       {
    * M' [3 t! o1 _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # V) S0 L( h7 D6 M/ |
  295.         {. B+ \$ x6 ?  f( G' z( c7 L
  296.           file=(*p).second;& i. q8 R, r) ]4 ?) ~* O  a
  297.           free(file);
    4 [1 Y$ i2 F' Z0 |( j
  298.         }
    5 i) P' U2 W2 e- C
  299.         UpdateFile3.clear();
    8 ^/ Z1 n, m4 ?3 y$ h; \* Z
  300.         UpdateList3.clear();9 f9 \2 ~5 f( c
  301.       }
    ; i: v0 U, O" q
  302.       if(UpdateFile2.size())
    ( _# b7 v8 [' q* f
  303.       {. T+ U$ m, }2 J. {0 Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" R: p6 J' a) i/ p* q' n
  305.         {
      S, r# Y* _( Z- v
  306.           file=(*p).second;
    ; [0 O2 z" @2 ]/ I
  307.           free(file);
    4 U) Q3 r9 c" A: ?, ]( P/ d1 `2 e
  308.         }: q) v% y  T7 T. ~# [9 l& X; c
  309.         UpdateFile2.clear();
    $ X) |$ o4 Z2 V/ \. X  O: y
  310.         UpdateList2.clear();  d- n$ h0 T/ X* q8 ^' H
  311.       }5 G" d" a: E( C; u2 r8 l* b
  312.       if(UpdateFile1.size())7 K- Z; S1 m6 k: m
  313.       {
      X; y! P/ [4 z% ~
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ v% i+ @) q5 a( c1 D+ Q
  315.         {
    ; n& b& B+ i7 Z! T9 p, [
  316.           file=(*p).second;* W# G% g1 v/ e; T3 H5 y. o1 ?. j
  317.           free(file);9 x) S7 [, G+ D+ q. D# K4 F. `
  318.         }
    & ]# B  P1 z, \# q
  319.         UpdateFile1.clear();8 L1 X9 s( O# z: [. K1 `' x
  320.         UpdateList1.clear();
    ' \( l& T- g' e+ V+ C  \( m
  321.       }# w, L7 v: C: c! ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" k, O. R5 [' O/ Y0 t
  323.     }
    7 m, u5 |9 Z; l" Q( m
  324.   }
    ; v% q/ `' _! @3 W1 W
  325.   return FALSE;, ]  f5 A+ }3 b2 X1 r6 c
  326. }
    6 P3 r( K; S4 a! ~: A. I

  327. 9 \8 V, h- w6 w9 _" e
  328. void CRevAppApp::ClearAll(void)
    4 k& {8 R7 ]1 e$ }" q
  329. {- v: D( g9 s8 o
  330.   LPUPDATEFILE file;5 t* A0 L1 f) @, T* P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& {+ U3 ~" F# v* ]+ {

  332.   F; U) Q6 f* C4 D6 b& B) H' g+ P- ^
  333.   if(UpdateLocal.size())
    3 M, e% A: k2 {
  334.   {
    , W6 `5 U5 v, l8 t4 A' v( I
  335.     UpdateLocal.clear();, Z) E2 c  Z/ x3 X0 m! [
  336.   }
    7 m% I! r+ ~# ?$ l6 k' j
  337.   if(UpdateFile3.size())
    % \" b6 `" k& f
  338.   {5 T6 k% o9 b$ y6 t' u# S! b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' @+ J1 W* Q! A! F! Y% i
  340.     {8 s2 _- y: ~" P- o) {
  341.       file=(*p).second;6 E0 C3 X6 t8 ?% v3 I* V$ g
  342.       free(file);9 s: F2 \8 _, A  m! d: x! E  g
  343.     }1 u  b" A0 u- b
  344.     UpdateFile3.clear();
    - Y- _6 g. H3 G' b4 A
  345.     UpdateList3.clear();8 B- ^" f5 z: D) `2 [7 i/ h
  346.   }( a1 o4 P: X  f6 ]3 \
  347.   if(UpdateFile2.size())
    * `6 D2 [9 j; O
  348.   {
    * v& l  F- G; r1 g3 T$ r4 z$ \0 |
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 q7 ?6 }& H  i0 J
  350.     {# Z6 X7 y( u% t/ P- c4 r
  351.       file=(*p).second;
    4 O1 a- G7 M/ q& {+ Z
  352.       free(file);
    3 Q! V7 ?+ b3 e; u; Z9 \1 R. O0 u
  353.     }% ~$ R) Q1 L" S. s/ o" W8 E8 B2 N) H
  354.     UpdateFile2.clear();1 U5 ^( ?: s& h# K) X# L
  355.     UpdateList2.clear();
    5 Y/ I  g7 Q- V
  356.   }
    ! Q( U7 r' Y0 H5 i9 I
  357.   if(UpdateFile1.size())6 A% A. A. o/ ~. C: [6 d* m
  358.   {  O+ X7 ]) z, R3 M! ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 A8 y# n: X+ ~4 R( r- O- _9 v8 b
  360.     {$ C6 \9 Q0 q1 Y" B9 g3 E2 p! ]+ k3 q
  361.       file=(*p).second;
    9 ~' l; A3 t: u2 `0 }1 [# |+ Y
  362.       free(file);
    # M- {  D7 s3 b1 o; M
  363.     }
    3 D7 }( O, h6 F+ \; }8 T
  364.     UpdateFile1.clear();9 [, _, j2 |! S% v" S
  365.     UpdateList1.clear();
    1 e$ [( X# w& D: n1 V- K1 \% ^" b
  366.   }7 h! g$ _. }8 i: D+ F$ \
  367. }    I& \; [& l6 P" z
  368.   ! ]( l% V& c4 f3 f5 _4 j
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " H7 w) K8 l* O0 `
  370. {
    ' H# b( P5 G. g$ C8 A
  371.   int c;
    2 m' u$ I' j1 X. d  T) m  B0 p3 i! p
  372.   LPUPDATEFILE file1,file2;% B+ ?6 V! |* \# @$ S: S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! N' _3 y+ Y6 ?0 W
  374.   std::list<CString>::iterator l;
    + }7 W0 K$ i* B* \* {( b( ?& L) w
  375. + U: X7 a1 {1 c8 @7 u" f; n
  376.   UpdateLocal.clear();; L. j+ G. c) z) u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 N$ ?9 d' o$ U- |* ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! |% Z  U$ X8 O! J" q" T- X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 B0 A5 m: G) `3 ], N2 K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 B5 }$ q0 c3 M/ J$ x
  381.   if(UpdateFile3.size())
    + o6 \! q) N1 D3 c
  382.   {
    ; }0 {, o* u* \5 L0 p
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# E- I2 S( {3 A# T& g/ A+ K( ]: E+ L
  384.     {, x2 @) ^, G' J6 ?# {' B
  385.       file2=(LPUPDATEFILE)(*i).second;
    9 ]% s% v, D" r) f! F  B) Y* R
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 k) ]6 D( B( {8 \8 c) q
  387.       {
    ; F$ e8 z# y7 @, G: u: \! x# X- n$ d
  388.         file1=(LPUPDATEFILE)(*p).second;
    & u" {: L0 h, Z
  389.         file1->vers=file2->vers;
    ' _, b% x$ c: ?( r( T
  390.       }, Y/ T4 T% g2 ^- u$ W( Y$ r, F- L+ L
  391.       else
    2 I& w$ [+ o  H: C9 f4 s
  392.       {
    . B# b$ K1 a% j' o# U, Q9 N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! w4 K; Q; D/ P9 J6 i- ?5 ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* ^# G  ]  N9 l3 g8 ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 o3 H5 @( K! \, }/ b
  396.       }
    3 h$ ^' V+ {7 ^" w
  397.     }  ?. S2 d7 V# ]7 M3 ?
  398.   }
    ( p3 y  s8 l; V- ^9 O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ f+ i0 I4 m7 u: I& N( M
  400.   {" o* O( R$ {! l0 W; G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . R1 P7 L9 p) `) e$ U
  402.     {
    / J( S6 N9 d5 `3 w, t4 B- G9 N
  403.       file2=(LPUPDATEFILE)(*i).second;* O3 [6 E' J5 W; y9 `
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 [0 I% j/ v9 [. p: w
  405.       {
    ) @0 g) g  I+ i
  406.         file1=(LPUPDATEFILE)(*p).second;. K( g+ A* Q! H! e. D% B( S
  407.         if(file1->vers!=file2->vers)
    2 z; \: a+ F$ E' J! f9 j
  408.         {
    + Y( f9 B- m9 \1 |
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! O1 p  S( v1 O- l6 ~
  410.           c++;) F8 A% [# q; L2 H
  411.         }
    1 N5 t) r) k9 u  O4 D
  412.       }
    ; H" P( j6 D! U" H
  413.       else( H+ N9 m* t/ {& S+ Q+ n% T
  414.       {
    2 n# X* Z6 S  N0 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. Z. R6 U  Z: s. z6 U$ y/ f$ ]
  416.         c++;6 g$ c2 n/ E8 H( {! {
  417.       }3 ], x1 K# l1 ^# |" n1 V: B
  418.     }5 y- z) Z' c; x+ D& M* P
  419.   }
    7 w* E" [- x" O4 n; M2 J; r
  420.   unlink(".\\DownLoad\\update.txt");
    . E5 y$ A9 E( V9 i
  421.   if(UpdateLocal.size()) return TRUE;8 D' B8 t* V0 L6 k1 r; Z
  422.   else                   return FALSE;
    : q! J' x* j9 P* g" X5 |
  423. }& ^' R0 `0 A1 O4 P7 d4 D2 p. q
  424. 0 m4 p& Y( a* I: {( l2 N& [1 i& O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 _. r7 O3 h; e( K% v
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' A; U2 f. G( W1 T8 u

  427. 1 c& r, {/ n) K4 C  b

  428. 7 d  x4 z2 Z% ]3 }2 S4 z6 |

  429. : |" }9 r: J2 ]8 i1 R# B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : z0 r; A3 ^1 v" T
  431. {
    8 i0 m5 `$ U3 T- ^  i( G0 ~- I3 L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / u- L/ _* I) v( I7 E6 Z- s- R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : a+ F) Y; C9 _
  434.   {
    - Z2 \5 J+ _( N- M7 t
  435.     char szLanguage[50];. d  w5 W: E; I% H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! T! Q7 Y8 i4 N. I' Z1 S6 F+ h4 k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 [$ X* C8 m1 N/ f5 V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) u- T2 u7 K1 l2 _. b5 {8 U
  439.     else                                   m_iLanguage=ENGLISH;
    7 {* z9 M* _' B8 V3 n0 L/ f, ?( F
  440.     char szRegister[100];3 ]: ^! I  h/ }5 s7 \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , K2 S0 Y! w8 g
  442.     strRegsName=szRegister;
    2 L9 p; y! m1 ~) |9 S
  443.     char szPatchURL[100];
    ' Y$ b. B# I6 t8 J1 f/ i. H" `: Y1 q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : D( n$ Z1 s) E# Q  V. y: |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( |  o+ ^; [' b$ ?
  446.   }# X) X! @! l) a# n/ R( v2 i
  447.   else" a0 A6 |, M& s0 N
  448.   {( d5 H" g* \, O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 a9 @0 Y* G: S
  450.     strRegsName=DEFAULT_REG_URL;3 M  ^4 ^2 f1 _$ ~) o1 d; |8 Q
  451.   }8 m5 I2 Q; i7 o) D) O/ F3 V
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , D1 V8 r: G# |2 \, ?" u
  453.   {
    ) ~2 h2 A1 w# t/ s" Y9 ?$ L
  454.     char szIP[50];4 Z3 o8 n' S, {- N9 r' V7 C/ v
  455.     char szDIR[300];& ]$ G- r( i# z1 u7 Y0 ]- V  g
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; @  Q/ \3 `2 s2 }: k
  457.     {
    6 @1 s. ]: ]* e! r. l7 l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : [$ \% a9 F8 r! Q: Y) M" s" r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& O+ K1 B+ P6 q0 l$ Z8 n6 K
  460.       strHostName=szIP;
    & H% J4 S  H1 T) s* |7 Q
  461.       strHostPath.Format("/%s",szDIR);) g7 |6 Q5 N& N) `
  462.     }
    $ q# {3 ?+ w# j* o
  463.     else
    " ~5 y) g+ v$ D, M) V" t" `
  464.     {
    6 ^9 K  b4 |% K8 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), O' ]+ U  j0 ?- h8 T
  466.       {, J6 u6 j$ d% ]
  467.         char szLanguage[50];1 Y, i- L+ V& z. A* J. Z0 ~" O' T
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 D. J5 a4 s0 r' P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# E0 _% W5 q. x! ^2 |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 Y8 G; B* b, V2 p+ G& w! z5 {
  471.         else                                   m_iLanguage=ENGLISH;2 B& _. ]7 g& E  F; `- Y+ c$ t- A
  472.         char szRegister[100];
    . c! Y: V* ^- }
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 h4 u: o+ j  z# O
  474.         strRegsName=szRegister;( p" u0 Q4 A1 w
  475.         char szPatchURL[100];  m9 Y* g1 \& \# L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * Z& \& d' H7 S8 e- A2 ]- U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " G. k% ~4 `0 c, v! m! T' ~
  478.       }
    ' Q5 g( G* @& [1 x% d; n+ D# J
  479.       else
    " h: c  U2 v4 H
  480.       {
    " P5 }% u9 u; X# |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 Z8 b3 P4 P$ S- Y4 T
  482.         strRegsName=DEFAULT_REG_URL;
    7 c+ ^! a) q8 `1 F4 v) j) U
  483.       }) Y% f. Q# u' n, }+ @% I# f7 N5 g; z. U
  484.     }* V- h# j+ d, L& `2 ]2 I4 r
  485.   }. D9 [/ s5 {. c7 M/ w5 J
  486.   return true;
    & B  ]4 K2 G# T4 J4 T% h  c2 I
  487. }
    6 m7 P' K5 u  w
  488. 9 @$ j7 \3 K! g( A- n
  489. #include ".\ZLib\unzip.h"+ u- b: }$ b! |% X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , i4 a% }$ ?, h2 q) P
  491. /////////////////////////////////////////////////////////////////////////////
    2 Q$ Z$ ^# a2 s  y
  492. // CRevAppApp initialization
    $ X( c0 R+ k: ^) t5 ], U& B( k

  493. 7 u: P$ q  E0 x2 P" B1 l+ ~
  494. BOOL CRevAppApp::InitInstance()& m+ }7 e9 U' g* }% W" H' t
  495. {
    0 T" X2 @7 [  N) _9 u; M$ ]
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 R2 t. m4 y0 g2 k8 Z( |- ]" g
  497. + v* j9 o- S2 V5 j) D! l6 R& a, V+ U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 Z& J6 B/ f% o. e% t
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 ?/ S: g. I3 S+ o) m7 x
  500.   {6 w8 z6 m! q' a( p# {( E+ u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 ?  U/ r' ]) u- L8 h( \% \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ ~( g4 f* G& l6 v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 i! b# _1 ~+ k2 ^8 W& r
  504.     {2 }9 r1 M% j8 @  B* C
  505.       strcpy(szPath,szPathTarget);/ Y0 Y; C! f2 e/ K
  506.       SetCurrentDirectory(szPath);! a6 x, h( C. x1 h8 J  N
  507.     }
    3 j5 U* t. S+ N7 N# i
  508.   }8 ]2 A3 Z& o+ a4 s. G
  509. #ifdef _DEBUG
    6 Y: s- @3 P5 v* x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 h: d" t" k) V+ R  c9 ~
  511. #else. y) s* m' ]3 @& q! i. i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 q. v' k- H! u1 U8 f
  513. #endif
    9 B% c! |2 ^" m- M; @5 ^+ H
  514.   {
    : q+ s/ w) j% F2 }  y6 [
  515.     char tempFileName[MAX_PATH];( {. p# \& a9 ~4 }* l
  516.     strcpy(tempFileName,szPathSource);
    ) b/ b' y8 u2 W5 z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , a# ?0 `8 ^1 m) h9 V- ?4 p- r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; K8 @5 w7 F3 p( S5 I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 G9 z7 q2 _" w, m: B4 A' K; o3 `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* Z6 r9 n1 ]$ y
  521.     return TRUE;. d+ d8 ^/ g) ~) [4 L( b
  522.   }
    ! E9 g' c$ W( r" B0 Z
  523.   // Nuke 0118: Delete run.exe
    . O" D6 r1 y) ?1 V1 B9 ~  C4 ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; N# @/ D3 ^5 A) @& d) T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ |! C- ?' k7 E
  526.   if(!ReadCfgFile("Config.ini"))2 D1 D! W4 M$ F  R
  527.   {7 c0 A9 ?3 X9 B9 Y7 g$ l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , d( m1 l1 t) G
  529.     return TRUE;2 u% X( @) P( j
  530.   }
    * B: U+ u; H9 q/ {- w
  531.   HANDLE mutex;
    ( b' n% j% V, y" q! q; _. \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 R  f: ~# X& I; Q* V0 ^4 g  B5 }
  533.   {8 _  F; ?4 x+ L0 {! P' P% y
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 R  l+ A: T6 \  ?  j! H2 V
  535.     {
    & ?2 z& \2 D. ~
  536.       CloseHandle(mutex);
    / ~8 m1 Q/ Q2 u. g+ ^0 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 t, K2 Z8 T" I- _9 B
  538.       return TRUE;' B# J9 O7 w, z; k7 @# x4 N" H
  539.     }; s8 {+ S' t  Z; A3 x% _( D
  540.   }  ) q$ D* y  q* y0 T2 n' ^
  541.   CloseHandle(mutex);. b9 V+ G( X0 k4 c$ ]

  542. 6 F; o9 q% P+ h' Y: @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; k2 H' z0 @; U) o' V. M  C9 M

  544. : s" B, m: T8 w# r
  545.         AfxEnableControlContainer();
    6 n5 z1 S5 x( z) h$ R* h% i
  546. % j" a$ N9 }/ R6 t, g
  547.   bCanUpdate=FALSE;
    " |+ `8 W9 Z& \, I
  548.   dwStartUpSteps=1;$ `. m! o; n" b  M; P: z9 g
  549.   dwProgramState=AP_NOTHING;% q( E1 C( B3 Y7 C. T/ G; x% s" Y- Z
  550. ' F) \6 B' Z. E) R1 T# _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / @0 V# g7 q* |0 s3 L: }

  552. . t$ W  I) L2 L- e% j' b; M) u
  553.         // Standard initialization1 s/ O2 Q) }  x5 @% e/ L9 Z
  554.         // If you are not using these features and wish to reduce the size
    ( g+ H6 [9 u- o" p* y. S0 M" r( c1 t
  555.         //  of your final executable, you should remove from the following+ t. D' Z- |" I1 n
  556.         //  the specific initialization routines you do not need.
      {0 K3 E" I0 I0 ~3 ]: Z4 l, H

  557. " H  w( r7 j) z
  558. #ifdef _AFXDLL
    / p/ p1 T6 H6 A  V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 }2 A0 l7 b& }
  560. #else
    ) J5 q# \9 z' O, ]4 Z& V; m7 Q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 @* ]6 n/ C3 _% _) }8 A1 |& @
  562. #endif
    , p2 r4 x- c/ o* z$ m/ Y; y. O
  563. 6 ~1 g8 r9 H  X0 n9 o3 ^
  564.   dlg=new CRevAppDlg;$ M; M* q5 G& n0 Z: f& c+ m
  565.   dlg->Create(IDD_REVAPP_DIALOG);' J# G( c3 h8 a2 ~: q4 t4 [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ w3 m: S$ u' o6 Q$ Z
  567.   m_pMainWnd=dlg;
    ( _- L, Q  x$ m( z

  568. 7 t) D  c9 C; C! P. P# s. l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / j' p% d, e( v7 y4 Y9 R: T- }

  570. : O/ L4 b: g- I% G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) N0 J: E' q) u2 [+ T- `
  572. //  ULONG_PTR gdiplusToken;
    : G0 s2 p2 F, V, L( C! S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( C- l: G* E; {4 s: T0 w5 O
  574. & M* K6 z& m  w' _/ w* c
  575. //        CRevAppDlg dlg;% M+ v5 ~) |, }4 Y, P
  576. //        int nResponse = dlg.DoModal();
    / a. ]- p9 ?6 V1 \: C4 |* v
  577. //        if (nResponse == IDOK)
    2 E0 ^" n) y7 d3 m8 i+ o2 Z* f* p
  578. //        {, a; U2 [( M" R4 v7 m
  579. //                // TODO: Place code here to handle when the dialog is$ p5 H8 z+ x! C6 Z% J: |$ ]2 V7 [& K
  580. //                //  dismissed with OK
    4 q/ O3 F0 l% ~3 f/ v* l
  581. //        }9 Y+ F( D( N0 l# I# Q) B7 W. J
  582. //        else if (nResponse == IDCANCEL)8 P# S1 B8 u: V2 K
  583. //        {
    9 a& O* c- Q7 y; N6 d+ `( i3 E
  584. //                // TODO: Place code here to handle when the dialog is
    , p9 c' o: [! X8 d7 _1 u5 O
  585. //                //  dismissed with Cancel
    3 ?& f2 ?! Z; T
  586. //        }
    * Z( F+ I& A5 b# z
  587. 4 }  l3 T8 ^0 `3 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the& R3 ]# p6 t3 ?# G; F
  589.         //  application, rather than start the application's message pump.' X& J4 J$ @. G/ q) G1 X
  590.         return TRUE;
    ) O0 p, v! \! D% I
  591. }) G& ?4 }7 ]0 K: q! W8 v* ?

  592. & v& r8 J1 Z# |+ _8 X6 O- h
  593. char *CRevAppApp::strtok3(char *pSource,char *token); q* f, J$ P% P
  594. {4 e$ \# j& J8 |* Z/ p+ O
  595.   int i;
    ! ?$ C( N1 @7 J- r. \  r. p' v( E
  596.   char *szRet;- X8 r7 J+ ^  I; b

  597. " |# D2 l' e" F2 I+ T. J0 }- Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " r% W8 |5 `# \! a' w
  599.   if(sztoken)
    / w* t& |0 X2 o9 v$ d
  600.   {
    + _# W; {& D' n5 X$ R
  601.     szRet=&sztoken[itoken];7 X4 a: t. }: ~1 M- l2 Z
  602.     while(sztoken[itoken])
    ; I0 e2 q( m# [0 E6 F
  603.     {8 H0 q, i0 S+ x' `; f# ?% T( Z
  604.       for(i=0;i<(int)strlen(token);i++)7 t1 z' A+ T! G! P  S) U
  605.       {4 r) V0 v/ n/ M: j5 _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])- W  |; \6 Y- Y1 F2 ?  ?  h
  607.         {+ p+ i% B+ g3 H3 F5 D. [
  608.           sztoken[itoken++]=0;5 z; F6 Z, G, G: p3 e1 N6 P& a  B3 w( k
  609.           sztoken[itoken++]=0;
    - t& P% d6 [0 l3 ]4 d
  610.           return szRet;
    6 w; e( t# \- C  j1 J5 U
  611.         }# L' d0 _* ]9 E: z. e0 Z( C
  612.       }
    : w& X7 l$ ~, o- f" F6 s" C
  613.       itoken++;
    + O& r( Z5 P& I
  614.     }
    $ O* t) H' K% j( m# w2 }' _" D
  615.   }& @  E0 h0 g! n2 Z" {9 h. x8 V
  616.   return NULL;
    : G7 o& H- \. x6 ^
  617. }& ?5 c' k( f' p1 i4 W2 s
  618. , T' q& Z% X5 N( m+ `
  619. void ProcessProc(long Total,long Current)& j$ Z1 u8 b* [3 a
  620. {
    " S7 @- B9 F0 s" E) W2 y6 B' h
  621.         MSG msg;
    . J  G& j, Z4 f- t& x1 [: O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);6 Q0 K$ S0 U: t$ @9 k* J3 E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 }% e# K. W% q4 c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) ]8 e% u" X6 n0 z9 s" v
  625.         {
    . E/ W& v" @/ V4 f' }% {8 D# j( A1 l
  626.                 if(!GetMessage(&msg,NULL,0,0))1 W8 m! t8 A5 B4 ^: @  U8 B
  627.                 {
    % P2 k, U! w( E2 F4 O0 E$ h
  628.                         return;2 K2 `! m: s2 P; o
  629.                 }
    + N: O% N! R4 y% S) z
  630.                 TranslateMessage(&msg);
    8 r2 N* J* c% `3 t( q
  631.                 DispatchMessage(&msg);
    / z( L$ ^6 g, b+ k7 P# v: R
  632.         }       
    7 K' U$ F6 a1 t8 S! x% ~% R: t
  633. }9 }  r  o+ ]$ M# ~6 C. Z6 v

  634.   l0 \3 |  O3 Q& C! k
  635. BOOL bFirstChar=TRUE;# n5 \. R$ v+ F7 ~# ^
  636. 8 J4 J3 r3 _$ ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ B) @. W. f0 f1 D1 Q3 f1 X# m
  638. {5 g1 x+ W) _' [7 Q8 Z: I. T3 D
  639.         // TODO: Add your specialized code here and/or call the base class
    1 U0 D, L* z3 b
  640.   switch(dwProgramState)) T4 G2 K5 F1 C' P4 A
  641.   {
    6 B* X% ?" K4 M/ b: q
  642.   case AP_NOTHING:
    9 g4 f' @$ \1 Q$ p+ ^1 h; D- C9 h
  643.     switch(dwStartUpSteps)3 I( u) ^4 G& F. r/ Q- c- B
  644.     {# X1 A) O$ c, H, \" A+ A3 }
  645.     case 1:2 @( K/ o. G3 F
  646.       {1 z, ]- C2 q6 \5 b# V! W
  647.         int i;
    2 G" P5 a4 }0 j" _; N6 n9 ]
  648.         CDC *pCDC=dlg->GetDC();
    0 ^: [+ K" l& ~$ |' M' g
  649.         HDC hdcwnd=pCDC->m_hDC;, v! e  I; I" M* k, L
  650. //        Graphics graphics(hdcwnd);
    # p3 `- {* w* m; e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + p2 G$ Z2 k. F$ p, |
  652. //        INT iWidth=bitmap.GetWidth();1 s4 z8 n/ h6 B5 H# I7 E. ?
  653. //        INT iHeight=bitmap.GetHeight();
    2 Y' p1 T: v+ ]. P; X4 U0 `
  654. //        Color color,colorTemp;
    " d1 z; t9 }3 F5 J# G+ i8 E8 V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 o+ d8 d& J; J, |# q' E/ K6 M
  656. //        {
    ) s0 q2 d& I3 c% A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % e& [/ R* G* @5 ?" `
  658. //          {2 I7 S$ T% Y4 a$ \7 |2 N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. l! n7 b! {, _+ u, L; b; ^$ o2 r5 c
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 C2 z  t, J5 N) [% d1 o, O$ G
  661. //              (BYTE)(255*iColumn/iWidth),
    2 n+ D: F7 O4 v- m: J' N# B2 G
  662. //              color.GetRed(),! E6 K: k! a) q" R2 g
  663. //              color.GetGreen(),
    ! R$ y4 I  \9 |* l( s
  664. //              color.GetBlue()));
    % c' Z+ ^9 @7 q% r" C4 M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; W' m, L- ~  R( @, ^: u1 q& h
  666. //          }
    7 E2 S8 g# ^* Q" D5 Q
  667. //        }
    - O) j& w3 c" F$ s% B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( O- A9 G2 x6 R* }8 l# M
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" {! S  r9 O1 P4 r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 j& C' a/ i1 }( X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ o- e. e' B  K3 D+ \8 d
  672.         for(i=0;i<240;i+=8)
    % ]9 \1 f( z, J: ?3 d( G
  673.         {8 C/ Z% @' N% j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - i! G; d0 r, N- z, p) E; k- \8 _7 s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% j9 X, X0 r0 N- G' [1 ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! J5 R: }3 c) {& \
  677.           Sleep(33);
    " u% \. @/ S0 S: @6 E2 T; c6 i
  678.         }
    ' B7 i% b& u# b  M" ^2 P
  679.         Sleep(1000);
    " |9 {. a4 F5 o% ~- s
  680.         for(i=240;i>0;i-=8)/ O8 j6 Y- D5 Z" `: Y4 W( ?
  681.         {5 D2 f5 K- [) ?0 q7 f- H3 ?% N( v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" s# [: o! d0 V2 ^* M# N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 r+ B' Z6 b& L+ l$ H0 r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . Q$ ^. U: I& J5 E* _6 f; o% Y
  685.           Sleep(33);
    " i/ t( ]) s) x" [
  686.         }9 k1 R- Z3 ^* V* N- |
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# t2 P: l5 g, X
  688.         dlg->ReleaseDC(pCDC);- d; X  T* ?  w! u+ t& l0 O
  689.         DeleteDC(hdctar);7 X( T+ F& h: U
  690.         DeleteDC(hdcsrc);
    0 T9 |# K; ]  e; ^
  691.         DeleteDC(hdcorg);, d6 ]3 z+ g  k. Z1 [1 m% h4 f" F
  692.       }
    ) J+ N& K/ _, Q3 O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . @: n: P- E7 b" ]5 f' j: }! ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ) d7 \$ u' s6 p. y  `( v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 q3 P: m7 h: H6 W, x7 m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , S6 t0 E1 [) {6 K! e1 @3 p6 p5 _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: C7 q' C, x' X0 z9 I* L2 P
  698.       if(!Dn.Connected())% N& t& F7 ~5 a$ _, p1 ^- M& T
  699.       {  k  t6 Q: C7 A# s; g
  700.         dwTotalFiles=1;! y7 s5 D1 r( }/ U
  701.         dwDownLoaded=0;+ ]+ T+ [( F3 w2 j0 A+ U3 P) w
  702.         bSilentStep=TRUE;9 U" _9 h+ V; ]0 e5 X# H8 }
  703.         bCompressed=FALSE;
    : c2 Y3 o0 P5 x+ D. M3 W& N
  704.         strExtLocal.Empty();* V; h* ^  a4 {3 P$ f
  705.         strFullName="readme.txt";% G' t* X! \( @7 W$ x
  706.         dwProgramState=AP_CONNECT;
    5 n, u( k8 L5 u! B
  707.       }3 E8 G* b( o" i4 V3 k1 Y5 u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& Q9 P2 j, b3 F4 `0 ^% h# E' i
  709.       dwStartUpSteps=2;
    1 y8 O) M8 M& L. A5 P) H
  710.       break;) M& o( A# g- b* D5 h% e- r
  711.     case 2:
    , c( p0 S6 S2 y$ o  V9 O2 s
  712.       {
    5 {1 l$ E6 }+ n# D: x
  713.         int iEOF;. F0 c4 s* T8 d; O
  714.         FILE *fp;( p9 X# @6 p% E# ?& Z( C' \7 n
  715.         char szString[512];3 G2 e1 C  g7 ?. K5 f. C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' @& h, O. S* g/ E% b
  717.         if(fp), O! z& t2 M- g$ j7 L
  718.         {
    3 Q; w9 q  O7 `/ g
  719.           do2 X% r) C) M" R/ Z# B
  720.           {
    6 j4 M  j: l# X4 q- D2 q
  721.             iEOF=fscanf(fp,"%s",szString);  {/ R, E0 a! V4 `
  722.             if(strlen(szString))+ N! Y0 H8 L' C4 m# Y
  723.             {0 m) F- N1 R* @
  724.               if(bFirstChar)
    9 V: d, Q9 G% F, e( p8 Y8 ^% @% E
  725.               {$ ]. r6 F0 M6 s7 A6 b* O
  726.                 bFirstChar=FALSE;0 k$ W& D" [8 Y7 V
  727.                 bConnectIsBig5=FALSE;
    9 D- U/ s" a+ r* C4 _7 o# c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- a- M1 x1 S2 R  n" k6 T
  729.               }/ B' V1 u, G5 T$ f8 @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " Y) N" ?  t9 y- {, X7 [* q  V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 ^* y8 J8 o! |6 `# w5 Z) }8 [
  732.               dlg->m_ListText.AddString(szString);
    2 N) U0 W; c1 {. l0 _$ v& @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( I7 ?2 Y! a# w
  734.               *szString=0;8 i( `: M1 t' f0 m% d
  735.             }- S: J2 F9 n4 {- P( g* z
  736.           } while(iEOF!=EOF);2 D  B5 ~  v1 @4 L* U
  737.           fclose(fp);
    % m, K3 z% K1 l  C$ \
  738.           unlink(".\\DownLoad\\readme.txt");$ c: Y9 o5 A* W1 ~( H! @# f
  739.           dwStartUpSteps=3;* I0 ~7 x. F% `5 q5 z7 g9 c3 J
  740.         }
    5 l4 I# K9 _. Y
  741.       }
    % o. i, I- k" h" _$ K' Y
  742.       break;6 G1 X5 T: w6 g: N; Q. x5 j
  743.     case 3:+ y! v: D. v; Z1 R
  744.       if(!Dn.Connected())1 m) e; q5 c$ w6 t
  745.       {
    4 D/ L3 T4 o% B9 i2 k" \# D; R" K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    4 t& F1 V$ e$ }
  747.         dwTotalFiles=1;  l: ~5 }) q* Y7 D. y1 ]! w& Z
  748.         dwDownLoaded=0;0 C: e$ ~+ j0 e1 X7 r6 ~
  749.         bSilentStep=TRUE;& ]& D' r6 R& x0 e! ^# G
  750.         bCompressed=FALSE;
    + w0 m$ T- ]6 A; ~2 T
  751.         strExtLocal.Empty();1 S/ m1 t+ f; a$ e
  752.         strFullName="checkversion.txt";" h3 v+ S* r" o4 j: t8 A9 k
  753.         dwProgramState=AP_CONNECT;' y  P7 U/ m" \% T
  754.       }/ I1 z" Y* W) T" q; v  c6 e
  755.       dwStartUpSteps=4;
    ' f* H8 P* B( P8 e
  756.       break;/ C' \# |# Y3 _% K5 q8 P+ C
  757.     case 4:4 t* o* G) |% G5 i
  758.       {
    8 d3 B$ ?) D+ a& `3 I' N
  759.         FILE *fp;$ e/ F: ?, c. e+ j
  760.         char szString1[128];5 y- G4 j: \/ q' G* c
  761.         char szString2[128];* @8 v6 H& u- \' ~& h2 \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % W7 v# J: `6 w9 p8 M; N) u& V- f
  763.         if(fp)
    % x9 T; E$ u1 r$ C5 ?
  764.         {
    : o# n2 h% u2 z, P' z9 B: m
  765.           fscanf(fp,"%s",szString1);) U1 c: I; g5 j& j- _- F0 m% l' Q
  766.           fclose(fp);8 e; G9 O5 Q+ }
  767.           fCheckVersion=atof(szString1);& y1 g" r# ^, t7 `, K
  768.           fp=fopen(".\\checkversion.dat","r");. w( U# }5 |- i. l
  769.           if(fp)( }1 H$ E* r4 X. E' t. b
  770.           {
    0 M4 f% B' g, q9 u$ R( k# I# S
  771.             fscanf(fp,"%s",szString2);
    + Z+ q6 s2 m( [! K
  772.             fclose(fp);
    0 q' J& S8 R- X) w$ T, w- [% z0 e  e& v
  773.             if(atof(szString1)!=atof(szString2))
    7 I% M8 M. V- e6 f0 X% h
  774.             {) l# N1 }( m0 Z+ Q' h4 @7 [' ^
  775.               if(!Dn.Connected())
    ! C  e/ g$ d6 L( ~" c1 H. Z- s; k
  776.               {
      s1 C  C  p9 w* v3 E
  777.                 bFirstUpdate=TRUE;* E3 G- b; h8 m, b0 D/ k3 t
  778.                 dwTotalFiles=1;
    $ I9 p% ?% d' z. M8 h
  779.                 dwDownLoaded=0;: P4 c% }! T7 C- D; H0 G5 ^
  780.                 bSilentStep=FALSE;. Y9 Q! J1 L5 T( E
  781.                 bCompressed=TRUE;+ p# v$ d9 \( y0 N! R' {3 i
  782.                 strExtLocal=".\\DownLoad\";
    5 Q+ u7 s# [& O
  783.                 strFullName="update.txt";0 G: x2 N5 g8 w
  784.                 dwProgramState=AP_CONNECT;
    6 y' r! K+ Z+ t+ O) O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 Z) d2 R; r! z0 S+ c7 [; F; @
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; B% v* S9 X! e0 ~4 Y$ K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 l5 `3 q+ e/ b  }+ c7 U& F* G7 [
  788. / D9 K4 v3 z: u$ U2 K- A# A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % G- S8 j1 [) F( t
  790.                 unlink(".\\DownLoad\\checkversion.txt");" P% s6 j2 A6 \# M
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 o4 Q. Y0 v# W+ h: c
  792.                 {6 z/ r) ^1 q! W9 I" K2 f4 Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 q5 }6 a4 z9 z- V% [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 C3 U9 H9 l1 s$ }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ T3 e" W* a. ]" |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 t4 _' z7 e- u% [) i
  797. $ y% Y) f: E6 S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 Y( q- r& ^9 P  O& Q* h
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" z7 p/ ?4 s1 I& E$ }6 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& `2 t" N" @, [/ }: h* K) P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ?6 U/ j$ m3 y' j+ K
  802.                 }
    ! E+ A! C- M: z) C( W) W" u
  803.                 dwStartUpSteps=5;) B2 m$ ]! z- l( u9 W
  804.               }
    8 o% r4 S0 k+ R" w2 s7 e  Z+ c
  805.             }1 c' b5 U8 I  B# j% {. w
  806.             else
      s, k3 E  v' t
  807.             {
    ' ^1 K: T& l* d; \: Z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * t1 t4 R6 m( e0 y" h% @
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ K$ r& L* v" e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 e5 f) b3 V4 h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. Z& [, X  d9 |+ I0 g, C. h5 N

  812. 5 Z1 ]0 l( j3 \  R& J# K
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  z. [2 j8 x& M( y% z: K
  814.               dwStartUpSteps=99;
    ) N/ R- Z9 j2 l9 F5 e
  815.               bFinishUpdated=TRUE;
    ' ^4 C, e( B* G4 ?1 e6 r+ [
  816.               bCanUpdate=TRUE;4 Z7 ?' O7 `7 o0 ?
  817.             }
    ! [) k7 P$ O$ {: `' x
  818.           }- j7 ^5 g# |) L( v: v$ w; m; X
  819.           else
    4 g7 S( o( N  W/ J0 J" O
  820.           {& o* h8 b+ `: J7 I  v4 \. a
  821.             if(!Dn.Connected())
    . l: }( L& K/ e  `
  822.             {8 C0 g, }9 Q1 E4 t
  823.               bFirstUpdate=TRUE;
    5 h/ B6 d* T) R
  824.               dwTotalFiles=1;
    8 K' B4 I; s# J0 ]4 u+ }0 P$ F* O
  825.               dwDownLoaded=0;
    * @: _) M+ y+ \' N
  826.               bSilentStep=FALSE;1 F9 I; L6 x. I4 X& }  S0 W
  827.               bCompressed=TRUE;
      g% `* j- E5 E8 V; t
  828.               strExtLocal=".\\DownLoad\";6 E, v! |8 Y8 K4 U. {) A2 w
  829.               strFullName="update.txt";
    0 E/ J& V$ D5 ~; N: b! ]
  830.               dwProgramState=AP_CONNECT;% v$ H1 Z: e* P8 \4 r: m6 i0 |, y0 A- E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - R1 G, _6 q0 g( W" {6 ]/ S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 j* B: ^! Y- {; S3 ~4 |9 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 Q  m4 H' m1 ^% P  [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / \+ Y- b* Z! a+ o/ I
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - z9 e0 U' V; C6 Z8 T& L% x+ L
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)  m" c: N. T. p8 Y' F' \
  837.               {# x+ N& M/ P5 y9 @0 a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' d" g4 Z" s* X, {+ o6 C4 ^; u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " F# O' ?6 u9 C+ m7 g4 ^5 w3 y' b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      S9 p- l/ B' Y# r! ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 [4 H8 t$ n7 N' I
  842.                 3 l: P3 |* ~5 G8 b8 d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" |9 }) D+ L3 g/ A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# }& V* h% x0 D9 u: c9 P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. A3 s. R" H" u& H7 i* f+ U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; Y: e, y. K/ K3 J1 \. T0 r, \
  847.               }
    8 ^% a1 r4 b& x' k+ n8 B. f
  848.               dwStartUpSteps=5;
    5 c; p: B/ j: F; U8 y7 S/ d* I
  849.             }
    2 T4 s4 ~2 p, i
  850.           }& }1 Q  v/ C/ t$ `
  851.         }
    2 i& k' b2 p# i) Q& _
  852.         else3 l$ d% Y- X& i  q( g* x: e# J
  853.         {& I) u; a/ W, y% n8 x6 N0 \( A8 ?* v
  854.           dwStartUpSteps=3;
      I2 U1 P# j9 x. p# v
  855.         }
    ( L# L+ A& w) T. z& ~2 p& {4 e
  856.       }9 @7 m2 s! E) A7 T/ i
  857.       break;
    5 m3 F8 O' L) n& K6 p
  858.     case 5:3 ]  g" A0 @& `; U2 a
  859.       {
    2 u) \& {; p' \% k& [8 s1 W; k
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- s9 k, P% q# G0 u1 C
  861.         {
    8 g% C9 W* w- @
  862.           int opt_overwrite=1;1 D, t* L. ?+ d- a3 ]$ n4 K2 D
  863.           int opt_do_extract_withoutpath=0;
    ; D$ v  h9 {' v+ K
  864.           unzFile uf=NULL;& M: l7 D" H, b" p! \& y  C
  865. % N. i' B( n6 E8 l
  866.           uf=unzOpen("Wsa.zip");
    : l0 h* Y$ @% h/ l
  867.           if(uf)$ X, H7 ?* e2 {0 J0 g8 {
  868.           {2 l7 z% L0 a3 n2 t, Q; `
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* ~' D# w" v; q$ ~( \
  870.             unzClose(uf);; w8 S4 Q" `0 G% o5 k! y8 X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");' [4 c1 [$ p+ m1 @5 U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ e/ v4 `, d* L- Z7 O- V3 _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
      f! G4 H& O$ _1 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # m, c- Q6 S% Z' t
  875.           }, R: v8 u, T+ `
  876.           DeleteFile("Wsa.zip" );. M) g: k' ?4 K$ w* O1 p+ E
  877.         }
    # c% |7 U: {) f, [1 t0 G" @

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

9 k/ L! ?4 o* p% n, V; `0 Y; e7 H$ E$ }( t, h7 `# Y4 S& G. A- e

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2025-7-8 23:09

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表