CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! Y3 a, S* u+ b7 |7 m+ o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , x3 J( j0 T1 z- }+ B4 q  z
  2. //, _' [  E# R& A& g, F- [9 [

  3. ; w: S+ V2 g9 u4 x% R  P
  4. #include "stdafx.h"0 s/ u+ M% K+ ?9 r6 R# }. Y) o4 r

  5. / x' {9 S  b" w
  6. //#define UNICODE
    2 y# p+ N0 ?6 q, a
  7. //#include <gdiplus.h>
    3 y* \2 X$ U$ y! f; R! s
  8. //using namespace Gdiplus;
    8 f% h" g3 B8 i! S- k5 U

  9. % F9 O: G* B4 u2 }8 @
  10. #include "RevApp.h"
    4 l2 z+ P1 w5 u0 `9 y& ~
  11. #include "RevAppDlg.h"% M" j% N+ K: B' b; u

  12. : p: h+ k: C4 E* V" u/ {
  13. #pragma warning(disable:4786)% o) g% ~  F4 Y# d9 N9 s
  14. #include <map>
    # D, {! `; \3 X* |
  15. #include <list>! Z4 f1 X  S- ?
  16. #include <direct.h>
    6 g0 j  f! V& q
  17. 5 y9 l: L$ M9 Z6 o- D6 n' A
  18. #ifdef _DEBUG) A! i, o7 q) `
  19. #define new DEBUG_NEW
    ; n1 @% K$ ~5 r0 ~0 K3 ?) i
  20. #undef THIS_FILE
    # u- n" _" o; t: e
  21. static char THIS_FILE[] = __FILE__;; j/ R" y( t1 w8 y
  22. #endif
      d) V7 h* m0 n, E7 y+ H1 ^
  23. #include "SkinResDef.h"
    % f- V) ~% m4 \! l
  24. #include "ChangeBG.h"
      [2 C" t! d7 t
  25. #include "AFXINET.H"1 v* h% i% F. y5 ]7 s8 f1 V2 F
  26. % Y$ x( `- a7 c' W7 K; k$ ^
  27. #define TRADITIONAL_CHINESE 0) G! n* r8 ~6 ~: p- Q5 [9 E" t
  28. #define SIMPLIFY_CHINESE 1
    ; q! g, n* z5 r/ J7 m
  29. #define ENGLISH 25 W4 k! e$ c) a
  30. int m_iLanguage = ENGLISH;& N* V) Z5 b0 U1 |+ i: s
  31. /////////////////////////////////////////////////////////////////////////////
    ; @" P; v, j6 i
  32. // CRevAppApp
    : C6 x4 A; S- L- u& @5 P3 z

  33. 2 E4 V/ X7 P& J3 F6 g
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 G# n5 K8 ^# C! p, F
  35.         //{{AFX_MSG_MAP(CRevAppApp). o1 c* Y, l9 a+ w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& m. ~* {+ F+ P4 f8 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 s! o, o$ W1 V* z+ J; x3 F3 h8 G
  38.         //}}AFX_MSG# Q0 P; O8 U) l" x# k$ X# F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 o0 D) U: v! G0 s( e' p! \
  40. END_MESSAGE_MAP()
    7 {3 o1 y% }3 |9 h; e7 B% m

  41. 7 s, @: }8 o/ _) j& P
  42. /////////////////////////////////////////////////////////////////////////////
    4 ?, m! W8 X  q1 |# m' L  J: T
  43. // CRevAppApp construction
    5 \; ?+ U2 P2 X# g* A. m/ d8 ~
  44.   l! t5 i6 R' O6 O4 g8 m% \
  45. CRevAppApp::CRevAppApp()
    : g! ^7 `7 j  o8 q; Y
  46. {* k* ?. R, x$ }/ J9 d
  47.         // TODO: add construction code here,
    # ?4 M7 A7 _- m/ D
  48.         // Place all significant initialization in InitInstance8 X  m3 p( N9 t; }0 T0 q* B/ O
  49.   bDisplayIsBig5=FALSE;
    6 b: j* q5 h4 O5 u
  50.   bRestartUpdater=FALSE;$ U* m: e7 g) F! w0 Y" p
  51.   bFinishUpdated=FALSE;
    0 E. r. Z# {) w* T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' w& e! d4 p; N' P  b( k8 _6 O; e
  53.   InitChangeDataBig52GBKS();7 t4 M% {7 A& T* d8 {8 C9 W& H- N
  54.   InitChangeDataGBKS2Big5();( m3 _1 p) I0 y- f$ ^  z
  55.         //2 b6 k+ X7 p* q! J! ~
  56.         bClickRunExe = FALSE;: |; q( Q# o3 K6 d' J6 ^
  57.         //) I8 D8 e3 g) v" S
  58. }) ~1 [5 ]7 @8 |/ U

  59. % X* S$ T' C& t: w
  60. CRevAppApp::~CRevAppApp()
      Y2 ]" N4 W1 I/ c& g7 t
  61. {( z3 M* N1 r6 I7 X( y
  62.         // TODO: add construction code here,
    ) }& M. B# n& K0 d$ _+ t
  63.         // Place all significant initialization in InitInstance+ ]. `; P' i3 h( m
  64.   EndChangeData();
    / I8 z% G6 [& |5 G# |5 {5 I4 t
  65. }
    & l9 F5 u, w8 o9 `) m/ {8 h
  66. 1 n$ H2 y6 I+ @
  67. /////////////////////////////////////////////////////////////////////////////6 x& E- ?: F" \  p
  68. // The one and only CRevAppApp object
    $ `7 ~* \* ^8 j  g( C4 Q
  69. # _- x5 J3 C! R
  70. CRevAppApp theApp;
    * ]! {1 A! n9 R( B# l3 T
  71. 4 |( R1 V8 ~) r  I) {) t7 i5 k- A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; G; h) D! u4 p- J: t9 B
  73. {
    ) I! f0 R/ y8 u+ W/ Z6 v/ c
  74.   int iEOF=0;
    & t& t7 c! O1 p4 a! Z, F/ K
  75.   char szTempName[MAX_PATH];1 ^$ B6 p4 o% o3 f" A
  76.   *szFileName=0;
    & j: j1 Y- a; A$ V8 e6 ^
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 w! Q: _( x: A2 c) M" }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 }) ?% ^" G/ `. x% o8 _- B
  79.   {
    4 b3 y; r8 C' J3 Y1 F
  80.     strcpy(szFileName,&szTempName[1]);6 Y4 [: W/ h' a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) Z5 X1 n/ R6 k/ E- A% e
  82.     {4 W' q) r, p$ P& I: U9 c+ B3 H6 U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 b) \3 `7 A- X( P, [. A. W. L
  84.       strcat(szFileName," ");
    " x" \! _7 x% z3 Q$ w2 B3 B
  85.       strcat(szFileName,szTempName);9 x4 }, X: F+ X* D5 Y5 ]
  86.     }
    , \( _2 @" G, |& s% O& l8 n7 g
  87.     if(strlen(szFileName)>=1)
    . }, |3 C, w6 u) b( \( g( @4 n
  88.     {4 j. D8 E+ j& I/ ], B* V
  89.       szFileName[strlen(szFileName)-1]=0;/ \* R$ B: I* @& W
  90.     }% n; U8 D# h1 s/ r
  91.   }
    $ v, z# f1 H7 I: i! _) j) S& [
  92.   return szFileName;
    2 j9 g4 @8 W% W. Y0 z
  93. }
    5 n4 F1 b0 d& l7 K) R0 F; y
  94. + R& M/ X, Z" J! s" ^8 Z, Y% g/ k3 d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 w7 {) O" g! l+ v% [" p
  96. {& n, u* S8 e5 o/ x: W
  97.   FILE *fp;
    ; A  G8 O3 d. P# N) h- R
  98.   char *key=NULL;
    ' B( ~. j& d% x' H! U' J
  99.   char version[MAX_PATH];/ x4 |# d$ |0 R, m1 T
  100.   LPUPDATEFILE file,olds;! b9 p" n4 F- t% o. i1 f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # M, Z/ Q. }- Y/ o/ [* I0 S" P

  102. 9 L  \, t. o& K# O
  103.   UpdateList.clear();8 ^' K) E; M9 ~1 E
  104.   UpdateFile.clear();9 E6 a9 @' ?" H4 D  v
  105.   if(GetFileAttributes(filename)==-1) return false;
    + d3 g( F, h# T3 \* t
  106.   if(!(fp=fopen(filename,"r"))) return false;( U1 P4 o0 P" g8 b  S. N7 V
  107.   fscanf(fp,"%s",version);
    ( p6 D: F8 i! n- o( w' Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 A6 d" L, b2 `2 `% M( R3 x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : Y% c" C' j4 v& _
  110.   {
    7 A+ c* q4 h8 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( P( z/ ~4 F9 Q! b7 t
  112.     fscanf(fp,"%s",file->path);) [7 W( P/ S# ?: `5 B8 X
  113.     ReadFileNames(fp,file->file);
    5 q( Z3 Q9 |  `7 N" k& U- f: V8 C
  114.     strcpy(file->full,".");$ n/ k. z  h0 ]+ |
  115.     strcat(file->full,file->path);8 i* o3 x7 T. C# F2 t
  116.     strcat(file->full,file->file);5 M/ o1 k! t: c$ c; z, g+ p9 c) T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 x$ Q/ d# }7 h$ ?
  118.     {9 L, `& B( ?" @8 g7 |& M
  119.       file->vers=(float)atof(version);
    9 c2 B% N& R6 G7 k# p
  120.       UpdateList.push_back(file->full);
    % u9 a9 ?3 g5 i+ h7 _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! P. g$ h; j4 |5 q2 v
  122.     }
    4 m/ a1 I2 Q; l* P
  123.     else
    . m- E$ j0 N) D0 r
  124.     {
    7 B8 T8 d+ }& U
  125.       olds=(*p).second;: u9 h5 r; g8 K* E7 k4 @
  126.       if(olds->vers<(float)atof(version))
    9 z  g" |( `+ K
  127.       {
    5 j4 U! N+ Y# A! `6 q) N
  128.         olds->vers=(float)atof(version);
    1 }4 J9 ~( X1 s6 d5 n  ?# E
  129.       }. K9 t# n# i/ Z' c- |4 F! @' w! c5 t
  130.       free(file);9 x& I0 }! T1 S  b* p  S/ V0 p2 {6 B+ C1 o
  131.     }
    2 {* T4 S0 H! C( O1 K3 j
  132.   }
    6 z6 a, w1 s0 E& N
  133.   fclose(fp);) j' K3 Y" A/ z: O
  134.   return true;
      d  J# E* r" p' T! Y3 o
  135. }* j8 E" e- e" i) x# L: ?

  136. - d5 i1 D, t" i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( t( O+ F8 A# g( i) k$ |. H, p
  138. {. M3 i) S- |3 c# F: S
  139.   TCHAR  szFull[MAX_PATH];5 L4 ?1 U8 V$ d" G: Q! M$ v$ g
  140.   TCHAR *token,*inter;
    . z' U. D! _  D5 t# f) V
  141.   *szPath=0;
    ( g  m/ T( _1 q3 }/ I
  142.   strcpy(szFull,szFullPath);: D5 o, ~, Z" I: T# v+ E+ D% s
  143.   token=strtok(szFull,"\\/");- J; O6 K1 |, @% T" k1 x/ p
  144.   inter=token;* o! {; L- x" _+ y* S- g
  145.   while(token=strtok(NULL,"\\/"))
    * V- G5 L* z% E) u; v8 k5 e5 S9 _
  146.   {
    $ m; |2 s' ^7 D. D' J
  147.     strcat(szPath,inter);
    6 \% t( e8 V( C) o+ h
  148.     strcat(szPath,"\");
    ; `- d# k7 ~; q  @; q' D% V
  149.     inter=token;
    * J) d# I, g$ W
  150.   }' X+ v/ Z& Y6 v1 O, }1 G0 }
  151.   return strlen(szPath);& w) O* {) F2 n# o
  152. }: x& j% h( q* [5 S: P$ A
  153. + [4 g+ U7 s& }8 Z+ n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 h" X- Z6 W0 q% ^8 g
  155. {
    2 D8 S4 b1 c8 o6 l5 _4 ^
  156.   DWORD attrib=GetFileAttributes(Target);
    1 h# q+ ?" d" R  S  g+ }' T
  157.   if(attrib!=-1)3 m+ V: V% l  @" [
  158.   {
    ( z7 d8 L  }  o$ h: W. z- N6 @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 z+ O- `9 y  q# K
  160.     {
    , U4 N7 Q4 ^  F( d# R  J, E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);; r% d: A. ]0 r( e! ?% A
  162.       SetFileAttributes(Target,attrib);& m( f4 }& X% [, r8 \9 P2 I! [+ |
  163.     }
    & ~* _3 @9 I: ]
  164.   }  A1 r! k7 Q' f* t
  165.   CopyFile(Source,Target,Erase);* t8 h$ G$ }& V. E: S
  166. }
    : @+ [* X$ `. B7 r. |+ z6 q0 J5 _( X
  167.   ?9 a0 Y  M! v" i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    / U, f: e% a7 F! X  i/ W
  169. {! C; x3 J! d2 E& v
  170.      FILE *fp;1 e+ F" Q; p+ \3 x& l
  171.      char  szBuffer[8192];; e2 ^6 u2 _; L0 ~% i; p
  172.   va_list  argptr;
    6 x. k. y- z1 @: J* ^6 F

  173. 3 ^  [3 W7 L/ f# l) z
  174.         va_start(argptr,message);
    1 E* ]( d- U# ]* B5 ]* h
  175.         vsprintf(szBuffer,message,argptr);* O% A- p, N7 w- A4 H
  176.         va_end(argptr);* l2 a4 ~6 Q7 U/ N
  177.   fp=fopen(FileName,"a");% ~8 |$ E3 F8 `* N1 H
  178.   if(fp)
    % n% h6 b7 d2 l% [' ^  V( u6 J2 L0 a
  179.   {
    " b* @1 C0 y) a8 y: i
  180.     fprintf(fp,szBuffer);& h5 \! ^! P2 d& q* B/ v3 ?
  181.     fclose(fp);
    & v: k: m3 D  c( j
  182.           _flushall();
    * I6 G4 W" ]2 A, e: A, I
  183.   }9 H6 V; E7 N+ J. n) L
  184. }! S$ b: m  ]; y" U, O

  185. 4 s' v7 A& ^( Q  [. a3 z0 `
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 H" ?, z8 ^/ U/ }
  187. {3 g8 Z/ }$ g6 N; n
  188.      FILE *fp;4 Q; T# e) c/ ^, U0 ]; N5 J5 t
  189.     DWORD  attrib;
    / y3 ^5 N3 h) Y8 N$ n8 y" [1 Z
  190.   attrib=GetFileAttributes(FileName);
    2 E6 P7 G$ F* w2 O
  191.   if(attrib!=-1); H; X- a" o$ Q, {7 v. Y+ a4 B
  192.   {0 N2 d- G, U" J8 N: ?6 g4 O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 l" f6 h9 ]5 }1 [. ~) J& m/ }
  194.     if(!SetFileAttributes(FileName,attrib))7 ]1 `4 z! J) l( i. o4 c
  195.     {
    : O" \& l. l; l& t$ c8 v4 w4 n; w
  196.       return FALSE;
    ! L# h$ l/ A% R, w2 I% @
  197.     }, K4 `4 [) e% j. D1 u
  198.   }, p' ~4 l  c* ]4 c% I; p/ A9 `
  199.   fp=fopen(FileName,"wb");2 s; V, ]9 s) |+ P" R
  200.   if(fp)
    ( z" F' H3 n+ T9 x& y$ W0 `
  201.   {
    # {7 C) s0 a9 b3 t$ ?5 L8 M
  202.     fclose(fp);
    6 O& x1 _( N; a. R
  203.   }2 f* r. _2 T, j7 Y- e# G# m* |6 k( d
  204.   return TRUE;* }. h+ q( h7 r9 H  H
  205. }
    7 X5 {# \" a' U: N+ h/ x3 d

  206. & h) z5 {$ P' `* w- ^  W7 G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    : i" n7 z( j4 D, p  Y
  208. {7 A7 f5 ?3 Y' {. f6 H
  209.   char filename[MAX_PATH];
    ) `5 A5 X0 N/ E1 N! @
  210.   LPUPDATEFILE file,olds;  H5 m( S! B" A4 S! j3 ?! ]+ e+ ^# v
  211.   std::map<int,CString>::iterator i;. `1 A% p+ P! t/ [$ T& W3 e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" e6 j% k+ S' P
  213.   std::list<CString>::iterator l;
    ) Z  M1 x) d9 P. E$ A
  214. 0 ~9 |/ e# @1 z  C
  215.   if(bFirstUpdate)/ m: Q0 I1 z, z# o9 a2 N; x
  216.   {- v& l+ j8 n; n# n
  217.     dwCurrFile=0;) `- H7 z$ \3 O8 q5 \
  218.     bFirstUpdate=FALSE;
    9 ]7 ]: I& |0 C+ o/ J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). @( s0 H$ X3 }/ A
  220.     {, _. l8 W7 U4 m. ?: v1 V
  221.       dwTotalFiles=UpdateLocal.size();6 a3 l  N( l  k/ X& [
  222.       dwDownLoaded=0;8 m3 C* O6 H1 r# n% g1 k6 j
  223.       bSilentStep=FALSE;" g  ?1 H+ e" b' ^
  224.       bCompressed=TRUE;4 j- N9 r- O- b. j" A* x
  225.       strExtLocal.Empty();/ M4 m  k4 Q6 k# r3 F2 }. Q2 X
  226.       strFullName=(*i).second;/ b3 ?; U+ H: M+ d" k
  227.       dwProgramState=AP_CONNECT;* S( ]* @2 \$ r5 G. W
  228.       return TRUE;, ~3 g( G% M  N" O: z; |# w
  229.     }
    3 M* a+ A/ R  W. o
  230.   }
    - u0 ?6 z, x: x: l* G1 p+ s( y
  231.   else if(bRestartUpdater==FALSE). c  Q! T( d9 K
  232.   {/ J" H8 i, ?& v0 Q; [3 a& q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- D* A: y# H% X: E
  234.     {+ m# ?4 X% t' Y/ `
  235.       file=(*p).second;
    3 A2 d, w' K: t1 ~) a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 R/ P9 Y- F( c! x
  237.       {
    8 N, f$ `9 M. g1 K6 i2 m
  238.         olds=(*p).second;
    ( X' T. A4 E  |
  239.         olds->vers=file->vers;
    9 L+ o9 s) u% }* m
  240.       }
    / p. U+ Y7 c3 r- _7 ^. F# O9 h
  241.       else; @6 [; K1 n7 P/ S: x3 U
  242.       {
    9 H* V  v8 v" c+ t  V* z) T( c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % Y4 m  h' o- [2 n4 b3 X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, _6 f$ O6 T% C: k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. S# o7 D: [+ p- J( h2 U( X
  246.       }- `! \1 q7 c/ f) c: T9 F
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# E- Y/ X+ a, a( b& ^% {/ Z; ~  e0 r
  248.       sprintf(filename,"(%s)",file->file);
    1 ^( O# G1 G' B. d, s
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 J0 u; e  d" `
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( f2 z. b& X$ d# ?  I9 J* W# h
  251.     }
    + `4 Y* Z9 j; E
  252.     dwCurrFile++;: M2 Q7 z) s/ c' u% m8 X; E7 l1 e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & A& w5 x8 h; k6 S
  254.     {
    8 j6 Z5 V# i* K; E
  255.       bSilentStep=FALSE;
    ; p$ v9 Z0 S0 O6 M
  256.       bCompressed=TRUE;
    9 i7 Z9 |* F: m. q( v! S. B
  257.       strExtLocal.Empty();+ B" O! m3 a9 p7 w" _  @1 J# Q9 H7 _( U
  258.       strFullName=(*i).second;
    3 y$ K5 g- d/ h7 ~, F: `
  259.       dwProgramState=AP_CONNECT;2 h+ _0 K; x# h0 P, Y  v
  260.       return TRUE;/ L: O% f8 Z5 H' [2 A
  261.     }
    8 |  x$ ]8 |  V  B* [. m
  262.     if(!bRestartUpdater)
    9 o& K" B$ Q7 @
  263.     {
    : M5 Y! F2 g! m9 H3 T* A% o3 I* N# j
  264.       int iCurrSize,iFileSize;- P( r0 K8 {9 U' j/ d9 f/ l' m) N
  265.       iCurrSize=0;
    4 F0 T$ h, F" B  Z! Y; y1 Z- [
  266.       iFileSize=UpdateList2.size();
      h4 u  ?5 E' r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . U! ]6 {$ N$ L2 z' m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 z# o: t5 w/ H( L, U: W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ G9 b  f! @1 {4 f6 H3 E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Y% u& @+ t* p7 h
  271.       Fclearf(".\\update.dat");4 A% d3 A4 g+ ^- X3 I
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( p6 @+ h4 J3 H& ?2 S6 r& Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# y# w" A' d; J5 f0 g3 k
  274.       {
    # y& M6 q9 H3 G& L9 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())5 g) d' P$ G# F+ J0 J, A1 ~0 {
  276.         {) V0 Z( D% P9 [3 _6 X0 k" }8 X7 U
  277.           file=(*p).second;
    + L, B9 T. f2 Z- j# r1 A0 P9 m( q- Q
  278.           sprintf(filename,"(%s)",file->file);
    4 X# J6 y& D6 V4 z. h) s# g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " B3 d/ Y$ x5 i" ~0 y
  280.           iCurrSize++;1 h# Z1 C2 R& M' P/ E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : E( ^! ?' a; f/ D8 i
  282.         }0 `! m; }  p* ]8 S4 `
  283.       }- {( h" v& F4 J* S& d, C+ `
  284.       unlink(".\\update.txt");# j$ g* z) X$ X$ y3 j" l1 U. a
  285.       unlink(".\\update.tmp");
    2 {# C# ~/ g9 y+ x) H; }' J
  286.       Fclearf(".\\checkversion.dat");/ U+ w5 U$ r# Y% n7 w/ ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . ~: r$ Y& k9 s! D% K$ Z
  288.       if(UpdateLocal.size())3 y* J; S7 M7 m+ K
  289.       {
    6 _; M$ I3 ]# T
  290.         UpdateLocal.clear();$ g0 L# F% d. E- ~. r* Y
  291.       }; N/ z5 ^: m8 U. T
  292.       if(UpdateFile3.size())
    ! g* M# N) x0 y  m
  293.       {
    - h) I- l7 W& N! X: H( p8 v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# q8 P6 N3 Z& E5 W: k3 z' }9 M7 T
  295.         {4 E* E1 F' D% p1 N0 \" {9 l$ k2 a2 N
  296.           file=(*p).second;5 Y  d9 V9 @" x- d1 I
  297.           free(file);
    : y* @0 d, Q! J1 a
  298.         }
    6 h5 G8 W: q# s- y* ^
  299.         UpdateFile3.clear();
    ! H+ `, O  O8 R- W- o
  300.         UpdateList3.clear();: W/ P) X) g9 L' \$ w1 d0 W
  301.       }
    ' Z4 R! a0 @: Z2 a, f
  302.       if(UpdateFile2.size())
    % G3 C' f; L0 A; C( r: x# `
  303.       {
    1 `' Z2 v2 f) S# W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% ?1 v' k, _$ i( c% o2 m1 `
  305.         {
    , x. m7 V4 B& t1 F/ w( \
  306.           file=(*p).second;
    $ x  z9 f: N/ r. O: a
  307.           free(file);
    5 V; r. C# U' l, e
  308.         }) _- [( j' Z0 d9 Q
  309.         UpdateFile2.clear();9 A0 ]* Z4 p8 J& _
  310.         UpdateList2.clear();
    & R" `+ w8 g- J$ _2 l
  311.       }. C4 C2 H  D. C& ~9 Y9 U1 c! d
  312.       if(UpdateFile1.size())
    ' r( D% [" x; I$ n! T
  313.       {- U6 a% E" j0 P5 T" }% K# ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ ^# T' L2 F  S# s7 a, ^
  315.         {
    * k6 N: Q' w& j9 U( H7 ~, }7 K) ?+ X7 f
  316.           file=(*p).second;
    3 R+ u9 _4 _& h, N$ Z
  317.           free(file);9 g3 Z# W2 V1 O7 W, A/ s3 ]) K1 p
  318.         }6 @+ h7 Z. L/ N5 t
  319.         UpdateFile1.clear();
    & q2 _! ^2 b- y: S# ?2 u9 Q
  320.         UpdateList1.clear();
    ( D( L7 Y5 t3 j2 N; B* i- M9 p$ P
  321.       }
    1 M0 K# z' K3 R; u+ |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      P: m) b6 R& n  W! Y, A0 a
  323.     }6 \( T2 P8 [* t& u' c; e# L* z
  324.   }
    7 H% @0 e0 s5 [  F
  325.   return FALSE;
      J# B: p) p0 w2 D" Y
  326. }
    4 p' H4 ]- G" l! O$ \! G( X

  327. 6 C3 ]! _7 ]! p" Y
  328. void CRevAppApp::ClearAll(void)
    ( k' m) i5 |$ I! A& N
  329. {
    ) d% l- D* `& r$ F. c- D) s/ F8 G
  330.   LPUPDATEFILE file;
    / T$ ^  `4 a$ l& ]9 h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) C/ {& l; X* i2 @4 c" y7 V( y+ z
  332. : W+ W0 n) v! s5 m/ f: H, r) m
  333.   if(UpdateLocal.size())* D7 z* T, k" J6 z/ f
  334.   {5 l- A; R3 r0 ]+ z5 o4 m
  335.     UpdateLocal.clear();
    9 `* O! f6 b) Q& B$ r
  336.   }
    . _0 F+ v/ Z4 Z0 P( z$ V+ m4 o
  337.   if(UpdateFile3.size())
    ; V; G0 S, P  I0 s2 ~/ j& ^
  338.   {- S, I8 R4 L5 l4 p3 ~% ~1 C* T+ Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ D9 J9 k% s/ L* Q6 w) D+ ~& @
  340.     {! L$ a# b8 _* Y$ _2 {. {5 v
  341.       file=(*p).second;
    - m4 R( E/ G( a
  342.       free(file);: O; J3 T5 h0 w1 ^4 k* c
  343.     }
    0 T  ?9 N* z0 Q1 T
  344.     UpdateFile3.clear();
    - ~( ]8 s8 s9 R6 y! G
  345.     UpdateList3.clear();
    # h! j# L  }4 K2 R( W8 c
  346.   }; Z2 a( h2 g  ?5 n. c9 G$ I" N
  347.   if(UpdateFile2.size())
    6 R% G# O+ w* [$ ?
  348.   {
    ( K0 c9 R8 j3 z4 X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# S6 i" U, d4 }; c* @/ e  U- q
  350.     {9 ?/ Y3 k- {. K) m0 c+ W* u" a
  351.       file=(*p).second;
    6 Y* y$ w% _5 F+ L
  352.       free(file);4 {2 Y. r- I9 M6 N" Y, V5 P
  353.     }! i+ D, ?( q& q/ ], Q; z/ I
  354.     UpdateFile2.clear();
    " e/ X! m" D: z
  355.     UpdateList2.clear();
      z  H* d) k, W5 f
  356.   }
    / N5 M$ I  g+ I- [& A6 k
  357.   if(UpdateFile1.size())( K' R1 a) N! b* i- I
  358.   {
    / A3 }( ?  I4 H- x& _/ }  H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , i; G% j. }0 X7 ~
  360.     {( z4 H- o' m, \: R' l* S  L! |2 o2 ^
  361.       file=(*p).second;
    3 L1 e2 E. S5 m  k0 ]
  362.       free(file);
    9 W# T+ W8 C/ G. ]% ]) x' k- O
  363.     }
    " p/ \- W& W& L- l- L& o/ p% @
  364.     UpdateFile1.clear();4 Q& k! L. z/ H7 ?* n8 M9 t
  365.     UpdateList1.clear();
    ' Z9 h- b! x* H. E6 ?% S! L
  366.   }
    - q6 [% f0 u+ c; J% l0 M
  367. }  
    % n/ G! |: G# p# k
  368.   
    + H2 ^6 B; ~3 P$ r4 g' D5 y" Z. z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & j3 ^  @: r0 h1 _) _5 g
  370. {
    0 W" |1 p# W% K) S8 M1 n3 ~8 u
  371.   int c;
    7 S! @, m% O4 O1 R
  372.   LPUPDATEFILE file1,file2;+ \; Q7 S0 i) e" S' ]& \
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " I/ N5 ]; T$ ?7 E5 B
  374.   std::list<CString>::iterator l;
    ' r! i  h; C$ t- M7 t% W2 f

  375. 7 y8 K' u5 E6 M6 v- s
  376.   UpdateLocal.clear();$ v. m3 k. v/ ^& a" k/ N# K
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ! A4 u: l, T$ s2 M, G
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ }! G) \4 c- c  `8 b
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 K1 Y0 s  G$ t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - v7 g! F2 C, O/ m+ ~4 m8 J* x
  381.   if(UpdateFile3.size())6 d- q* I* U; `# S# X  o# {, Z, S& [
  382.   {
    2 {2 x$ b/ M6 J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! K, {8 {% q% b
  384.     {9 F  b/ ]* `  g; p) z- ^. c
  385.       file2=(LPUPDATEFILE)(*i).second;
    # X" ~4 \4 D* H3 F8 @2 v& r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # g: Y; k8 F# ~: t# ]2 m+ [- S
  387.       {
    ; g. }. M$ s0 H
  388.         file1=(LPUPDATEFILE)(*p).second;: G0 s* t/ I; a6 t% y0 J
  389.         file1->vers=file2->vers;
    * Q4 E- S' h+ ?
  390.       }  x; o% \  l+ s1 f0 Y% j
  391.       else' o( J8 Y0 u4 ^  J) M# E7 Y. e
  392.       {# i& g/ ?- K, H; J2 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ J) T+ {- i; T( _' O1 k: E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" Z- q5 ?; Q! q$ ?+ }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    * ?+ @0 G1 p) k" \
  396.       }
    0 O$ Z) \7 E/ }7 i2 i( D  h0 U
  397.     }6 `5 v- n3 {5 |9 z2 C6 r. o
  398.   }
    6 ^* t, \; \2 H, h: a5 b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 r. J8 N6 R& Z$ W: ~& p2 H5 ~' M
  400.   {. t; m: ]1 s' V9 K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% a( s8 E# K/ X* ~: L0 n3 ?
  402.     {- ^+ e) E2 H/ ]' {3 J$ ^% d
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 U  J# s, t# r" q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 y; b) }# K! R& k( Y
  405.       {
    & ]6 O6 F7 I3 j" G3 l
  406.         file1=(LPUPDATEFILE)(*p).second;: n  }* l- U  w6 D0 e
  407.         if(file1->vers!=file2->vers)
    3 ^$ n0 Z9 Y/ T, v5 m
  408.         {
    $ N* q7 s5 g* c$ Z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 k; K' u3 y# l" J- L" u8 ~% m
  410.           c++;, Z1 N: t# d; @9 A2 f2 u6 x% ^
  411.         }
    , k. t' Q0 A# d1 S# J/ i
  412.       }: U0 A/ L" c$ q
  413.       else) j/ d5 \! Q# \7 M: A$ |
  414.       {2 Q. x+ g0 ~3 [$ Q0 W3 ]0 T  U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 W# g6 O3 o( r
  416.         c++;
    7 R. I4 ^/ B: B/ ^8 p. q' @
  417.       }
    1 T/ ?, U5 |, A; J' z+ E
  418.     }- ^4 d5 {, u/ r8 O1 p
  419.   }5 c* J- {5 f" y3 I
  420.   unlink(".\\DownLoad\\update.txt");
    - \5 k* y; {  I6 s. _# n7 E
  421.   if(UpdateLocal.size()) return TRUE;
    9 S9 L. f  O: `; P
  422.   else                   return FALSE;
      f1 ]) I% ^# y9 u* v  w& ?
  423. }
    - {% p# _' ~7 R, Z" e7 q( y

  424. : q7 r; t/ j5 \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! b& K/ h2 q  q7 }0 a# @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 J" G" G+ X+ x

  427. ) r1 l/ A9 n) L% X1 z: a

  428. * c$ c% m- a# M; m% h7 c

  429.   Y$ X$ n# K% W! ]
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# F) n9 J7 c& y! r4 ^( ?
  431. {
    : i  E1 c' S) r6 N6 b5 D9 l! e
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / f5 I! Q) ^( y' v# y- N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# b- O  i/ |9 }2 q( L
  434.   {. [. s1 w/ V5 H* |! u; y* W
  435.     char szLanguage[50];" P8 `' N& n9 R( Q" D* j3 o$ A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! g( Z- s7 k. D, a# B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * f" e: Z+ L) |1 \8 C9 j: r, A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 y: P; ?) s/ Y, t; j3 @! U
  439.     else                                   m_iLanguage=ENGLISH;$ ^7 A% N* ]- e% ^
  440.     char szRegister[100];
    3 m2 ~, ?  s" v+ t! B
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% N9 @' Q0 [- `* i/ |) t
  442.     strRegsName=szRegister;+ @5 S2 c% t! M6 a
  443.     char szPatchURL[100];5 t' _& y% s  n4 d% s' P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( R. G4 W3 B" U6 f; I# s. _. o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 u' s0 }0 b5 v8 \
  446.   }4 d- G6 u0 r3 D% M
  447.   else) S# ?: r$ t' M" a0 Z* F. J
  448.   {
    ; g6 K' P' Z) c8 I  G( i' _
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : L) i6 B* m& Z
  450.     strRegsName=DEFAULT_REG_URL;
    ( c8 U3 [9 _9 t+ m" B
  451.   }1 M3 b- [. a1 t( x* d' h% {
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ v& e; Z' r( z
  453.   {+ N2 c1 x: z6 L% j2 r
  454.     char szIP[50];- ]& b0 j2 X; G# p- I
  455.     char szDIR[300];
    9 T- d0 ~" _. e9 l0 l4 y& n# X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! F5 n) b( N2 v) L# W9 `9 \+ U# N
  457.     {; O; Q5 q% g. O. y) }& ]" D! Z% i( z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 y& e" ]& r* c' u! r9 ]" k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 ~9 g" ]) S) L% f
  460.       strHostName=szIP;
    4 a, ?' j  v$ y5 f$ Z' n
  461.       strHostPath.Format("/%s",szDIR);2 x$ s3 s! M  o( E- r; t. t
  462.     }( f8 M' A$ s- a0 Y7 D
  463.     else9 B3 @$ B1 U# g) A, i
  464.     {; Z+ o9 ^2 r& L7 u. }! }5 W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % Z% x, K* F4 a8 H! h9 I% H( t7 T
  466.       {
    2 h% t1 g! h/ w# G  w/ Z$ P) Y
  467.         char szLanguage[50];
    # a! e  ]& |& V  n  z. A) [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( l/ D+ }( w9 m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # w6 t" i% I* z6 T0 {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 I8 c; I' P- X; q
  471.         else                                   m_iLanguage=ENGLISH;
    , o9 a& n0 Z) P, U9 Q& i- u
  472.         char szRegister[100];. m; F% c2 W$ `" s9 H+ h+ j# h9 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - z# j) H) y% a% E/ W
  474.         strRegsName=szRegister;
    7 m) P6 m' p" ~
  475.         char szPatchURL[100];
    7 y( E! ?, M. M) w: _! R* W: c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / r1 N/ ^1 F3 k" D' Z) q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 L" h' M2 j* t0 ^1 u
  478.       }! T2 I5 B" N/ t, h1 ]
  479.       else8 K' ^+ J- b( L6 o
  480.       {( z6 i1 F  ]# Z4 _0 H3 [
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 B  x& ~/ P1 _( E! m2 s
  482.         strRegsName=DEFAULT_REG_URL;$ r" j+ \: P" K" L* C( j/ v: x
  483.       }
    - S! z: y+ a7 E/ @, |; W" y4 M- H
  484.     }1 ~( ^* M% R( O3 e8 C5 d; ~1 B
  485.   }- y# H) z6 ~! e- l: J
  486.   return true;  ?( i& l/ b- [/ f0 `& j6 |, g# B
  487. }, i# U; ~7 I, A+ }

  488. 3 @+ F$ y- M2 I: x" G6 i7 N! w
  489. #include ".\ZLib\unzip.h"
    3 W& q* A' v% e: Z) Q7 X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 m' A1 D: `" o3 S/ v8 S5 s
  491. /////////////////////////////////////////////////////////////////////////////  O# n% D5 Y! t0 O: r% |
  492. // CRevAppApp initialization8 C/ a8 m- F7 }1 P
  493.   d( u8 `- I* H" N# ?
  494. BOOL CRevAppApp::InitInstance()8 w" a, c4 p. q$ Z# ?! M; _2 I) D
  495. {. q4 |% m& }% r. N5 |% ^# o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 P( ]% A! W8 `. {3 e8 l& L

  497. ( I$ n$ Z" Z( z: z; n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      Z. M( U" F" K9 Z5 V5 J( N; b+ z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 o+ |" T% ]6 {: ^  i; U) P
  500.   {
    4 H% ^* H7 H. t2 H* E6 R+ A; i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");" M& `! f( i3 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* t4 L3 R8 }$ ~- |+ C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 Q# P6 J. \  K4 d4 C1 p! @5 w0 I
  504.     {
    * q+ B& _+ q# [. W9 q. V8 @; o, l
  505.       strcpy(szPath,szPathTarget);
    9 O7 D! \( d& U3 p) M  r5 t
  506.       SetCurrentDirectory(szPath);+ y. ?5 h; `* o: ]& y) j/ A' g
  507.     }
    : K' G& g6 S: m+ {+ A4 k
  508.   }
    7 u/ t( @* T/ Z8 e! L7 d
  509. #ifdef _DEBUG
    ( i5 G: ~+ v) {& R% W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # P4 [+ [! q, ~5 G+ g7 N% V
  511. #else9 _+ q4 C  x" X& L0 t! a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & R9 w8 D& D9 |" q" D( k
  513. #endif
    6 A+ q- b0 Y/ h; l9 m. _
  514.   {7 g! p3 R+ E0 d
  515.     char tempFileName[MAX_PATH];
    ) d" N5 }. _/ F
  516.     strcpy(tempFileName,szPathSource);
    9 z: a& h# B/ a& `
  517.     tempFileName[strlen(szPathSource)-12]=0;# _8 N* J3 k$ ^* P* U# G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ _* L' Y4 M1 j/ U' |# a+ n2 z3 ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 L. n0 Q, |. z( j4 U5 x8 f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 i: J1 K' {$ L
  521.     return TRUE;
    ( |% {/ h$ {4 V' d* @: W* G: Q
  522.   }2 ]" X, K6 h0 o2 _- {5 L$ q
  523.   // Nuke 0118: Delete run.exe- q, q! H) y/ ~, v4 \% O& x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( `6 \  {+ i, I- }, @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 h- G6 h& s4 `6 t
  526.   if(!ReadCfgFile("Config.ini"))
    . J7 u  N& J$ |* n$ d4 v
  527.   {  w, k& u; h7 [: O" d) W: D( l! w
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& u0 ?/ a6 N! i$ K* Q
  529.     return TRUE;* R7 R# P: a6 q- t# [
  530.   }, T  q4 I+ ?2 v" S
  531.   HANDLE mutex;
    8 d: I5 K1 G2 Q4 s# h. O) Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( S- H9 N7 O4 R
  533.   {2 u( d+ W. k9 \/ x% B* I+ \& n  X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # P3 [$ q+ ~- D" j$ x1 ]7 C3 z
  535.     {
    7 g( k: f8 s' y7 @; p" \, ]
  536.       CloseHandle(mutex);8 v; D( {$ e1 s3 y5 I. r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 v6 o: T& ?& \4 H$ ?% ]
  538.       return TRUE;4 o. I1 L& X: K. H. F/ y5 l$ V
  539.     }
    9 \: v9 P% f" t2 e6 s
  540.   }  / ?9 @% }& }7 P9 @: G4 h
  541.   CloseHandle(mutex);
    6 v* q0 y+ C# x- f+ K
  542. : S, ]3 ^2 u: E  E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ {: @9 H. b1 ~$ G/ V4 u/ s- d1 B) u3 c4 O

  544. " y$ ~' e( ~3 V- n( b8 }) B* }7 S
  545.         AfxEnableControlContainer();
    / k4 v, o5 }2 V; b
  546. 5 w9 n& J6 U* {
  547.   bCanUpdate=FALSE;  S, Q' b) |% f
  548.   dwStartUpSteps=1;
    ; ^% b1 Z# O; U8 @+ T  u
  549.   dwProgramState=AP_NOTHING;
    " R" H/ l8 Y! E8 L3 t( r
  550. ) W( ?+ r% ^7 T1 I+ i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , S2 f0 ~, Q% n3 y% k! C4 x

  552. ' y5 F' R  |2 _8 s# V' e
  553.         // Standard initialization
    8 h9 b/ ^3 T( [9 f: D  T# _
  554.         // If you are not using these features and wish to reduce the size
      G" D, G8 {5 i  ^( o
  555.         //  of your final executable, you should remove from the following
      j( F: z1 L' j# {3 S
  556.         //  the specific initialization routines you do not need.
    / F( [  U4 {) v' x
  557. 9 H; n8 w) y' @: M+ F8 M+ }8 s
  558. #ifdef _AFXDLL2 ~! |$ c: B# O- b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- R% Y, q: U8 ?3 m, s$ S: e
  560. #else
    - K- H$ l2 C- \5 ~' B! N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 ~; Z% |+ b& ?+ O- Q$ }3 |5 ^; L
  562. #endif- Y/ Z/ |% h3 A4 S2 Q/ i7 U' F
  563. # Y0 x2 c0 S! X: \  z2 K) j
  564.   dlg=new CRevAppDlg;
    * m* n( ?+ a7 k. p$ }
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 W0 R& F9 f5 x% t) {& _6 Q  ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 a) p7 t; U/ I  T" d
  567.   m_pMainWnd=dlg;' w5 D+ H* A7 v- k
  568. . g, B# o3 e0 ^, `+ G8 {7 T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 }/ N1 V) r( I, K# |: i# C2 s8 m
  570. % g0 X" \% L# s! A  E: K- g
  571. //  GdiplusStartupInput gdiplusStartupInput;. X) K5 ]7 n3 [4 |4 G, |8 w  l. k8 s
  572. //  ULONG_PTR gdiplusToken;# r2 T$ p5 N( V2 {8 J8 c. D) T1 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    3 g0 o( Q% g% \: z7 l- W
  574. . ]8 t  O* P$ a" m$ l0 ^
  575. //        CRevAppDlg dlg;
    - V# `, g7 v. r* O3 r
  576. //        int nResponse = dlg.DoModal();+ C3 Z8 A- c/ D6 L5 c9 J( H
  577. //        if (nResponse == IDOK)
    $ L$ {) \/ x7 h% ?& ^
  578. //        {
    7 K1 X8 ^3 K4 D) S" F6 y" F* `' p6 E% {
  579. //                // TODO: Place code here to handle when the dialog is
    7 h$ A6 \. Z: {
  580. //                //  dismissed with OK1 d; I8 p8 v+ t: ]' s9 @
  581. //        }" E! J! E) |3 C; c$ v/ ^
  582. //        else if (nResponse == IDCANCEL)
    7 Z$ _1 a, h3 A( U$ i
  583. //        {) N8 F0 J3 o: o
  584. //                // TODO: Place code here to handle when the dialog is
    7 R* o+ T! X  G* r  S
  585. //                //  dismissed with Cancel
    8 d5 b1 ~0 j) x8 l6 a
  586. //        }) F% G  O: f/ X% }& y; z2 a& Y

  587. # R8 a6 A9 z& X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 o' N1 E, I+ q/ Z. C3 V, d
  589.         //  application, rather than start the application's message pump.0 |( o% A. y2 H
  590.         return TRUE;% _7 u/ ]( w6 t3 A' b7 s9 [
  591. }
    - F0 d7 ^  n1 n8 y2 w' R2 J: l
  592.   S7 w. `) l" a- h( h5 v
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 m% e0 ?5 Z" O* I- P+ a4 b
  594. {
    7 J  O( p. I2 }
  595.   int i;/ T  f' q6 A# w6 Z# q( U7 @
  596.   char *szRet;
    * @5 f) f1 A& D2 o& p/ p
  597. . z2 t4 C- H- X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % i2 C7 N9 j" F: L! Q/ Y
  599.   if(sztoken)
    7 T* G. a' t' E/ U
  600.   {( q3 l$ w) H  |% X6 y
  601.     szRet=&sztoken[itoken];0 U. n: F. _+ ^/ i0 {& x
  602.     while(sztoken[itoken]). e3 ]& |, e9 X! C! U* }6 i
  603.     {# T; p& @8 g2 Z' J7 Q+ h" b
  604.       for(i=0;i<(int)strlen(token);i++)/ ?4 P$ Y- `" s% [! b4 P
  605.       {# u6 T4 j; C: ~# o5 b0 q: D. x# x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 O* A8 q6 L% u3 j3 B! y7 [
  607.         {1 @% ~" i5 S) g' s( E# I. ?
  608.           sztoken[itoken++]=0;: S1 y( D0 ?2 R  \( U
  609.           sztoken[itoken++]=0;
    7 Y% I& i' X$ ^) Q6 P  [/ ?
  610.           return szRet;
    ( c: U# {3 D' Z0 ]2 [0 h: m* @) S9 [
  611.         }
    : |# o1 Y" ^/ ~0 m- D4 w, w: s' B6 T! G/ |
  612.       }4 j( E: y; I9 R( o% N0 A1 |
  613.       itoken++;: M  g; W% w4 \' G4 V, B6 }
  614.     }
    0 ?5 J% e; X6 r0 n
  615.   }0 X' r& `- W: U* Y3 w$ }( ?% [9 f
  616.   return NULL;- F% v$ r; f9 y, }- |* {# L+ a' d
  617. }3 W) U  }# o2 |* e1 M

  618. ! V) j# X! G2 ^2 g4 P
  619. void ProcessProc(long Total,long Current)
    # P1 ~( n7 y1 U/ Z8 K: J
  620. {* j+ `& r' T, p& ]* u! }# R, v
  621.         MSG msg;* E/ n5 o6 m4 Q& X4 }2 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& x; m5 c+ a3 _  X' T) j
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # U5 L% h4 [3 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      @. O5 {( K: p
  625.         {
      k0 g" L! Q# W( _
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / G4 a/ ]9 l) p3 A" E
  627.                 {4 n" q5 N' N! V
  628.                         return;
    % w- t! d3 K5 ^, F6 E2 f
  629.                 }  G- N4 r) b' z* h; H  p
  630.                 TranslateMessage(&msg);( @. ]# |; h8 e9 F2 m# X
  631.                 DispatchMessage(&msg);2 n" D- @9 y* X' T
  632.         }        ' _' s# X& p& F" S0 ]
  633. }
    * i; s0 m  n# O5 A
  634. 8 L( a5 v5 U, E6 a
  635. BOOL bFirstChar=TRUE;* ], V! a+ I% s( }9 C  D

  636. ( [6 D2 e, u! K: J) [
  637. BOOL CRevAppApp::OnIdle(LONG lCount), h2 f! W( A7 Y. H# D
  638. {
    ) C& \/ m8 M, g& F  }0 f4 A+ g
  639.         // TODO: Add your specialized code here and/or call the base class3 ~9 k. E9 p1 E) P  V2 o
  640.   switch(dwProgramState)5 I( Z7 f6 ?  }6 |) p( N3 e/ k: t
  641.   {
    8 {# @! ~4 F9 l5 c
  642.   case AP_NOTHING:* W; O9 \5 s# Z4 C9 r
  643.     switch(dwStartUpSteps)
    0 H: R8 v, L0 ~" z
  644.     {' G# z/ G- W: X: p( ^' X8 {
  645.     case 1:+ R. x/ `9 D: }: r4 K
  646.       {* i8 ~# m$ V- v. f; R3 \
  647.         int i;: u6 {1 V1 U! l3 m5 x# N7 |' n/ g
  648.         CDC *pCDC=dlg->GetDC();
    * a, l' z; Y: ?) R0 X( g
  649.         HDC hdcwnd=pCDC->m_hDC;
    2 G$ }/ M2 R! g2 v& o/ W: Y6 p
  650. //        Graphics graphics(hdcwnd);& v4 B/ n5 w" l9 }* c; c9 r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 `$ K2 W6 s( {
  652. //        INT iWidth=bitmap.GetWidth();* ^6 y+ D! t- _% \0 t6 q  t
  653. //        INT iHeight=bitmap.GetHeight();
    - D; C( q, D3 y( Z) }' d6 H$ R+ I
  654. //        Color color,colorTemp;
    # {0 i: e: |! O- r( z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) E/ n7 J0 x/ y: n+ Z' |
  656. //        {# y( h( B+ v. c# H# A, u; X  d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * ~' |1 c' o" h" Y9 K; T, `8 g
  658. //          {  v5 p0 w9 b$ Y/ s/ E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; [$ i% U  U/ s
  660. //            colorTemp.SetValue(color.MakeARGB(
    / r: Y! M/ \: Z7 S! I& X9 G* f
  661. //              (BYTE)(255*iColumn/iWidth),
    # j0 B$ |: d1 e0 \( ?0 s2 m
  662. //              color.GetRed(),7 i6 H" j, A! V1 `" y  B9 c
  663. //              color.GetGreen()," y0 Y4 U3 O' P* \. r5 r
  664. //              color.GetBlue()));
    $ p2 c& K; E) g7 n$ Z) I! l1 g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 F# p# K) N* }& H, R. S
  666. //          }( g( j9 W( V" B! v
  667. //        }
    ) h1 ]6 t: i9 \3 R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- L4 J4 S0 M) D3 W1 _$ A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 v# Z% G2 r% f/ y& N, @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, p: j( g, k( M3 c( t5 \3 F5 y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' o$ k6 p- a' L7 V( E( j' w# G' j
  672.         for(i=0;i<240;i+=8)1 y: T) _+ M& E' w2 F
  673.         {6 Y6 l2 [% m% X: M/ v# s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + z) O/ k8 ?8 ^, P" i1 C+ Z) M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' F! c. O, G) Y! B2 D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , Y' q/ J1 z* J# t  H
  677.           Sleep(33);5 m" d# N. [3 j) u# N" C8 W
  678.         }
    6 f4 l+ D) x/ D2 Z
  679.         Sleep(1000);
    ) ]4 f  j8 z, ]
  680.         for(i=240;i>0;i-=8)
    - d8 o8 X* \. K9 |7 _2 T
  681.         {
    8 G  R8 i! e5 X& h$ s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 g5 a& o# n# R7 u. ]# C2 Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 h& W8 c$ i! V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) X* N; X# f) f1 N
  685.           Sleep(33);, A8 w. p/ S4 [9 b% o0 {
  686.         }
    * J2 Q/ M# w7 {4 U0 p5 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% g0 ?7 {& V+ N, t) m# P
  688.         dlg->ReleaseDC(pCDC);
    & X: X+ h: P. T+ m) c- [3 O
  689.         DeleteDC(hdctar);
    , R! {8 u+ C) f: v
  690.         DeleteDC(hdcsrc);( T) b6 \! v. H5 @5 }7 y3 [7 G0 \6 q
  691.         DeleteDC(hdcorg);
    9 P  A& j- v  H" L
  692.       }  L8 ^5 n" f, Z" a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! Y( @$ f. Q4 a% e: b, P/ \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # P* N$ L# Q1 U! H+ U' E: L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" N5 o5 m: J0 T0 O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( R3 b" B' B# u4 Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% I$ _- F7 i" D+ o5 v3 N
  698.       if(!Dn.Connected())! \+ J( y- l( h
  699.       {
    0 Z3 F5 i! ^: T; c$ G
  700.         dwTotalFiles=1;
    * C: ?" P9 }( C5 F+ b2 \! Y  p
  701.         dwDownLoaded=0;1 ]2 S( k, @7 j# L
  702.         bSilentStep=TRUE;
    / a1 E2 d0 L* U, l+ X
  703.         bCompressed=FALSE;+ g' l: ~6 c: v# Y
  704.         strExtLocal.Empty();
    ! N$ ?( C) c4 _+ `8 Z
  705.         strFullName="readme.txt";
    ! H9 l) Q' ]7 l' @
  706.         dwProgramState=AP_CONNECT;
    ) i  k5 y+ u  h) w% F1 Z
  707.       }
    ( w4 r% v& p7 E5 B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + f# U4 l0 M5 W+ a
  709.       dwStartUpSteps=2;9 u. S- B! _4 o$ |/ u6 f* K( }
  710.       break;
    5 o8 t+ R  c* r6 E+ c3 ?
  711.     case 2:
      N5 C% V5 U4 j/ u7 h; X
  712.       {3 b" X' U0 Z" T. T
  713.         int iEOF;# B# J5 L6 z' }" s9 O/ h' a- T
  714.         FILE *fp;
    0 x6 {& v+ O9 Y" }" u
  715.         char szString[512];
    $ b: I6 @! R! Q6 w7 b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * C5 l" f" e' k( W! A4 Z- m
  717.         if(fp)6 V' p5 ]9 P# ~# Y. W) r0 q
  718.         {. [. f/ r# o; \/ e
  719.           do# B; l( \" r; {' O. x& Y' a, |. h' h6 M
  720.           {+ R# J, F: `  x+ [
  721.             iEOF=fscanf(fp,"%s",szString);
    : P# K8 \1 q) A: U( D8 @$ @
  722.             if(strlen(szString))
    4 u8 T5 S/ [( m, |
  723.             {, k" I; Z1 r; R: H
  724.               if(bFirstChar)
    6 T5 p% ^" R+ {
  725.               {
    $ F& m6 W  `* r& u) |
  726.                 bFirstChar=FALSE;
    3 ]4 y0 V% x9 A- O4 m
  727.                 bConnectIsBig5=FALSE;8 D& B+ X! ?0 _, r* X# X6 w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ e$ d* S2 R1 `1 K
  729.               }8 v5 N  C7 W: _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . p" V! |/ D" k- V( `; H$ d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( `7 F& ?5 c  ~1 f  A7 H  S. n
  732.               dlg->m_ListText.AddString(szString);) ~1 `4 i- ?. d9 X5 ~! T
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 C7 ^) `+ I0 x: Q
  734.               *szString=0;2 y4 B! |7 ^( a# j
  735.             }
    4 A/ [% `, J0 [6 a) G# w- f: }
  736.           } while(iEOF!=EOF);
      ^+ p8 j' l7 x$ R1 c6 k7 o9 ?9 w
  737.           fclose(fp);
    $ Z% N6 \+ n+ R, N- p+ V+ Z
  738.           unlink(".\\DownLoad\\readme.txt");& o0 ~* b; L% O2 r6 Q5 y
  739.           dwStartUpSteps=3;8 Y/ b! n: o1 H9 d. _
  740.         }
    6 w2 B3 C" d1 k6 `
  741.       }
    5 Z( `# u: [; p  A
  742.       break;
    8 [3 |* M  q# J: ?
  743.     case 3:
    " m7 ~$ L4 b7 ?: |% k$ t/ m
  744.       if(!Dn.Connected())
    : R* N. ^2 l+ F! G) ?" M& Z6 U
  745.       {# p! X2 q/ a1 D3 a6 t6 g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# c3 y8 [8 N, ~  H
  747.         dwTotalFiles=1;
    & W0 }+ h) o7 Q& b( v
  748.         dwDownLoaded=0;
    ; U1 n' s: B' u9 N
  749.         bSilentStep=TRUE;2 Q' s% c$ ?5 c( @9 n6 k
  750.         bCompressed=FALSE;$ U; _+ ^8 V0 K4 R6 C
  751.         strExtLocal.Empty();
    ; Y' C* X0 D( S: A- H! F
  752.         strFullName="checkversion.txt";
    & W. B2 z" B0 @$ R! r
  753.         dwProgramState=AP_CONNECT;
    9 Z( j" r+ j  Z7 T5 U! ~) G' }; U! r
  754.       }
    ! \* M. L1 u- W) G; W* F7 c
  755.       dwStartUpSteps=4;+ h6 J6 R# @7 y8 `
  756.       break;
    " l& I7 e- V# r5 H3 w+ n
  757.     case 4:  V1 V& s# Q$ W5 G+ m4 V% _
  758.       {
    & b4 x5 K* z% F8 m
  759.         FILE *fp;2 y( K8 j, g$ k8 P. k
  760.         char szString1[128];
    1 `0 f% C1 v' Q* B9 s( J. [/ w
  761.         char szString2[128];
    ) C) ~2 F- [8 v* @+ M- I2 y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " E2 }" _; P7 s' a, H
  763.         if(fp)2 b4 @1 `; Q1 F$ z+ T* q) M
  764.         {# U% @' Y/ k5 y" i  s5 g- f4 G( @
  765.           fscanf(fp,"%s",szString1);
    ( i9 v' g, _9 Q
  766.           fclose(fp);
    ' K6 k2 i8 ^0 o7 o/ U2 [
  767.           fCheckVersion=atof(szString1);: S5 I  I$ r1 f$ \- M* k$ c1 k
  768.           fp=fopen(".\\checkversion.dat","r");
    1 N6 i4 Q, J' m$ Y7 B9 _4 |+ c% i
  769.           if(fp)
      W. v3 \7 M( q
  770.           {( m" w0 [& }' ]4 N3 W# c
  771.             fscanf(fp,"%s",szString2);  o9 R* `; D8 r* i! ]) f/ |
  772.             fclose(fp);
    6 g5 b4 V, u& o  l5 ?, k* k4 N5 h
  773.             if(atof(szString1)!=atof(szString2))$ ~& Q4 h! l' v4 d, {# O
  774.             {: ~) e  E8 R" e
  775.               if(!Dn.Connected())# J7 ?% V) b' j8 N+ x( Z8 J* `
  776.               {
    9 K9 P* k+ S& B4 ]8 p
  777.                 bFirstUpdate=TRUE;/ z! t- l" I, Z2 N- k
  778.                 dwTotalFiles=1;* M* Z3 l2 ?/ h
  779.                 dwDownLoaded=0;3 n# ?( W; e2 ~1 n6 x
  780.                 bSilentStep=FALSE;: k: V! U7 u% x6 r& y; Y2 H$ o
  781.                 bCompressed=TRUE;; \4 l, b2 |1 y0 _
  782.                 strExtLocal=".\\DownLoad\";# M, e- k8 L: Q* b( v
  783.                 strFullName="update.txt";
    ; y/ a6 T/ b0 }. @$ l+ f( k
  784.                 dwProgramState=AP_CONNECT;
    : C+ A& c9 Y8 z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . n5 `# _  x8 D. k( w/ S  ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! @& ^9 a% A4 H* X" B9 {: H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - D  C6 B* @( M: T) e7 c
  788. 1 Q- ~' Y( z& E5 ^8 E% d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # B! A& w* B" ^7 T3 q8 y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    0 C4 w* g1 n. g* y3 {
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( r" O  P3 z+ P, H/ z0 ~4 M0 z/ s
  792.                 {6 V, ?. b- P" y! O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");, {+ f" j4 z! G4 ~/ B0 O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + G* t* X' `7 i. n2 @) P
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");" r; I' e. F$ ^% v8 ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, O& y  J$ l3 ^) l3 x  @

  797. 3 j) p9 H6 x3 T; p! K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + v. Q/ @$ P! V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + B" a( ^) [6 w( O$ N" Z. R* O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      _3 U! c& j. Q6 T. \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      e( B; R5 u+ q: e; H
  802.                 }
    8 M0 p) J% B. R: X% C+ Q
  803.                 dwStartUpSteps=5;8 M3 Y4 C. `" N
  804.               }" \9 L* G1 q# M5 B! o! P+ _
  805.             }
    8 G! A/ Z9 c* E1 d
  806.             else
    8 Z7 S9 [7 i# G
  807.             {+ ~: n8 f& t/ g+ W* F% V! u
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 G! L* @& h) m/ m3 d4 W' B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 C+ o/ r, k  O2 \5 L, t1 H! W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 f& G5 `9 E* A8 ^' d4 [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " r+ u6 w' p6 T9 ?

  812. 0 T" q) P. C( e$ `' \- L+ S9 N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) }7 @* H7 r9 g, Z' Q' @8 ^
  814.               dwStartUpSteps=99;
    " ]  `/ B, }8 ]0 n0 S1 D
  815.               bFinishUpdated=TRUE;4 E% w) Q  E9 J; k  J
  816.               bCanUpdate=TRUE;
    9 ]% m( P$ \) E- I" M  F( s
  817.             }* }1 [! r3 t4 |( b  |, t
  818.           }2 e) r) a9 C( H2 s/ |* s& M
  819.           else
    , [" B+ G- D, Y* O' p
  820.           {
    - f( u! g% d0 C4 y( c
  821.             if(!Dn.Connected())
    4 T8 ~) i, o2 w
  822.             {9 h0 O/ z  m; ~% p/ m$ M8 z
  823.               bFirstUpdate=TRUE;5 i1 @% Y) {) T+ n% H5 `
  824.               dwTotalFiles=1;
    1 u: ?" \! q7 q# P. g* k6 a
  825.               dwDownLoaded=0;2 A! s# G* b. _
  826.               bSilentStep=FALSE;% S! i6 \( u+ V- b" e- ^
  827.               bCompressed=TRUE;
    " q" V0 y, P3 R7 ]' K, V
  828.               strExtLocal=".\\DownLoad\";2 m" c0 g3 z% f
  829.               strFullName="update.txt";0 |% G5 r  J" }4 J( c! H
  830.               dwProgramState=AP_CONNECT;
    3 g! X6 ?- {/ p3 n
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # M7 l: C) E4 k% K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 z& C1 J2 `+ `3 R$ V
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 Z8 e! V: \, C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 Z* H/ O: ?" m, t' G/ u: x
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ( I" `$ @6 ?3 {3 Q/ a9 A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 W8 R9 @! S% I% y! ]% V
  837.               {
    ) C! {% V( p) k5 K% w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) x- l# S& c% I$ I) \, F1 ?1 }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      a! W, l# O9 k3 w1 j% v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ J# f$ j: t7 q2 X( W+ f9 g* a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' q2 V" v, I: P, R: U1 y( J! }! E" Q* P
  842.                
    * x; i, |: B% X) `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. \6 a! B2 q7 x% f$ Q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; P: G; {2 v1 U- K
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 L8 A# X$ i. ^3 L' Z& w: b% ]6 f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Q. T! o; w: {/ j2 N* o
  847.               }- M1 [' L$ u! M# @& P
  848.               dwStartUpSteps=5;5 f# J2 H3 w% L. W) m  r: t
  849.             }
    / W- `) N, G: M& V  O
  850.           }
    7 ^+ `0 H% s- f: ^# {& f8 \
  851.         }
    9 I# s1 x0 e5 C. M- V/ a: M
  852.         else
    2 D+ g1 |0 _7 d7 _, k/ m- w, a) a' G
  853.         {! f: F/ U5 H! P7 ]6 r
  854.           dwStartUpSteps=3;
    - E% g) r+ m7 a) n" Q+ G4 h- M
  855.         }& m( ~" t. `, f8 o
  856.       }( Y! T* A- Y# O" n/ S
  857.       break;
    1 _4 U3 K$ \0 y" m
  858.     case 5:8 l$ t) \6 Y- H  T% G
  859.       {
    ' R# E! z2 e, m6 ?. @
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& e5 Q& G4 s2 v5 O) R4 n9 n
  861.         {" I9 b2 K! x& a; B* D
  862.           int opt_overwrite=1;
    ; _9 ]* B" {: K* Z2 B# e
  863.           int opt_do_extract_withoutpath=0;
    9 ]6 F+ j0 T( W* Y+ h
  864.           unzFile uf=NULL;
    ( v, c9 i, s; b5 g
  865. ! n( M) |' w. Z3 w; x, a6 A4 _, Q; g
  866.           uf=unzOpen("Wsa.zip");$ ?6 C* O  F) ?# C1 [/ {! q
  867.           if(uf)3 m4 V+ x. a3 ^  _' ^1 v
  868.           {) F( U" H+ l9 n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & c# ^, ]) a( H* _6 B
  870.             unzClose(uf);' P  x$ I- `$ i- J( x; J
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ( r( G- f; a: m  u2 U! y, ~# N
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 P& E, R# ?  L/ [
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% s& b6 f4 r2 x( P6 p. ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( g! {2 x+ W1 h2 P, L2 J
  875.           }
    & v" p9 q& G, L- l' l  A6 \
  876.           DeleteFile("Wsa.zip" );1 `" c$ L# p, y
  877.         }5 J, p6 d1 W6 b1 J" G3 _( c6 o! W

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

. `8 B- t% i0 @8 t9 c0 [5 O% v( {# W% N) l8 D: r

評分

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