CSUpdate.exe源代码

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

- Q% Q6 `$ `) t! G% n3 _
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 w) [& g+ u8 B3 j* l; P
  2. //
    : F; w$ |0 R8 J" b6 q& T6 t, T* B
  3. 1 m. G) n7 ]+ U% ^
  4. #include "stdafx.h"+ U" Z0 @' n. T' ?3 W

  5. 9 w" z2 @, g6 \9 `! M* q
  6. //#define UNICODE6 G4 G$ y5 B) j+ R8 B3 s' \
  7. //#include <gdiplus.h>
    5 T$ k) G' i$ V' C, D4 l3 r1 Y( b- b
  8. //using namespace Gdiplus;
    8 z7 p* k. g1 D0 O

  9. - `! ^' v( c0 ~
  10. #include "RevApp.h": E+ o0 f, Q% O6 P
  11. #include "RevAppDlg.h"
    - f. q) |9 r9 q+ B. K# o2 I! @+ b3 u

  12. / }  ?3 J* o' x/ t0 J/ K# J4 d
  13. #pragma warning(disable:4786)
    " b+ R) q$ j* P8 i: a8 y
  14. #include <map>: W9 j. U9 Q8 W
  15. #include <list>
    8 @% b" K& l  J3 _7 g
  16. #include <direct.h>/ T- Y% L9 Y. E9 F# _

  17. 6 m# ^. U9 l# {5 A1 r
  18. #ifdef _DEBUG) c+ h# _6 ]/ v( c7 b
  19. #define new DEBUG_NEW# s( a/ G9 K8 x0 \* E; \
  20. #undef THIS_FILE4 A9 j( E  p( V( g6 G
  21. static char THIS_FILE[] = __FILE__;+ t7 h- z: W# P4 O) Z
  22. #endif+ j8 z( Z, M! o4 ^0 x* A( H
  23. #include "SkinResDef.h"
    - A+ Y% e# j+ g$ C; ^
  24. #include "ChangeBG.h"
    * K+ ~9 D4 Z" H
  25. #include "AFXINET.H"% T5 _) ^0 h  X7 C1 `
  26. / b- {6 L/ F1 h, |( S) t' d
  27. #define TRADITIONAL_CHINESE 0
    ! W# y: i. ~/ D$ T
  28. #define SIMPLIFY_CHINESE 1% J! \# w  `' u
  29. #define ENGLISH 2# Z! \& }  ?! B" j
  30. int m_iLanguage = ENGLISH;) e% a4 [" ?9 M
  31. /////////////////////////////////////////////////////////////////////////////
    # j! K: z  y6 O. ^) ?
  32. // CRevAppApp
    . T$ [" ?  L0 m) _( `3 W( |
  33. ( Q  w: S& i2 U, _  I3 n6 Z, D4 b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & m- F6 a2 C( l! T1 P8 J2 G
  35.         //{{AFX_MSG_MAP(CRevAppApp)# ^# u1 F1 K+ Z% c1 N: x" h; t% ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( ]8 k( g/ ^! I& |, I! G; i
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- g9 w1 c: h8 b7 c, a
  38.         //}}AFX_MSG
    4 n* L9 J" m/ P. G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ a( _2 I  Q9 {% N  u$ u, N  t
  40. END_MESSAGE_MAP()" ~5 x- E, f. ^( @) W( e  `
  41. . M- {6 u+ D! p5 }) i" W, ?
  42. /////////////////////////////////////////////////////////////////////////////1 H6 N4 l* y( d' H: i
  43. // CRevAppApp construction
    & u! {9 m6 Y' E* }* W; q
  44. " |' a8 b' Y8 c6 m/ y. T7 H, y
  45. CRevAppApp::CRevAppApp()* F# {8 Q9 ]* X% _7 q9 Q7 j
  46. {
    ) Y# h' ~* H4 I  p# t) z& L9 a! t
  47.         // TODO: add construction code here,
    5 ?9 Y. w1 R+ u# W
  48.         // Place all significant initialization in InitInstance: K, X; a# C$ H; k$ G
  49.   bDisplayIsBig5=FALSE;
    / h" Z3 v! W3 F; Y2 K- v
  50.   bRestartUpdater=FALSE;
    . i, `5 p9 A7 V' n0 a
  51.   bFinishUpdated=FALSE;
    : l3 S- l- t8 c9 f- W7 i5 w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' c  S* Y  ~' U6 C6 V- ]
  53.   InitChangeDataBig52GBKS();
    9 ?; Y: D& z1 h! B" m! c4 u' A: U
  54.   InitChangeDataGBKS2Big5();
    1 Z' u$ ?' z& T7 h$ {& l9 L
  55.         //
    ) Y' X  Q3 \2 C) B5 |0 I
  56.         bClickRunExe = FALSE;; H0 e: n( @* L' X* J& K) K  @
  57.         //
    7 W2 E+ l. ^8 Z. c
  58. }
    : o$ U- e7 v+ h2 x
  59. " D  M2 `6 [5 {) E" j; I
  60. CRevAppApp::~CRevAppApp()
    ' A: r' c/ ]9 K* a
  61. {
    % f$ q' A- Y8 h% a
  62.         // TODO: add construction code here,
    6 n" R: a( r; e% N) I
  63.         // Place all significant initialization in InitInstance- R& @; g% _, Q1 z) A
  64.   EndChangeData();7 }: F- L1 ~$ F; n1 `6 V( y8 G
  65. }5 L0 v( B8 x: Z  _8 f0 Y

  66. 5 d4 @, Y: N) r+ N* ~
  67. /////////////////////////////////////////////////////////////////////////////) ^: y: o: O( S/ F  ~: }
  68. // The one and only CRevAppApp object
    ! `9 v7 Q1 J+ v! C2 P+ A

  69. ! J6 O% u, i6 c& S
  70. CRevAppApp theApp;1 @$ M: l' Q  ^0 }1 a% }3 n* j
  71. ' z' t5 M* i1 }- f6 z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). R3 C* @5 F/ p8 M9 d9 s8 f- y% r
  73. {5 t7 Y- t! ^  p  S
  74.   int iEOF=0;2 O8 Q* I- d' }) B
  75.   char szTempName[MAX_PATH];
    : ^. B: G# u6 Q( }  w9 r7 Z5 Q3 p
  76.   *szFileName=0;1 ]' h6 R% Q/ N  W1 x+ A" ~6 u0 ?" w
  77.   iEOF=fscanf(fp,"%s",szTempName);' o3 t" y& r; f% i2 X: o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , u6 y) R% j8 O! I5 m
  79.   {3 j3 J* Z; b# R5 U& |/ B7 }
  80.     strcpy(szFileName,&szTempName[1]);/ n; |& u( P2 H' b: r4 F: ]. M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) \& N5 }- {" e- a0 H$ e: {8 G
  82.     {
    ' S2 ^, G+ E) r6 |, w
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 i8 M2 I; O5 z9 T
  84.       strcat(szFileName," ");
    6 k9 @& r( ~0 |' M; U
  85.       strcat(szFileName,szTempName);
    2 [8 i$ m' ~, s1 \8 N# Y3 E
  86.     }
    ! [: M# J% M$ m( ]7 v+ Q
  87.     if(strlen(szFileName)>=1)
    % d; M* G0 y$ B
  88.     {
    1 ^) P' x  ]: f. l
  89.       szFileName[strlen(szFileName)-1]=0;
    , s0 G# e6 q% Q. n# B$ J
  90.     }' N- G( t; s& {
  91.   }
    . s) X2 n8 m  g" N: B3 K6 ]  d
  92.   return szFileName;
    ) s- t) ?! h# F; x
  93. }* Q5 M' Q. z3 u9 k* O. N) a

  94. 2 m) h8 ]: u7 I% a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . ^" K6 b8 Z( j5 [% }6 m8 c6 u
  96. {3 g% C1 g6 S/ _2 b. Y
  97.   FILE *fp;
    % C( u) b$ v# G& @  R- ~
  98.   char *key=NULL;
    6 ]9 S5 n/ z* R* g
  99.   char version[MAX_PATH];
    ! G4 s0 o. |8 {
  100.   LPUPDATEFILE file,olds;" J& q$ s* l" O8 T/ ]0 F1 y$ o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ Y, U! t% S' K% N* e5 A

  102. ; H& G/ h5 y9 n" ~: Y
  103.   UpdateList.clear();
    ! @. Y* x% C9 d: M4 Y/ x
  104.   UpdateFile.clear();
    ( j; u0 z( C& K0 \
  105.   if(GetFileAttributes(filename)==-1) return false;
    - J: C8 H" W3 j+ i; Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) z+ K6 w8 c# N9 c6 l
  107.   fscanf(fp,"%s",version);% `7 @9 X2 c6 q9 v- y0 U8 h8 X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 V8 J$ m4 |/ n* ^3 K% R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 [+ Y! K" o) k& l) U% z' y
  110.   {
    ! [. k9 `- w9 L- f' U( \* e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' g: P% u/ @) y5 L( b
  112.     fscanf(fp,"%s",file->path);' z% b  B6 W8 ~  R* A9 d
  113.     ReadFileNames(fp,file->file);* J) [7 r& \6 v2 P
  114.     strcpy(file->full,".");, |5 O7 \" b$ y9 B/ Y9 r0 {/ |
  115.     strcat(file->full,file->path);
    2 a& p4 Y2 L5 W/ G) g' j4 M
  116.     strcat(file->full,file->file);
    8 w5 O$ F, l7 M7 I7 D1 R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      ]8 L. `& g2 i% r; k% z) Q
  118.     {
    6 z" J  ^& y% o3 f3 I
  119.       file->vers=(float)atof(version);
    : r+ v( |8 V0 N/ ?% {) e* f
  120.       UpdateList.push_back(file->full);
    3 N1 y4 }9 w5 I8 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" _. d$ i. t1 \5 Y8 V4 B. w
  122.     }
    ; j2 V6 C$ ~6 z. O& K. g" n
  123.     else
    ) A0 I9 e8 ]. T% I
  124.     {6 N. u  }+ H; ], w; Y( Q5 A
  125.       olds=(*p).second;' ]+ o* }8 Q9 r. o) d
  126.       if(olds->vers<(float)atof(version))
    9 N# ?% z( Q/ C  r( v4 u
  127.       {
    , Q# \: d- e( c6 D; f  E5 y8 B; J" g# a
  128.         olds->vers=(float)atof(version);! O/ E  @! Q( f; p; G! w+ G# w
  129.       }
    - M/ c# Z: v, m0 m- M1 P
  130.       free(file);
    " w" F: H* A: h6 O! \
  131.     }
    , e! M3 A* I/ T9 }
  132.   }
    % x) Y) h# t- ?" @2 k
  133.   fclose(fp);+ b+ ^' d" n8 r: l
  134.   return true;( V) h, c% L/ _) I! E" v! X3 N9 W
  135. }
    ! T  K5 h. X4 D

  136. / r  \" `9 [/ ]# w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % _* N3 _" s1 `1 _2 x# l/ g
  138. {
    , L8 H0 D7 @5 G7 o: a& W
  139.   TCHAR  szFull[MAX_PATH];
    . W0 F: \* O. W9 Q/ @
  140.   TCHAR *token,*inter;
    9 j* U( d# S2 q9 K7 r
  141.   *szPath=0;, t$ M! t, y) S
  142.   strcpy(szFull,szFullPath);0 v! p- T: r& y( s* Q! A
  143.   token=strtok(szFull,"\\/");% F: a. V/ `  ?. H0 f. }
  144.   inter=token;
    ! H1 H" |# v3 x2 p
  145.   while(token=strtok(NULL,"\\/"))+ L+ d6 r7 t8 j/ G" X8 M
  146.   {
    6 I$ x7 z1 |) M! v2 d' q
  147.     strcat(szPath,inter);
    # P' M1 d- d  ], L! J% H- p
  148.     strcat(szPath,"\");
    3 I. i* v" b" E% n  Y0 w
  149.     inter=token;: J( S& t8 G5 P- }
  150.   }. S. m- S' q# X1 W" N% x: S) j4 u
  151.   return strlen(szPath);
    " ]% v4 S& s  s0 g( z, p0 o
  152. }9 v/ S0 v( Z8 ]
  153. $ T# {5 X! Y; X4 G0 N" D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 o; D" h" o8 [+ h  ?
  155. {
    , q$ J* ?- w% X) a
  156.   DWORD attrib=GetFileAttributes(Target);- L0 N4 r* m! ~
  157.   if(attrib!=-1)/ ?! O- B5 x& T" d
  158.   {
    4 G$ ]/ v8 I4 ?7 u6 E
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) `9 p; G7 P2 C2 t3 J9 |
  160.     {, ~- n/ ^# X+ H. A% \) U/ F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 j8 w. m( \% r- w
  162.       SetFileAttributes(Target,attrib);+ A; M- @8 Y! I( ?
  163.     }( Q( W9 O7 F$ V- K8 _
  164.   }
    1 n: n9 J( F5 J0 [) ?7 \: [
  165.   CopyFile(Source,Target,Erase);" M' |& D, V$ J2 E, p
  166. }
    - ^9 Z* T5 n  d1 {$ e

  167. 9 E2 {$ i. v2 u# o. X' _" i. r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 k& o8 F; u" f" {
  169. {/ x8 e4 U, M: g! Q1 D1 L
  170.      FILE *fp;
    1 W, h3 G( q8 ~
  171.      char  szBuffer[8192];
    ( j- Z0 \) [4 }& {: R+ x9 C
  172.   va_list  argptr;8 _& S+ U3 E/ k0 \
  173. & I! s- W( m5 X
  174.         va_start(argptr,message);9 l( r# I& u! W" h. }3 r
  175.         vsprintf(szBuffer,message,argptr);
    % {4 T. ^, ~. H0 e
  176.         va_end(argptr);, O, a+ U8 g8 j7 y# U3 c
  177.   fp=fopen(FileName,"a");# S& t& M4 |0 q8 C( R
  178.   if(fp)
    2 b7 A3 Q3 q3 w8 _3 m9 ^
  179.   {6 e8 j# D/ E+ ?& r+ s
  180.     fprintf(fp,szBuffer);5 L9 `% D' Z3 E: h7 N
  181.     fclose(fp);
    $ d) T7 {5 F1 u7 W+ _3 Z  c2 p0 u
  182.           _flushall();
    ( G( E; ?$ J" U" F. q6 Q# q; C
  183.   }% `; a, Y* j. B& [  d
  184. }
    + m; v2 p! b/ S9 p& h

  185. ( l& ^% T, G8 w( w% u5 S6 g
  186. BOOL CRevAppApp::Fclearf(char *FileName): h8 W" S3 e) }7 `0 y
  187. {0 i, T0 @+ }7 T
  188.      FILE *fp;3 O# w0 i2 x) P& C9 @4 {9 z
  189.     DWORD  attrib;& c/ J. C1 O( e" [) J6 Y4 B" p
  190.   attrib=GetFileAttributes(FileName);+ N9 R, K9 {5 L4 i! ?5 ^* S4 Z
  191.   if(attrib!=-1)6 G" `: A7 t- _' L. B8 t
  192.   {% X& d( C& ]2 V: Q' ^( x- t% Q; K$ w! i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      G6 z; |4 W7 i+ T# t" h
  194.     if(!SetFileAttributes(FileName,attrib))
    9 l: d2 m9 G" x# L
  195.     {
    $ }1 G# H  J% `
  196.       return FALSE;! M+ b* }; r1 Q; q' L: N
  197.     }3 w$ L, }% S/ v$ G1 K
  198.   }4 y8 E& ~, `# u1 J' U4 r
  199.   fp=fopen(FileName,"wb");6 W, H, K3 s& L( [8 X2 g
  200.   if(fp)
    ' M' d$ j! X+ d. q' T7 i# B: a
  201.   {
    ' L& u. {1 T3 n# B/ s# k
  202.     fclose(fp);
    , K' e, S. K3 g; Y6 p. Q
  203.   }
    * u" F7 S" D; j! Y6 b; l2 J
  204.   return TRUE;! {1 {4 N2 H1 e9 x3 G% L
  205. }9 t' r! A8 k( ~1 k# |

  206. 4 y) h8 X5 L7 M7 f7 m
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / Z$ _* e; f6 ]6 l+ d, D& K- E
  208. {; c" J. I; H1 f- g( ^: u
  209.   char filename[MAX_PATH];* m) u: \$ ]2 n/ t5 l
  210.   LPUPDATEFILE file,olds;; @/ F, e8 p; I  \
  211.   std::map<int,CString>::iterator i;* b  h- K8 L4 S: |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , K& |3 S; v( B' D
  213.   std::list<CString>::iterator l;
    ; m, k8 y' J6 ^* N
  214. + [5 ]; y& r& O" T  @4 _  u
  215.   if(bFirstUpdate)7 k  ]% T8 E$ S  @- d
  216.   {
    - u1 b7 f7 t! e( |; o5 x
  217.     dwCurrFile=0;0 s5 w. f  d& b8 N9 D1 Q
  218.     bFirstUpdate=FALSE;  }& Y' A) A4 i$ _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); Z3 r! k/ ~( m. U% G
  220.     {  c1 u* {; A* Z
  221.       dwTotalFiles=UpdateLocal.size();
    ) R6 q% K5 s# _. ~6 u4 f! G) a0 B
  222.       dwDownLoaded=0;7 G+ H: `# `( q2 ^4 s
  223.       bSilentStep=FALSE;6 v# w) R2 m# q" A
  224.       bCompressed=TRUE;
    # V; \3 K3 A2 P' H! T6 H1 i
  225.       strExtLocal.Empty();
    ! ^8 o" n+ F  r* d; L6 f+ S
  226.       strFullName=(*i).second;
    1 ?. n2 C! L+ ~  b2 {. p7 n7 x
  227.       dwProgramState=AP_CONNECT;
    / _% f% o9 v* T' d9 ~: O9 c" r
  228.       return TRUE;, M  q  L6 ?+ o6 A, x9 @4 r
  229.     }
    : {4 }' O+ _, i' F9 k  y3 z
  230.   }- V: \8 \5 f0 K
  231.   else if(bRestartUpdater==FALSE)
    : z0 N+ {4 x1 B/ @* S! y
  232.   {
    ! T" e! U7 a6 c5 y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' ~& b7 s6 T3 y* B6 O
  234.     {
    4 c5 Q# M) P% A3 A1 D
  235.       file=(*p).second;
    , Y; k3 p4 {7 ?6 c; B3 e0 k
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; `0 R% i1 v4 X. K
  237.       {8 t' Z8 `/ P8 a; B" u: j# R4 [" @2 \
  238.         olds=(*p).second;1 [) _3 e: I" c+ V0 l2 s
  239.         olds->vers=file->vers;
    - D9 q2 M8 V- `2 x$ {
  240.       }
    " g7 K% r5 b2 u0 l9 H6 l, I
  241.       else
    1 Q5 b" \9 A9 t! Y1 y* ~, R
  242.       {" J: B6 X. k! t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, |& B: `% h- r6 r2 H- r) V8 t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # ^, B+ `# M5 _8 y7 _4 n# i# Y$ m
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' W! ~/ g" z. t4 @) J: q- o* u
  246.       }. ]* V0 z  k  W/ f- A- d+ O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& ~  @# r6 e% W2 U0 N: r
  248.       sprintf(filename,"(%s)",file->file);
    8 d" d1 f+ n( \1 l( S  z, {
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 E) `: O* s# Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 M% j" @) |9 w, B8 s
  251.     }$ m1 ^- \- K1 w3 j2 l0 j, o
  252.     dwCurrFile++;
    # S) A4 n% F& L1 l+ \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 C1 R  L' D: y! V6 O6 Z# t- }# X' ^
  254.     {1 p' k6 H6 \/ O( S" W- d
  255.       bSilentStep=FALSE;
    % x7 i4 M6 B- G# b. c
  256.       bCompressed=TRUE;$ O8 l# |- T& S* d
  257.       strExtLocal.Empty();
    % a0 @3 v! F8 M' b) a
  258.       strFullName=(*i).second;( O. C9 }( \7 `+ @9 P
  259.       dwProgramState=AP_CONNECT;5 e' j, r: d$ ~' x) F/ o
  260.       return TRUE;4 F& b( p1 ]" X& |# q& M
  261.     }! S, K% Z3 ^9 B( F
  262.     if(!bRestartUpdater)6 n1 M0 ]! ?! f* y0 q0 n
  263.     {; L) B% Q$ i# Q6 a
  264.       int iCurrSize,iFileSize;, P! a0 Q2 P4 _7 F4 {4 e; y
  265.       iCurrSize=0;
    . V6 }  O5 I' s# R
  266.       iFileSize=UpdateList2.size();
      B# s5 _5 X& D' d2 I8 Q# ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + b* J% x; r" G) k* e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 ^& H. B" R5 y9 {2 g7 y' u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 \  O! r0 n+ p6 X- F  e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) E: g' H1 Y9 B9 n8 G
  271.       Fclearf(".\\update.dat");
    ) c' F6 K1 I! ?! j# ?8 x
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # [/ {0 }2 P- n9 o: t' g) h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ X6 C' z; Y1 z
  274.       {
    , N/ e' s  O' H' i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . z$ o- H9 W( P* i  x" B
  276.         {
      k3 w" c  o1 {( F4 w6 _, o) O/ i/ F
  277.           file=(*p).second;# H% @& F" @1 d, S  k
  278.           sprintf(filename,"(%s)",file->file);1 O5 L  ?# P  _& [) N( _/ Y4 y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ f  _* ~3 V8 W% ]
  280.           iCurrSize++;
    0 O: H' m7 q+ O5 M9 ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* d: t9 j% q1 V+ z$ D4 ~9 j2 R
  282.         }
    + b  O2 ]. O) Q: H( q7 J
  283.       }% [- Z# Q1 ~" L2 u/ h5 B7 ]
  284.       unlink(".\\update.txt");+ n9 }# y9 h/ o
  285.       unlink(".\\update.tmp");) c) [# L6 R( D, E: s" Y% H4 h
  286.       Fclearf(".\\checkversion.dat");
    $ ~6 n& X) Z2 ~. Z7 V( f& X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 X4 b, F: B1 c- I; Y! p/ P( Y
  288.       if(UpdateLocal.size())
    3 s+ }* z# Y7 X
  289.       {
    * i6 s4 \6 E# {% v; {* c+ T1 W
  290.         UpdateLocal.clear();
    6 h0 f5 X- h* T% Y; ^. S5 A
  291.       }
    ( d* G5 i- [( N6 L9 Z
  292.       if(UpdateFile3.size()); t% j5 [" k  u' S9 Y
  293.       {
    7 e* Q  R& \: g+ v; x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 z1 c& x. q/ d4 P0 s7 A% ]8 k; y
  295.         {
    5 b& r( _) C% _% ~' `
  296.           file=(*p).second;
    % v2 b  r" E4 W/ c7 J& r8 j1 U! W
  297.           free(file);( g8 W) Y3 s+ A' ~  ^8 r
  298.         }$ J9 R1 u1 W# a& i+ J
  299.         UpdateFile3.clear();
    " ~$ s/ k7 [8 x% k
  300.         UpdateList3.clear();, z7 R4 f4 @0 ]
  301.       }
    1 b* v0 W6 T( D/ Z" t  ~
  302.       if(UpdateFile2.size())
    " ~8 B3 d# h* V' ?' i- s
  303.       {0 k; q, A: b1 W0 I5 ?* E& n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 U# w6 h$ s2 J& [
  305.         {
    2 ?1 K4 q; x- q, O
  306.           file=(*p).second;
    , D$ D( j; S  Y. F# |" u( Z9 B+ z
  307.           free(file);5 \' F8 h) S# E$ V" W0 Z% Z
  308.         }
    . L1 D& e8 P4 J
  309.         UpdateFile2.clear();
    4 {9 g  D+ d) i& V: n3 S; a) O
  310.         UpdateList2.clear();
    ; p1 m1 r  g) T( N$ C
  311.       }
    8 F4 H' i& B% ~2 k: D3 o# p
  312.       if(UpdateFile1.size())6 v% V5 x* n0 `% M2 i+ h! K
  313.       {
    ; B, H5 r. ?( c! P( \8 ]# T! L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & T: o. A/ |5 r. u
  315.         {
    5 _( k- k* [# H" Q; I
  316.           file=(*p).second;+ [; A& G% Z% K
  317.           free(file);; k2 `' {4 Y7 y) z9 s
  318.         }
    % F+ V0 l& d5 [& i6 @" e
  319.         UpdateFile1.clear();
      M+ h9 s3 M- g# G1 T; q
  320.         UpdateList1.clear();
    ) D3 _" w+ o+ }
  321.       }
    8 P  c( M( t' b3 A% q6 `! t8 N! r' B% f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 o3 q3 v! M! T  z' m
  323.     }
    : n5 P' U3 n% F; X1 |& i( M- A
  324.   }9 C2 u0 x; Q/ S% S  t; `$ _+ L/ z2 f# \( e& h
  325.   return FALSE;" o9 G) F4 Q" M1 `
  326. }7 }- G( S( W" X
  327. # g4 B! D( f. X/ [" ]3 a
  328. void CRevAppApp::ClearAll(void)$ \  c+ G0 B# j2 C" n
  329. {  \# P, Q: c% u7 Z$ o  A( c
  330.   LPUPDATEFILE file;' a: C1 c& B, o/ K9 s, l. j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; L* L' S% A% r5 {. @0 T% U# N

  332. & |) [3 G  {& p1 p" h
  333.   if(UpdateLocal.size())
    , b" ]6 F8 A* l7 `- n7 w6 P
  334.   {
    8 z# |# k% b" h; d9 d
  335.     UpdateLocal.clear();1 p8 [* ]' f  F& y9 i# D8 d
  336.   }
    ! s7 e' x! u3 Q5 l5 \' p& f! ]
  337.   if(UpdateFile3.size())2 \8 y, M) `! }/ v) v7 w
  338.   {
    6 ?3 Z1 i4 v! |. o3 b0 A: ^) @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( p  [, D! z& V. q1 U" y! Q& M
  340.     {1 H/ H4 ^+ V. J! H" F# }4 i2 l: T
  341.       file=(*p).second;: n- h6 I: I+ X9 D! E- G
  342.       free(file);; m% E% s3 h8 D9 n$ q
  343.     }
    : E$ G- y  b9 P
  344.     UpdateFile3.clear();, G/ N2 [' p4 |/ ?  d7 r
  345.     UpdateList3.clear();5 E- v* D& W: I# a8 N+ b
  346.   }. K! |- `4 }9 n' |( E8 G* q
  347.   if(UpdateFile2.size())
    , \; W! A. H$ v* h& [( }0 i' O
  348.   {
    5 m1 Y6 X! |0 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 z) Y9 s3 B1 a  S/ Z$ t& U8 e- K
  350.     {1 J. h$ i+ D- b5 X9 t5 H4 N
  351.       file=(*p).second;
    % n3 V- [. b3 K; g, O  d* O
  352.       free(file);
    - p! K. Q. U; y5 Q) |% N9 o& |
  353.     }
    , q* [) t* b  ^4 c
  354.     UpdateFile2.clear();
    8 B/ {8 E9 G6 y# \- q3 {
  355.     UpdateList2.clear();+ I; `" I7 W! q' E
  356.   }
    : u; s5 g, l5 \( ]& A3 ?
  357.   if(UpdateFile1.size())
    5 ~: @; `7 w8 [, w+ Z1 Q3 q9 C: t; P
  358.   {
    % P, l3 O* u5 j  r2 V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; i# Z3 ?  `: g7 ]4 q
  360.     {  q) [9 V9 l( k" l
  361.       file=(*p).second;0 {: W0 u* x6 i9 [
  362.       free(file);! _- h5 E+ O- |
  363.     }
    , m0 H2 R* o; E- o* B9 F
  364.     UpdateFile1.clear();! |! @" j0 F/ @+ Z  S) [6 p( G
  365.     UpdateList1.clear();# d. p- P  ?; c% V  H
  366.   }
    3 G- A) q9 U8 f1 ?. o0 R
  367. }  
    ! W/ L) X& a- ]3 V* W! |# k* |- O
  368.   0 f7 f9 a! o! t$ X2 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ F- H( w' V! ^, z! ?7 E# x5 @2 b
  370. {: h, V3 N' K0 i
  371.   int c;3 X  Z- r1 a3 P* j
  372.   LPUPDATEFILE file1,file2;
    " D  a& w  w. |" Y$ K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: F- M8 W* O; H% K( {  C0 T8 G
  374.   std::list<CString>::iterator l;. }  Z9 i7 R5 S  n5 W" `

  375. 7 d% s) z# ^) q
  376.   UpdateLocal.clear();( a0 k5 c; t  F: u* \9 h
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 @9 b. r; b" v6 f' G8 B4 B9 K; d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 Q- r9 J9 ~) O# _% h3 s. B6 O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 \7 L2 x. j# z) y2 r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    0 C$ E- P$ @( d! f! w
  381.   if(UpdateFile3.size())
    - P* Z9 m+ L1 ^/ F1 C0 k
  382.   {
    ! H$ ~' `$ p" w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  e# P2 t9 T6 h) `& |. R: X
  384.     {
    ) Z  e/ L" o  g" \9 @
  385.       file2=(LPUPDATEFILE)(*i).second;3 e& I2 n6 f% X$ r9 _+ f* D$ A0 _: a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ h! s9 ]* s1 m$ N# O
  387.       {
    2 b. c' a% D' j8 o
  388.         file1=(LPUPDATEFILE)(*p).second;2 L: x2 g( q1 e8 C  ~
  389.         file1->vers=file2->vers;
    5 F; X2 s9 L8 e3 Q: ^7 E
  390.       }
    . U% g0 f( Q  g2 Q( d* C
  391.       else) M) a5 J" b9 |0 ~: b9 I. Q( M
  392.       {
    ) s4 R! R  d  W' p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: j8 S, @" R- O* A; `/ f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ i% Z; f% \- K* T3 c- C0 [8 E
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* j# [& r' z5 m0 }* d+ S9 o
  396.       }5 H* J* T" R$ ^( h1 j* i2 Y$ H- l* H
  397.     }
    " F' s! U8 L9 f" V* ^, I
  398.   }4 C- t$ z6 V4 _2 V. f; ~! q* z$ R0 G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( z5 B% I$ ~) f  [0 h& x$ F
  400.   {, ~3 D3 a* v2 ?, h7 x$ Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* `6 C) \8 |0 s& s9 }0 m/ Z3 h" c' D
  402.     {% ^! S( ~1 a5 z4 M3 _' U* P3 {
  403.       file2=(LPUPDATEFILE)(*i).second;5 n7 s1 ^' R0 T$ Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); q; W, i' ~5 e4 ?4 o) S
  405.       {
    ) {7 {5 W9 y) {, k9 {, p0 E
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 _; d# o6 m7 O! x
  407.         if(file1->vers!=file2->vers)( ~1 R% N1 E) n& M4 u
  408.         {6 G6 S( K% W" w0 k$ b" z) H" w8 k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # ]8 ]' G2 C0 L
  410.           c++;" t7 m' Y, B  X9 e. x
  411.         }
      A) u& s# s( D; b5 y( R! |
  412.       }% s7 \! d+ n+ \+ ~' X+ a* w9 z
  413.       else
    6 r8 _1 ?: d, d8 X7 @
  414.       {
    & {# u- w0 D2 N3 F+ H& s: t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + ^4 L& i8 ~. O6 T3 Z. P
  416.         c++;% O$ X8 X% k1 ~' |/ k2 |$ L  z
  417.       }
    / m3 F" i, n7 d2 `5 @, _1 {
  418.     }& @8 U/ E4 @: h& h
  419.   }
    " w1 p3 S9 v+ p9 B) ]* _( T9 Z
  420.   unlink(".\\DownLoad\\update.txt");
    1 Z# E3 L4 M5 d' V1 J1 ?" Y
  421.   if(UpdateLocal.size()) return TRUE;. y7 ^$ R8 w" J& ~6 N$ L
  422.   else                   return FALSE;
    / n5 }3 U9 m$ C/ n* m
  423. }" d1 V$ m- B) Z

  424. + F, J2 w7 y7 I9 ^: j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". x4 n: p% _7 T/ F# b& i; @- c, P6 S3 J) F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ o% u7 q6 Q: _- v% r% `- @

  427. 0 I+ ^; @/ z/ g1 ?+ h( I  q3 D

  428. 7 g; J9 ~- G8 i- t6 @1 j

  429. 7 h5 l; i0 P2 p* [! p, w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 ?$ Q, e" |' K; {/ H6 b7 @5 _
  431. {) I7 G$ s5 c' Z6 B( o, J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) Y0 v- [  ~# G; S' d6 g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% Y4 o4 [0 D7 R0 N& _# x0 g
  434.   {9 b2 o  w% L# ^
  435.     char szLanguage[50];
    ( U1 g% x$ ?8 I0 y- q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ }, q7 f# ?- t. r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 K0 e) K$ a$ m; b. ~3 |# r  ^1 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, ^6 ~8 ~: Y. B1 n: f* N
  439.     else                                   m_iLanguage=ENGLISH;
    ; N& A5 Q) i* e% B4 {9 P+ _
  440.     char szRegister[100];0 C/ r; B+ T! }* q9 P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 e+ U7 ^6 a2 B, h; b, C) G6 \
  442.     strRegsName=szRegister;
    6 ~+ h, U: I1 }% u7 v
  443.     char szPatchURL[100];3 ^& H; _4 d+ ^6 k6 ]  e/ |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 f9 v; R: V  r/ j8 c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 T8 a$ q2 y. }2 q* P
  446.   }
    1 P2 N$ I: x- h! `4 ~9 Z# S& a) J
  447.   else
    2 @- w+ E$ Z( o3 k9 ]2 V7 L# C* f
  448.   {
    . B" A, f7 @8 m0 }/ c( ]) @* ~. G/ v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, z+ m; P% a9 P& E
  450.     strRegsName=DEFAULT_REG_URL;
    5 K+ Q% r: I" h1 s9 R4 u8 _7 G
  451.   }( E5 d- T1 D8 N! ~: @. j9 D' e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ( v1 _% S9 W( {6 X' |
  453.   {
    # x* I5 u  l7 W4 \+ Z
  454.     char szIP[50];
    ; ~! p* F* r0 w
  455.     char szDIR[300];4 i) `/ q( V0 R1 ^: b" N" U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  E% I6 K6 F4 T$ X4 R+ S
  457.     {" @6 P4 u2 X+ e# O3 Z  @7 h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * F4 s- Q$ k, s! f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! T/ ?; K5 O* u6 ?% s4 S; x1 S
  460.       strHostName=szIP;
    , H$ H2 r" D% z  C: R; e& L; b
  461.       strHostPath.Format("/%s",szDIR);
    & B$ r9 W, [' P8 O% ?  A
  462.     }/ U8 G4 b8 Y2 N; O6 H
  463.     else
    * Q" z, A2 _# p$ e1 D
  464.     {
    9 B! ]7 T# ?, L  o# @9 p1 R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 z! d. H: c: x8 K1 I
  466.       {! p0 D: ]5 a& R5 Q$ s$ ?
  467.         char szLanguage[50];% p9 G6 B8 U; n4 j# B  H/ e: l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& v, i' i( o& R, o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( y' C$ @+ T5 L9 E, s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ g1 N! a& Y: s) G; g
  471.         else                                   m_iLanguage=ENGLISH;
    4 u5 `. [4 a1 C/ u! z: d5 l) A
  472.         char szRegister[100];9 G" y( t" x# P/ ]) M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; o* z+ b3 k/ Z- n9 ^, S* ]
  474.         strRegsName=szRegister;; C: f* B0 W5 p) ]7 a- ?8 C7 }: h. ?
  475.         char szPatchURL[100];
    . _) V) `( f6 ?. R, d2 V+ n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + k* p$ L" c4 E4 O1 X3 R) }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 G% ~4 ~2 X3 c* t
  478.       }
    + X' j" e* T7 O0 U/ V
  479.       else
    $ d$ S5 L- v4 B. v; Z4 Y
  480.       {0 n: f) n/ j6 `  n7 `+ ~: U* b
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ }( F0 B6 A! r# W' }9 w
  482.         strRegsName=DEFAULT_REG_URL;+ @2 {* J3 z( j0 C  W( L' ~
  483.       }( n/ T$ b$ l. M0 r
  484.     }
    : F9 N+ x/ ]  H" [, B
  485.   }* }1 k$ K3 M1 ?% C7 w- ^+ Y
  486.   return true;  r. x- D. R' D+ S; Y* J
  487. }
    : f1 q- ~( N$ S8 i/ x

  488. % L. K$ P/ y& }
  489. #include ".\ZLib\unzip.h"# H6 T/ W6 `* ~% `- {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 K8 S! j% o8 f/ n7 G  L0 Z. R
  491. /////////////////////////////////////////////////////////////////////////////
    8 Q$ x0 b3 }8 n, c5 a: u6 w2 C
  492. // CRevAppApp initialization
    ( t' q, J! R" M8 q
  493. ! m0 O$ v( T  {9 _
  494. BOOL CRevAppApp::InitInstance()
    ( U# M2 j5 T8 b7 G/ z4 n
  495. {
    : \. W- D, y. z1 j3 Z8 @' b: S" T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  h- ?- H! M7 S6 R- O) ~$ @, s

  497. " A6 p3 J- a5 U- S3 [
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ ^  m3 J/ ?$ ~" {; ^3 j; X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + {' h/ r4 E2 B* A0 x& ^
  500.   {
    1 l9 R9 i9 Q7 |$ n8 b4 f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) h# `3 ~* _: O! `) m% l* }3 u& |
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 T, V. R$ [7 q% @1 \. _, Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 w1 C9 R% s5 x! S
  504.     {
    . g; C6 O* s% F
  505.       strcpy(szPath,szPathTarget);
    8 S6 {2 C8 e' a6 W' y
  506.       SetCurrentDirectory(szPath);
    7 d4 p" w7 P  r+ x& ]) d! g9 ]
  507.     }
    + l# v8 V* C9 [/ [# m6 |6 X, z$ ^
  508.   }
    ) E) S4 ]" b1 Y3 w4 t) Y( J6 l
  509. #ifdef _DEBUG
    8 U1 z- h" g- x0 H( R% ^' k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), F/ M: |) V0 u' ~! f: N+ K" w: f
  511. #else
    9 c7 c) c# M# q  R* k( Z+ |
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 Q1 J0 \2 |& r: j- p6 q
  513. #endif3 l1 n+ g0 a# v. O
  514.   {! p; g3 m- B; L" f3 B
  515.     char tempFileName[MAX_PATH];' w: r# v+ q; G$ T8 k
  516.     strcpy(tempFileName,szPathSource);
    , e( t' @# Q5 k* J+ Q2 m0 e6 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;  {4 `0 h" g+ Z1 ?7 }  F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( O3 H0 A; I1 Q& F' k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% v+ M5 e! p" s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! z" C+ l! b: C, D1 Z  Q- Y  l
  521.     return TRUE;3 s7 G1 h% O$ |$ H4 l1 n
  522.   }3 C- \1 Y6 X9 Z; Y
  523.   // Nuke 0118: Delete run.exe$ I7 j1 j, S+ Q* f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 v# f& L# h% T8 e  X- }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# J7 Y# ?+ G0 D
  526.   if(!ReadCfgFile("Config.ini"))
    & w! J; V, j5 V
  527.   {
    # ]6 m2 H( |# J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 P1 u4 w5 I/ X' j- C
  529.     return TRUE;
    $ `, _6 z- {6 z8 W$ R$ X
  530.   }
    " }  i+ b! ?  u, Y8 S
  531.   HANDLE mutex;" V0 |- q- m) b9 G2 n5 P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' M: O# d8 T' L% O9 x( {5 N3 Y0 ^5 q
  533.   {( X+ Y( I: q# F/ K% c% L
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! q! E1 n3 F9 L$ O
  535.     {
    ; c" k- j8 L+ ]" G! l0 e
  536.       CloseHandle(mutex);
    , k2 P. {* n1 M8 r; J2 g' r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# f; O( o; X  k
  538.       return TRUE;' T: Q9 j: ]4 C5 p# e8 J% D
  539.     }4 z# e1 E" S" h" k: T+ U: [
  540.   }  ! W/ y4 y6 t. _6 `/ k
  541.   CloseHandle(mutex);
    ! m4 k, R4 R8 |3 u7 W- i" n

  542. 9 b" G3 I$ e0 @! _4 {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& r7 O, w$ }: F. i( q1 p
  544. 8 Q) l6 A# T" V: [$ K: _$ P( o8 X
  545.         AfxEnableControlContainer();) ], u+ C/ o8 h+ \5 ?

  546. 0 z/ N# V6 P( l' z+ \
  547.   bCanUpdate=FALSE;4 p0 Q3 I4 N" |3 `- [2 E7 x
  548.   dwStartUpSteps=1;/ v7 |* K! Y8 w1 I5 {% Q2 g# P4 P
  549.   dwProgramState=AP_NOTHING;
    " _6 I+ p  m, \. Q" \9 o& r; O( Z

  550.   X7 V* T" T9 s3 @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; e2 g. B9 S3 J% R
  552. ! j- q9 `; U. s1 k" V7 @
  553.         // Standard initialization% W* x: S. d" ~' W( d& P* [8 W
  554.         // If you are not using these features and wish to reduce the size6 n) [, R$ Y8 E: N0 A  C/ O5 ]& k0 T
  555.         //  of your final executable, you should remove from the following2 e8 F4 Q! Y6 {5 D6 F8 Z6 B: W! \4 X
  556.         //  the specific initialization routines you do not need.2 }: ]( @. b" K

  557. 6 _( n( ?% E% {* L7 n
  558. #ifdef _AFXDLL# u: W1 v7 }4 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + i" _) p# x! y% j- J! D4 |
  560. #else! _# s7 S! Z1 D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 Q# O3 j+ U2 ?2 F% X# R' ]. f
  562. #endif
    ( o. \( S# `% `: ~' g( F, C' F

  563. 3 X* O: A* o+ m7 m5 s' r# j
  564.   dlg=new CRevAppDlg;' x' o: F1 J( @- z* t! o
  565.   dlg->Create(IDD_REVAPP_DIALOG);, z& Q' H& o9 |2 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & ~: r" S+ f' \
  567.   m_pMainWnd=dlg;4 p: A& S% S) y$ p7 Z' f. R
  568. ' V6 X' N: u3 D9 K3 a, X6 k% I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 U9 _- ]2 N9 B9 }" ~; ?; F- t

  570. 7 H3 V9 z# v% O+ P
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 V* f, L; K" w- s  R, S3 g0 l
  572. //  ULONG_PTR gdiplusToken;
    0 f2 K- j' B; r2 r  K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! y0 w) e0 P" |# a3 E/ [

  574. 1 a7 v1 n; `- g& h4 }
  575. //        CRevAppDlg dlg;, N) f. n2 g0 R3 S9 A) U
  576. //        int nResponse = dlg.DoModal();2 o& y4 z2 D& `7 k% U
  577. //        if (nResponse == IDOK); a7 G1 h1 Q! X
  578. //        {( @) I* D" q4 G2 A3 {% ~2 C' f
  579. //                // TODO: Place code here to handle when the dialog is
    3 g" W2 }$ A4 \0 v, n; L
  580. //                //  dismissed with OK0 R5 F1 |0 ]3 t' \0 @$ j
  581. //        }
    0 {" G3 M% w. `0 V1 e9 B: A& W' c
  582. //        else if (nResponse == IDCANCEL)
    . f( D5 ~) {' z2 }- G: J2 S
  583. //        {3 j2 |3 z  F/ o2 T/ T' Z1 O8 v
  584. //                // TODO: Place code here to handle when the dialog is$ ]! ~3 V4 h: f
  585. //                //  dismissed with Cancel6 U9 d. Z0 J* o; C
  586. //        }
    # M( R& f# i. K& ]/ V4 X
  587. $ Y$ b4 I- @" f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + C! W0 m# `9 W8 S2 d- l
  589.         //  application, rather than start the application's message pump.
    ( ~/ S, ^0 B- a3 ~0 O' z
  590.         return TRUE;
    7 f" g; ]9 [& x9 Y5 o/ W% o
  591. }
    % n0 h5 w  u* _- ^2 W$ Y4 X4 i  l
  592. 6 h/ M* m  Q' a' @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) v: g6 r- ~+ K# J. s3 ~& B
  594. {( V, _7 l2 ?7 g( ^! b, {5 [/ I
  595.   int i;
    # j5 g5 f6 T4 ~$ S
  596.   char *szRet;
    * B/ ^& l5 D! V3 H0 n9 y/ ]7 S# J5 N
  597. 3 k' O- ~: q9 [) E3 L4 Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }* k* C! Q5 y& h* y; \: R
  599.   if(sztoken)
    7 {* f; _1 ~/ j4 H9 O" u& o
  600.   {
    8 D2 c4 F( H$ B
  601.     szRet=&sztoken[itoken];
    3 R, b, S; ]9 F
  602.     while(sztoken[itoken])% `# y5 \/ P6 ?. B* x( i
  603.     {+ H: ^1 }4 U2 ~! Z$ P8 ^8 y% u
  604.       for(i=0;i<(int)strlen(token);i++)
    2 v. m* e0 ?* I# g* r
  605.       {
    $ F) q  Q0 ]# \  I/ G: G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 E. C2 y; t& N" o  g
  607.         {
    2 D5 c9 q+ _; h2 M# t
  608.           sztoken[itoken++]=0;
    4 W5 [. F, Z, a) N$ a, \% p
  609.           sztoken[itoken++]=0;
    & X: D2 n& y- h5 l) Y4 B( F
  610.           return szRet;
    $ K" l! x- P9 x% S( i) v- T
  611.         }
    6 g. M$ X7 Y! f- n, ]" r/ B
  612.       }
    ; {. L# U, W+ T# K, K# `3 r
  613.       itoken++;
    + k$ I: M  `6 a2 Z9 C, Y
  614.     }
    , O7 H6 r; ^1 X7 [9 E
  615.   }
    7 |* {8 V0 J% E, ^, w
  616.   return NULL;
    2 g9 h; f, V% ^- T0 ?8 g
  617. }6 j8 ?% P6 O: W! g6 d) s/ [
  618. , J5 B- P1 s8 r) i
  619. void ProcessProc(long Total,long Current)
    , V% b; i" z0 q1 }" }5 j8 {
  620. {
    ' \# h& ^& \) Q& }. E) P$ ?
  621.         MSG msg;7 Y% U5 A+ e- u$ Z0 I2 n3 y- K5 w
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 v1 a8 B) v, u) n7 o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' ]! o" M. {* h( [$ `. y& D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 R- Q/ ?. A' j3 F. }* _2 u& o
  625.         {
    3 j0 G; l0 x; H3 J  R; g! F
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # L  K6 E( L' U7 o4 t" x
  627.                 {
    & s1 E9 ]6 Q+ E
  628.                         return;
    ( B/ X1 ~: |# J/ }
  629.                 }" E9 S3 W) t" o% n" K4 A! P" t
  630.                 TranslateMessage(&msg);# ^; N9 p! C% R' e; g% E
  631.                 DispatchMessage(&msg);) G! }* g3 e$ h8 h4 K
  632.         }       
    # y5 X, K: b9 l" S' B, C$ ?
  633. }
    0 Z8 j8 h5 ^, z
  634. & i* N- C! H  P0 F* _
  635. BOOL bFirstChar=TRUE;1 e% |' N" W" j: n
  636. 9 e4 C9 ]0 R! u. _" X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - V; V1 n  T& M" g" h+ e8 o1 ^
  638. {* M9 L/ I; Y# X- T
  639.         // TODO: Add your specialized code here and/or call the base class
    0 f6 E8 {; _$ m& Z8 ^: `0 d* j
  640.   switch(dwProgramState)
    6 `5 O' Z! T( w' T
  641.   {
    7 |& Q% D+ \6 o& `
  642.   case AP_NOTHING:4 O4 \2 s3 p7 \- p
  643.     switch(dwStartUpSteps)
    ; m; C5 Y3 D( j- Q7 \1 R% X( N
  644.     {
    0 y6 ^9 o" _5 Q) P
  645.     case 1:
    " {6 O& I  O0 T3 X- H
  646.       {. y7 j" Z: H* c  i5 u9 S, a( W
  647.         int i;7 s( L9 V$ u9 j; @8 q9 w; I
  648.         CDC *pCDC=dlg->GetDC();3 b$ s+ O: K: v3 ^3 V
  649.         HDC hdcwnd=pCDC->m_hDC;
    " i$ ~3 B. E. v5 G
  650. //        Graphics graphics(hdcwnd);
    3 h( s" Q: f' }4 K* v; i4 D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. y- J4 ]  Q& U  R& [/ w& G+ x/ c
  652. //        INT iWidth=bitmap.GetWidth();- o  t$ ~; [2 W2 s) W
  653. //        INT iHeight=bitmap.GetHeight();/ H- ~. S% O+ M  r: F
  654. //        Color color,colorTemp;, P* P" C6 ]* n8 [
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . V0 |8 E/ c/ x+ U
  656. //        {0 ~/ l0 {4 l6 }* A. U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% ]( p6 s* n$ t3 Z4 S
  658. //          {! M0 a+ F6 ]2 m2 A% a$ N- k' |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . X6 J3 k% Z' q# `) M* ^
  660. //            colorTemp.SetValue(color.MakeARGB(& q+ q% D) A6 z9 T1 B3 m( p
  661. //              (BYTE)(255*iColumn/iWidth),
    ( g  Z9 _  F" w
  662. //              color.GetRed(),4 j. T2 r, C9 V. |- {
  663. //              color.GetGreen(),
    . [, x4 H; q  n% p' K
  664. //              color.GetBlue()));- Y. M' t8 G. ~4 p3 V+ w5 o( {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" B6 v# M6 D$ D; x3 N3 m0 Q8 J& X+ N5 T
  666. //          }1 c6 j; ^2 Z* Z8 O+ k$ m8 }; x
  667. //        }7 y8 j  C6 O$ V) [7 Y" w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 d# p- W7 c/ J) B4 C/ \. m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " B$ B2 Y) K/ V, ~; L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : f0 p" e* O+ @! B% B0 I; E4 s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, d5 s, c6 o0 J0 V7 W! P/ @- L
  672.         for(i=0;i<240;i+=8)
    1 Y; U8 Q. i. L3 f8 s6 K
  673.         {0 e% m% B$ F8 [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 i4 V- A5 X) {: G0 s( Q1 s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + t! l9 e. k: T* F4 K  j+ ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: h  g% s  h6 T* h8 i
  677.           Sleep(33);8 e" d& R$ Q" n4 A; O7 L9 c
  678.         }4 g& z0 V0 W1 R; ]' _
  679.         Sleep(1000);0 i% B$ w% M6 ~
  680.         for(i=240;i>0;i-=8)
    ! y% G# z# a9 P% s9 I# i
  681.         {
    3 R" ^9 B8 ^9 M- S) g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 h( C+ x& E. f* |- L9 g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 U. G- r: k0 |! O1 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " e: O& g7 r% s# a
  685.           Sleep(33);
    : M1 L! b. P4 d+ |' M! U: r
  686.         }( f' q, }; \+ T- \6 T
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 a2 v$ ~# B- h7 g% t# J
  688.         dlg->ReleaseDC(pCDC);
    # c% ~9 s# j  _
  689.         DeleteDC(hdctar);
    1 z* f: B* {& A) b& p
  690.         DeleteDC(hdcsrc);
    % v& s3 i- l2 Q' g% A# z2 e9 \: W1 g
  691.         DeleteDC(hdcorg);
    1 Y( ?, R* Y. Q$ j5 X
  692.       }
    6 E3 O: R! b$ V$ t  b  m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , p. t1 H! k/ z' m3 E0 P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * k8 d2 }9 L$ ?  r2 H1 [4 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 H! D5 u, k8 D1 f# V0 p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( q) `1 p  ?/ I* y4 n
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - v; T0 i! x3 x7 K2 z
  698.       if(!Dn.Connected())  \! g, U7 y$ U6 @* [1 a
  699.       {( @0 C% H( W, F" L
  700.         dwTotalFiles=1;* k  X1 f$ T8 C0 N' c. f
  701.         dwDownLoaded=0;% {1 I9 u/ g4 G, b: t! X# G5 a
  702.         bSilentStep=TRUE;
    ( m" C$ U+ ^5 r+ x$ c! O  e
  703.         bCompressed=FALSE;
    ; K9 [; c( z* |# Y( Q- f
  704.         strExtLocal.Empty();5 g0 V% C/ T9 t7 c# {: s; P
  705.         strFullName="readme.txt";
    7 t# z. W0 r' i% ?) ~2 t& h7 A
  706.         dwProgramState=AP_CONNECT;/ o( f# j# l7 b0 y7 X5 |8 Q2 i
  707.       }0 j+ c9 c: q# V5 k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ t( z9 V4 A" H" s6 x2 Y: }
  709.       dwStartUpSteps=2;
    ' s" ^1 ]) s2 h! Y; p1 u
  710.       break;) k) g, k9 h' e6 K
  711.     case 2:
    # Y1 G: U( J2 g# T% z
  712.       {3 l+ Y$ a$ A9 m( Z1 t1 I0 d
  713.         int iEOF;8 S8 n( E" X1 y% C$ \6 W3 ~- R6 Q) e
  714.         FILE *fp;7 l. K* z: @9 i( t
  715.         char szString[512];
    ' ^, m5 U# Y" @6 {: ~2 ]; A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 _4 D6 F. Q8 G( X' K, p/ k* m
  717.         if(fp)
    * V* {/ l; a# b- M
  718.         {
    * H: R% ]  O6 n7 T% A
  719.           do
    1 U' T% p  n& V8 r& A5 ]: F
  720.           {
      o5 D% N& _# w; J1 Z5 N
  721.             iEOF=fscanf(fp,"%s",szString);4 @- J! I5 Q# G7 X
  722.             if(strlen(szString))
    : O. L# i3 m( R* b4 h, [" I! M/ f
  723.             {
    & C6 k- x) C1 V7 d
  724.               if(bFirstChar)
    $ x% p* A3 R/ W* L9 ~8 L/ P: f
  725.               {
    - |2 {4 e, m  G( U, M2 U" z
  726.                 bFirstChar=FALSE;
    3 ^7 {  P4 N% n+ p9 ?
  727.                 bConnectIsBig5=FALSE;
    ; q: Q. d, ~) f9 ~1 w, N* O* v' W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% B8 U8 d- N* h6 J8 @
  729.               }* z+ _; W& H# ?9 T3 |5 R7 z
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 f1 }1 U( ^; Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 w; k8 Q$ J6 Z$ j" ^! i
  732.               dlg->m_ListText.AddString(szString);; c2 X' K% G4 _5 L3 S, q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , l' a  J3 v, ~3 G; ~
  734.               *szString=0;
    $ V+ F. j) I  t+ ?
  735.             }
    & s, K: o9 k& G5 C+ R3 R+ G; F
  736.           } while(iEOF!=EOF);" S: q  x, A) h( d! m  V7 A5 t
  737.           fclose(fp);; u& q3 Y7 }+ S2 i
  738.           unlink(".\\DownLoad\\readme.txt");
    + {, ?( ^. }# d
  739.           dwStartUpSteps=3;; v) Q- j: b/ [# q' P; x3 G
  740.         }
    9 m* v& C+ q! X$ v
  741.       }& W7 M8 h/ W. b' h' p0 u
  742.       break;5 Z8 b( S9 s) q# h2 [! [+ x
  743.     case 3:
    " @; [1 _% B6 M# W
  744.       if(!Dn.Connected())5 A  o0 I- I  F, ^
  745.       {
    , E8 V4 F0 N" U3 _/ |
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( W3 o: E7 x4 P
  747.         dwTotalFiles=1;
    ( T' L" y' B8 n- z) J
  748.         dwDownLoaded=0;
    9 q) ?9 q& ~5 W. Y- a5 g
  749.         bSilentStep=TRUE;* u: l3 Z/ }1 h
  750.         bCompressed=FALSE;
      g( A) \& O* Z- }7 x# K  `
  751.         strExtLocal.Empty();
    : D# f. T/ ]' ?5 i
  752.         strFullName="checkversion.txt";
    4 @, o9 G7 s3 s, N. r9 F; n
  753.         dwProgramState=AP_CONNECT;
    ; N4 P8 f+ R* V2 O+ x7 q7 W# o0 B
  754.       }
    # u+ t" A4 p3 q6 @
  755.       dwStartUpSteps=4;
    6 q+ x7 \) n. ^7 A: h
  756.       break;/ b  o6 }% t/ a2 i3 d
  757.     case 4:
    & P0 O9 T7 w' S# J4 O
  758.       {7 Z; L  z* P+ W  P; B5 r, }
  759.         FILE *fp;
    9 ?) s: Q5 |9 m# v. X
  760.         char szString1[128];
    / A: F3 Q! T* h" W- \. [
  761.         char szString2[128];
    $ @) w' h* V3 ^6 K% T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , A* [3 ?' e' J6 B! T1 Z
  763.         if(fp)
    3 A3 n1 {7 ?# s) X+ ]/ D
  764.         {
    8 B3 A# i; {/ J5 Q8 Y3 S; Z% z
  765.           fscanf(fp,"%s",szString1);1 i# a7 f7 |: V! ~4 A$ \1 p
  766.           fclose(fp);
    ) a/ A1 N9 z& @3 K
  767.           fCheckVersion=atof(szString1);
    1 d* }' X% Q1 {! k3 w& K1 ^
  768.           fp=fopen(".\\checkversion.dat","r");* [$ O5 i0 {$ V- o6 N3 I" D
  769.           if(fp); x  u3 h8 a, p8 o& y9 d& L. k$ [
  770.           {
    ) m8 w# Y3 V' H* }( x# p
  771.             fscanf(fp,"%s",szString2);, R1 x( M! {8 h; x& o
  772.             fclose(fp);7 b* i9 A/ }7 z+ u+ ~
  773.             if(atof(szString1)!=atof(szString2))+ V$ g+ K& _; Y% t/ g% m1 b8 ?( t
  774.             {
    ( y& S+ N, _# J' r4 g; G! K# B- }
  775.               if(!Dn.Connected())0 h# I) a8 L4 R  o" E4 ~, K# ]0 b
  776.               {
    2 S. `2 n# w. s! S, P; J
  777.                 bFirstUpdate=TRUE;/ E! m8 D0 q6 x% L
  778.                 dwTotalFiles=1;# g/ c' \/ T. }) e* }& j! R
  779.                 dwDownLoaded=0;& I2 z! x- t  S  x# d2 z
  780.                 bSilentStep=FALSE;
    " D2 x( k5 g4 k$ g9 I
  781.                 bCompressed=TRUE;
    0 P( B' q  o7 u% }) e: y3 M/ d! s
  782.                 strExtLocal=".\\DownLoad\";
    & k( t* {5 a6 D2 W& f
  783.                 strFullName="update.txt";
    $ d( V6 l9 T, R
  784.                 dwProgramState=AP_CONNECT;
    % z* Q! b! h3 Q: e! {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . O$ u2 d2 o; X/ C6 z, }5 A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* b3 |2 F4 e9 h7 m: i% _
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 z/ O6 v6 t4 K1 Z

  788. 7 f& S1 T7 F& I- t, _; W' w+ y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 P) P7 F+ V7 W
  790.                 unlink(".\\DownLoad\\checkversion.txt");( m. s; G+ s- r2 o' d& _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 r; E% q  Y9 Z
  792.                 {5 K/ H5 p, x8 g& G# Q1 d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ @4 ?9 k; z$ S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' m: m) N: f  h1 y: |8 J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 X0 O3 c' O, k+ O$ X% t$ z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% c; G# v6 O% \" l$ \/ T- f/ B
  797. - n- s( I. Z$ C* H$ [3 T8 y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - B- s  d! Y- K7 B) a
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( z- M" E* Z8 Q. |' C3 ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # f1 s* j8 u4 K  c% ]+ s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % G% b5 x# t8 L: _
  802.                 }7 f0 e) q/ U. F2 Y! v
  803.                 dwStartUpSteps=5;
    7 q  X7 x( ?3 T2 L; o) v* ]
  804.               }  x2 ]% p. d0 F3 Z! Z8 ?5 q2 w
  805.             }
    ( \8 x& t9 |; G! i
  806.             else: F: s* X- m+ h1 o4 r2 E
  807.             {
    " _2 i% x5 {" ^6 z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 E4 g0 i& x) V  N7 b0 [! i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  s5 h1 G7 L5 _& ^$ @5 v. O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ O) [  f! D/ I; c
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 M- B1 Q+ x: C8 a
  812. 8 y1 h1 B8 _, I- W# i4 R! S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, x4 |  L% i: |4 P
  814.               dwStartUpSteps=99;
    & q! q- T( L1 u' K8 ^+ F
  815.               bFinishUpdated=TRUE;
    1 U* M5 D- }: c) V) x
  816.               bCanUpdate=TRUE;
    1 L5 |, X; D2 ^3 `
  817.             }
    + b) V9 ]( g7 k
  818.           }$ ], I6 C3 r( ^: ?
  819.           else# ^4 Y- n: X/ X! r) p6 f- B, R
  820.           {
    ( w4 b2 i( N3 W6 Q/ I/ W1 G
  821.             if(!Dn.Connected())
    & e$ z0 r- n7 y5 B" [' r
  822.             {; c; ^/ z. W* u' I
  823.               bFirstUpdate=TRUE;; @) g5 q" [% Y2 x( j( b. `
  824.               dwTotalFiles=1;8 ^& |: |; D& W: g; T
  825.               dwDownLoaded=0;
      \1 z+ B% i0 M( g! }
  826.               bSilentStep=FALSE;8 r8 d  q' \; }: z
  827.               bCompressed=TRUE;) k; b3 U3 \  ]
  828.               strExtLocal=".\\DownLoad\";
    * O8 `' b2 M$ M4 W( T7 f
  829.               strFullName="update.txt";( g) g3 b2 k: T8 M7 @
  830.               dwProgramState=AP_CONNECT;% h& g" a# H% S9 a5 k$ X- l7 }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ A! o+ d/ B1 @: x
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 C* p( o: f, i- |0 n, L
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");4 ^6 y, b' e( \+ w3 U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 A% u- G( _  `$ K' ~* v4 r
  835.               unlink(".\\DownLoad\\checkversion.txt");; U8 M  Q9 F7 }. j& b: ~5 |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 A1 J3 M; y9 P4 O& }3 ~
  837.               {
    8 X& s( I0 h3 U7 H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # b( Y, r( q8 T$ S/ I" T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : _: {! U* m2 ?, k  U  ^* Z2 |% \  G
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 J$ F0 w, d% e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  K! j$ F: `  M8 L, l$ w
  842.                 5 T2 V5 u" N3 L5 K) @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 y  V0 R: [% N* y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 C0 `8 d1 g0 l% E) `3 V: r) B& m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- q0 [% Q- w- C7 T* `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 M' e) B- [6 B+ ]
  847.               }
    * b% \- p# p/ _3 g! D# ~4 j
  848.               dwStartUpSteps=5;
    2 p' U& f, L* J
  849.             }( n& q( {: }  S5 J0 _" {
  850.           }, `0 ?2 l5 Q9 U2 O- ]' e
  851.         }
    + j  I  R& y6 A1 o; D8 z( E% z
  852.         else" N; D. I- E" ?4 N2 O! O6 g
  853.         {
    % g- B# R5 d) U* S3 e
  854.           dwStartUpSteps=3;) W, a6 _+ |5 F4 B- p" q) X0 M
  855.         }
    & t) `. C, z8 T$ u& I
  856.       }8 w- o# D, ~* G0 x- l9 r3 F
  857.       break;
    ! T+ n: l0 y' i$ ^% `* {5 R' w4 R6 ^: y
  858.     case 5:: K. ?$ ^5 {+ q& g9 l6 C' b
  859.       {
    ; A& j4 r* ^. ?8 U/ K! `& s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' d+ I( z1 ^# L5 Y' F
  861.         {
    " `4 S! P- d0 n: Y5 @
  862.           int opt_overwrite=1;/ e7 [7 V8 r6 z$ j* L$ u5 l
  863.           int opt_do_extract_withoutpath=0;
    2 y8 ~  @) B5 q. O
  864.           unzFile uf=NULL;
    0 Q2 [+ d# e8 y
  865. ) b9 O/ _; ]' F: `
  866.           uf=unzOpen("Wsa.zip");
    , b1 ^" u* B, q4 \  a( }. ]) N
  867.           if(uf)
    7 s0 u8 O( f4 ^! g& n9 S, y" J
  868.           {
    0 V  Z# s# a& ]8 e
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    9 ?5 A5 j5 m" P# U" A  l0 @. b
  870.             unzClose(uf);
    ! y8 M9 C& e- e5 H" H
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");% E$ z, i0 V6 b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");8 _1 s1 `+ i$ K: ~" V
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");6 `+ i. S& w( Q) s0 d( V& s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 p$ o2 b3 f; b' h" @: G
  875.           }; P6 P# T8 H! `, }4 N$ e" {/ x
  876.           DeleteFile("Wsa.zip" );
    # }* e' ?/ H7 r6 f8 f1 U
  877.         }
    2 D1 U+ ~& ]) a& i3 @. x
  878. ! I! s) B6 W0 f, T8 _! K1 W
  879.         if(CheckLocalVersion())( _3 U9 U/ P  T1 I7 t
  880.         {
    ; V9 x+ Q  n! ?, z" o9 O) g/ Q1 v: e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ ]" k& s1 Q; I7 L2 P  Y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # `+ J0 {6 Q" `# V
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 {! C* P! i) {6 F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ a1 w( r+ k# \7 h/ _, @) H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) Y6 M! j% Y$ u* D
  886.           dwStartUpSteps=99;
    # ~! X7 K9 ~' u
  887.         }
    ! j6 W  L, h* D: X3 d) M
  888.         else% n+ B0 I5 Y" K: b) y
  889.         {
      A' D7 |8 P/ v; y: l
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * s/ \& ?! S: |1 Y. z7 j  u2 L$ z' B1 K
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: l2 g' }$ L% S) s; s0 X) h* H( K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 i6 [0 t2 F& r9 j) r* z. ?

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

3 L1 D" D# f  b6 z& z

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回覆

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回覆

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回覆

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部