CSUpdate.exe源代码

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

: B! W9 i" w$ N  B% w# q
  1. / RevApp.cpp : Defines the class behaviors for the application./ q- e1 `$ i. A7 h! q9 d8 Z  q
  2. //- _- D7 }, s- H: R5 ]% m% q

  3. ' m! g  d7 v7 n: l% @9 Y
  4. #include "stdafx.h"4 y* K- M1 J: s

  5. 9 g  o# c6 |. y' q' ]/ {
  6. //#define UNICODE
    4 A5 B1 E8 [; M4 ~$ G; O, C9 k% k: y+ w; I
  7. //#include <gdiplus.h>0 d$ Z& R! m, g# ]4 P  l
  8. //using namespace Gdiplus;3 W) R5 _- q# D& I" B$ {

  9. ) k0 [( N& H& x% C- O6 F
  10. #include "RevApp.h"  T+ {0 G3 h/ y; @3 Q: y
  11. #include "RevAppDlg.h"
    9 g) B  W! k5 n
  12. 8 ^- D' m+ v; Q+ V) O4 v6 G0 e* F( a
  13. #pragma warning(disable:4786)
    2 N$ F( c/ w; h; q
  14. #include <map>$ D# D5 x9 |5 s/ O
  15. #include <list>
    & ]8 A* G9 t5 O, k3 l
  16. #include <direct.h>" W, ]* a% |; r; ~

  17. ; ^1 {- w  B+ u/ _9 b
  18. #ifdef _DEBUG3 @( F3 w8 n& B
  19. #define new DEBUG_NEW
    9 A& K' R) ?' n0 P. z  |
  20. #undef THIS_FILE
    , k: e  b: G& d2 o9 b1 i
  21. static char THIS_FILE[] = __FILE__;# p& [2 l7 F, f2 [4 u
  22. #endif2 d3 C/ x. i5 g( d9 Z1 b( u
  23. #include "SkinResDef.h": ]! ^; A1 d: b' R5 v2 K. G
  24. #include "ChangeBG.h"
    * L" k4 k4 j2 I) L4 R( {
  25. #include "AFXINET.H") r9 l% }' Q8 L( l  w* `

  26. ' r$ }( m% i1 O: n
  27. #define TRADITIONAL_CHINESE 0
    ) r1 e! L) {+ i) m4 Z& L- l- f3 |
  28. #define SIMPLIFY_CHINESE 1  t4 A6 a8 D( _& r& U# C- ~
  29. #define ENGLISH 2
    ) e, v1 E; \: {4 P$ L
  30. int m_iLanguage = ENGLISH;
    3 V4 n% m8 G  [( z+ i# U1 D
  31. /////////////////////////////////////////////////////////////////////////////
    $ J7 @; B+ E: N& v( r& D, x
  32. // CRevAppApp
    : M  q9 d, v" o# G/ |# s

  33. $ D2 G$ V; d$ u: G: q9 }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- I5 [& ~( F5 P2 f. E! H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 U) `$ q" L% S* Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . o8 t6 s# j$ f6 }& Q# p- U% n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - ~$ N# [" x  {6 }
  38.         //}}AFX_MSG$ ]) ]4 }6 s5 q( r5 R- ^8 P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : y- w  u2 `. \- K2 S5 K
  40. END_MESSAGE_MAP()
    6 S% q7 x1 R1 E. z" N
  41. ; w0 c/ _, n+ u9 R6 ^
  42. /////////////////////////////////////////////////////////////////////////////
    0 X  B! f5 T7 P6 }
  43. // CRevAppApp construction
    2 U' V6 V% T$ }
  44. 5 x! Q* z  D, G! N% a4 S1 C
  45. CRevAppApp::CRevAppApp()1 {2 D+ i4 d/ [+ V& @7 l
  46. {
    . ?# v4 r5 v" a7 w4 @# s
  47.         // TODO: add construction code here,
    4 S6 d8 h& ~! \! I9 @! b5 q
  48.         // Place all significant initialization in InitInstance
    7 T7 f) D# S6 K1 |6 G5 {
  49.   bDisplayIsBig5=FALSE;- y/ {, D2 _# N0 |
  50.   bRestartUpdater=FALSE;
    ! d! {, I5 \3 ?) g9 r& }& a
  51.   bFinishUpdated=FALSE;
    " K! S' X7 F5 }* h9 I3 s: Z$ o2 g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % I% W) t, U5 M
  53.   InitChangeDataBig52GBKS();
    . z0 B* ]2 N: Q8 i0 [9 ?8 t
  54.   InitChangeDataGBKS2Big5();
    " Y9 n4 Z3 Q1 D  x$ t! P
  55.         //
      n0 y& g" A' C0 \$ r9 [  w# @1 ~
  56.         bClickRunExe = FALSE;2 i! W* n$ {2 E6 |# H9 M
  57.         //
    9 F, V& |: {  L" d# u
  58. }& K9 O0 Z- Z& R+ V

  59. 4 K  T- r( Z6 x/ X
  60. CRevAppApp::~CRevAppApp()
    9 K5 z3 V% Q2 i
  61. {
    7 L1 @1 q) e- ]4 l. w- f6 g
  62.         // TODO: add construction code here,5 W; H% f) K6 U% c; t
  63.         // Place all significant initialization in InitInstance! n+ z8 t; |* [
  64.   EndChangeData();
    7 N) g" i8 B7 F* j8 q
  65. }
    2 S( a, {- d: `, l8 l
  66. 4 L0 F5 Y, ^: K4 {( q
  67. /////////////////////////////////////////////////////////////////////////////
    8 n: `. I! K" y
  68. // The one and only CRevAppApp object
    3 j. K; @9 p1 r! ?
  69. * Z' h$ H2 s! H+ N
  70. CRevAppApp theApp;8 f3 O7 J2 v. |( Y8 ]) B

  71. : V- j& m: K: I" d, V8 j& Q0 }: `6 x
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 D+ x% [* a( b' e: A9 V1 p' A
  73. {
    0 I8 y! ^+ a9 Y: F! q6 c
  74.   int iEOF=0;
    8 _; P1 W  `- H8 _. L4 T9 c
  75.   char szTempName[MAX_PATH];
    $ ^* M5 V, ^! @1 k  `# E3 T+ X
  76.   *szFileName=0;) O% h8 K+ `+ M
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ) [/ ~" j5 ~# L, O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* g- r+ A# J8 o6 M) G$ Q
  79.   {
    ' w/ i- o0 u4 R: p1 S% Q
  80.     strcpy(szFileName,&szTempName[1]);
    : A( e9 r2 f2 k- W! J8 ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 N8 _  i7 n- ?
  82.     {
      A$ f" p$ N4 h4 k
  83.       iEOF=fscanf(fp,"%s",szTempName);$ c# w. c) t+ Q) U2 t
  84.       strcat(szFileName," ");
    4 y/ O" h6 W& T( t3 i3 u; u
  85.       strcat(szFileName,szTempName);
      D: A9 |# P0 S6 c5 o3 S) o
  86.     }
    1 \) I2 @; U  r+ r2 Q' @& {5 [+ D" N
  87.     if(strlen(szFileName)>=1)
    8 N9 n/ c1 B$ S7 S* W; n1 \
  88.     {7 q% H& D& p+ ~/ Y; q& U% D$ u
  89.       szFileName[strlen(szFileName)-1]=0;$ A& g" Y- c% i6 x/ Z& }/ K: U$ d) ]$ y" u
  90.     }; W4 y7 Y( B- ~( B. s
  91.   }  k: W7 v' H( c6 S" E) p
  92.   return szFileName;1 k( m* @- Y* x* o& r$ @$ |
  93. }
    3 t6 p! u% {! N

  94. * I% W# r8 p7 I6 s2 t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- B( N2 D6 o: G  q( j2 J
  96. {
      D' s! u( l" o# g5 s
  97.   FILE *fp;
    3 a* j& b; [& r( h% r/ v9 \
  98.   char *key=NULL;
    ; J' H$ M) m8 W2 `2 _
  99.   char version[MAX_PATH];, e3 L+ V( x( d7 g$ p8 ~
  100.   LPUPDATEFILE file,olds;% a* N  b' ^* ]! h$ c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 S- ]3 k6 m( J, b2 S

  102. # n& u( o5 W/ n
  103.   UpdateList.clear();
      L) W3 p! v0 F: R) B
  104.   UpdateFile.clear();
    3 n4 g& E+ S8 a$ B
  105.   if(GetFileAttributes(filename)==-1) return false;! B) P# R( o6 [4 ?
  106.   if(!(fp=fopen(filename,"r"))) return false;) n3 V: A0 z9 `( s/ s" b
  107.   fscanf(fp,"%s",version);
    9 p* J1 S) v1 r6 Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 b% r) d& X4 Q4 D' C$ A5 O
  109.   while(fscanf(fp,"%s",version)!=EOF)3 d8 f. C5 V2 B% v) C
  110.   {
    . L7 R" @( d3 R6 {8 w- ^* @7 }/ D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) j; Y5 x) k% y! t
  112.     fscanf(fp,"%s",file->path);
    $ d8 H2 e0 ]& \6 l5 n4 Z' `
  113.     ReadFileNames(fp,file->file);8 q  @8 T  N8 J3 _8 t, x  Z
  114.     strcpy(file->full,".");& `+ T4 @' l" t. |4 ~
  115.     strcat(file->full,file->path);
    1 y  @: t' P8 h+ _4 r: D) E3 R
  116.     strcat(file->full,file->file);+ R9 @* O3 m/ @: m/ U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - E7 P7 T, a8 B; o  b
  118.     {7 o% q* i% k- o# J
  119.       file->vers=(float)atof(version);  J. T% Y4 ]1 U9 X1 Y
  120.       UpdateList.push_back(file->full);- j% h8 F/ I0 k% _3 r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . @9 M9 W4 W! A% V9 h
  122.     }
    ! `& ?" L' T/ o" ]$ ?4 G
  123.     else- s( G8 p* d+ @) ]" `
  124.     {- e/ E# `( A' j
  125.       olds=(*p).second;& g' g6 @, Y) K, @# b
  126.       if(olds->vers<(float)atof(version))5 H  Y+ H/ F0 D/ W% E! D
  127.       {( N5 W4 [. a0 K$ @1 E6 p
  128.         olds->vers=(float)atof(version);% M, i, R1 @- Q# y: H
  129.       }
    0 z+ F3 p/ C. z6 _' q- r( P
  130.       free(file);
    5 W( I% m! ^/ b9 x% c5 q6 m! E  U
  131.     }1 b7 J+ Y3 W% g) F( Y
  132.   }
    & `! _& g$ e; B* ?+ B
  133.   fclose(fp);
    $ M' I0 Q3 D" X# N6 R
  134.   return true;% n3 k' `7 `, m; V
  135. }
    , g! s/ |0 V, m+ S0 f0 D
  136. $ h1 _9 A3 X% t, V3 f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 J. U' n7 T, l  W' P
  138. {
    % E( P. v6 q* e  L8 [
  139.   TCHAR  szFull[MAX_PATH];6 r7 g/ s" R  v" [4 t9 `9 L
  140.   TCHAR *token,*inter;+ X/ `' ]5 o, G, R/ I3 g
  141.   *szPath=0;8 K; C/ l  t" ~; g0 d# Q
  142.   strcpy(szFull,szFullPath);
    % G- o+ p. v4 @
  143.   token=strtok(szFull,"\\/");
      K4 |* G) ~% ^' _' d
  144.   inter=token;6 {; L0 {& X% h
  145.   while(token=strtok(NULL,"\\/"))$ i3 j; Y1 w8 k' ?* A
  146.   {2 o" W- H8 y) V+ k' q8 A) L
  147.     strcat(szPath,inter);
    9 _  Y3 i8 a$ d  E5 ]# Y7 [" E1 K
  148.     strcat(szPath,"\");$ ?  ^7 M$ {* G  V0 g; y) m
  149.     inter=token;
    ' J; H' R( ~- w/ A
  150.   }
    9 K0 D- R  m8 F. i) d
  151.   return strlen(szPath);+ Z- z% `, C, V2 Q, w" [& q2 i
  152. }
    . Y( ~# F1 j1 X; w: ]# C) [

  153. 3 E7 |4 o- V/ c5 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)" S$ E0 [7 [0 w+ ]
  155. {# H4 ?9 `$ \; U7 U2 L6 b+ U
  156.   DWORD attrib=GetFileAttributes(Target);+ Z/ j! D+ b; T0 e; s
  157.   if(attrib!=-1)8 R' u: o( b; ?
  158.   {+ J# I2 L6 u* T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 S/ t3 p" k1 R6 `( Z
  160.     {& q2 ^) z2 `( x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ L+ Q: o/ ~: t; _2 L
  162.       SetFileAttributes(Target,attrib);8 |7 u; f2 ]9 i3 B+ {
  163.     }  }0 `0 v4 W* b5 }
  164.   }
    " ~7 D6 N# S/ `( z; T
  165.   CopyFile(Source,Target,Erase);4 V2 L+ s' q' |+ c1 }
  166. }& G+ n$ H/ i( u
  167. . k4 t; {0 @. L6 q& \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 \' Y$ c6 f  H  p4 v2 ?8 K
  169. {
    2 m) T7 }' U+ m3 i! F
  170.      FILE *fp;) v1 T2 M  @; u0 S$ e
  171.      char  szBuffer[8192];
    : ~0 B* e) s7 v2 I
  172.   va_list  argptr;$ Y5 g' i" a  r

  173. * Y7 |& M% Q5 Y9 B! c/ _
  174.         va_start(argptr,message);
    ) V' Q- E) \# V9 V6 m
  175.         vsprintf(szBuffer,message,argptr);
    ; `! H! P1 M) x( ~  W- D8 D' {8 Z
  176.         va_end(argptr);
    7 A8 f/ O$ v& V# t! J  g% q" r- a1 D
  177.   fp=fopen(FileName,"a");
    - t4 K6 _% d3 W( v4 m4 l7 |' ~( f' Z
  178.   if(fp)
    ! U$ g9 m3 G' }: [. E
  179.   {/ R. V& R# |7 }9 n; c
  180.     fprintf(fp,szBuffer);6 j" R8 W3 W! T% x! a" B% A  `. J
  181.     fclose(fp);5 I  {+ C# i! P* c5 @' t- W
  182.           _flushall();5 Z* N+ _- x0 S$ J
  183.   }
    : C$ }; s$ |3 ~
  184. }1 f% K3 g- G8 m& ], u8 L4 Z3 \0 R

  185. 4 [" s. w9 ^- s8 [  F5 d( o
  186. BOOL CRevAppApp::Fclearf(char *FileName)% e2 F5 P/ Z, ~
  187. {: A+ `  H; Y* M* m
  188.      FILE *fp;9 F) ^* P6 G9 [8 M7 d
  189.     DWORD  attrib;8 K7 @5 q+ Y& b
  190.   attrib=GetFileAttributes(FileName);
    0 g6 ]6 F- y/ G. o# o
  191.   if(attrib!=-1)
    0 x! s( t2 u6 {1 Q2 g
  192.   {8 Q( Z9 h- u/ D3 ^, o0 |' N# m6 j3 s  J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' y4 C3 d; q8 V! u: `$ u* C+ y
  194.     if(!SetFileAttributes(FileName,attrib))
    ' g, R/ T) m$ N8 F; ^4 |: t
  195.     {
    * w% Z, i/ j- ^( @/ r, E/ D+ Z7 M
  196.       return FALSE;
    , w: s: e* l. d4 u, a
  197.     }- t3 x# n5 ]' D! L4 D5 D: Y
  198.   }
    . W0 i8 J. u) R9 F5 J
  199.   fp=fopen(FileName,"wb");. s6 p; E6 p4 w" f
  200.   if(fp)
    7 z3 O* `9 }  M
  201.   {" h7 d( o' W0 E" V" v; y, ?8 N: a
  202.     fclose(fp);
    ! r( E: L* J! P- G
  203.   }
    : }. z. N7 d  S' U) t4 C- b
  204.   return TRUE;
    , m! s* W; |( w. x1 r5 q3 U# s, s+ t
  205. }( W5 @0 q& y/ l: J8 T3 q
  206. ( a' O% g0 y1 q# T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 |/ r9 l/ o$ \
  208. {. {4 x& c! {, h4 w# w( i3 E
  209.   char filename[MAX_PATH];
    " @3 ]# R9 P" D3 I
  210.   LPUPDATEFILE file,olds;9 h! L9 {$ T8 G
  211.   std::map<int,CString>::iterator i;: q8 y* D5 ~9 M3 S0 J  f, E! v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) n( N0 D) I* V2 v8 e" T
  213.   std::list<CString>::iterator l;
    ) L- H! a( _  q
  214. & ?' K8 }, d/ _1 ?; n3 u
  215.   if(bFirstUpdate)
    * L' |, h/ W' `8 F8 r
  216.   {$ _' ?& }  v/ K* }8 P
  217.     dwCurrFile=0;9 C3 t2 Z% c0 U" U, s
  218.     bFirstUpdate=FALSE;2 ?; A3 \4 }4 e( q+ ^0 S
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : N' L' R+ n8 V8 S
  220.     {' y: b- m7 y* c" _2 E9 N0 E1 T
  221.       dwTotalFiles=UpdateLocal.size();
      f* w) A! j9 u5 l! S
  222.       dwDownLoaded=0;/ r, ^3 g/ k! H& H, n/ Z4 p9 s
  223.       bSilentStep=FALSE;) g1 m0 n( K' g5 ]: y
  224.       bCompressed=TRUE;
    6 N+ U# u7 ?% b4 _3 ~5 O; I
  225.       strExtLocal.Empty();
    : y+ l6 K* |" S0 E2 n
  226.       strFullName=(*i).second;3 Z! @6 U4 g9 z
  227.       dwProgramState=AP_CONNECT;
    8 R6 }6 Y9 Z' q/ L/ F3 V
  228.       return TRUE;
    0 O. t' }3 H& k7 C: i* Q
  229.     }% O7 _' W: _, O
  230.   }
    ) Q2 v. @1 j/ k: ~
  231.   else if(bRestartUpdater==FALSE). w) g- S: q8 @1 ?. ]
  232.   {
    ; ]6 k/ c# ]: e0 u1 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- @- {; W) y2 z6 p
  234.     {
    ! J: t8 [. T: v' q* |- u
  235.       file=(*p).second;
    % N7 q) B2 D. c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 X3 m% ?5 x$ `6 t
  237.       {# n. b7 I/ K! L. T# K5 l3 g
  238.         olds=(*p).second;
    - n. g' K5 A: }9 |( C
  239.         olds->vers=file->vers;
    % I: D' G2 e1 v! S/ U" b$ f. s
  240.       }% W5 ^/ `3 ?# l; g- c
  241.       else" s$ o6 a- S- I6 t) o
  242.       {5 c' b9 c! ~6 i. L' _7 l- A7 d
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( a4 w1 X9 j0 _! ]+ h; H* e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " e  d  _( }: o5 h1 r1 d! Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ \6 z- @/ d7 {- V4 R/ k8 w5 }
  246.       }
    ! ]4 W0 `( t% P' M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 q8 q$ A4 \2 V( J' A& C
  248.       sprintf(filename,"(%s)",file->file);7 B8 c' ~0 s# ~% E2 q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 B! F% P6 X8 }; M& W8 ~9 R  c' ?
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      r$ D- n* x3 h% v, P; a
  251.     }
    ! x+ v/ ?6 j# M6 ]' x& U
  252.     dwCurrFile++;
    ' f/ Y4 i3 e2 r0 j& }
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / d& W( |3 U1 o9 j0 ?, ^
  254.     {" o# @$ s/ b% z: A% z7 ?" O
  255.       bSilentStep=FALSE;
    ! S4 J+ w3 q9 {9 U8 k4 ~" Q
  256.       bCompressed=TRUE;; e( }" n$ ]# O( C% n
  257.       strExtLocal.Empty();, Y  O5 q+ I$ o9 f# D
  258.       strFullName=(*i).second;+ g& q3 B$ C7 Y4 ?. D" E
  259.       dwProgramState=AP_CONNECT;
    * L1 f1 W+ G4 q# `) G+ i% B
  260.       return TRUE;  D5 g; ^: V$ D2 [
  261.     }
    3 X) g, x: r+ k" i2 b* o) H1 Y5 q6 k
  262.     if(!bRestartUpdater)7 W4 x3 X$ \+ m7 `7 w
  263.     {% G& m. o: b; k7 Y9 c+ }
  264.       int iCurrSize,iFileSize;/ r7 _, t, x, Y3 r2 A) ]7 r7 C
  265.       iCurrSize=0;& ^/ L& S# R5 c7 |4 P
  266.       iFileSize=UpdateList2.size();
    ' t8 G2 U7 _$ g+ l9 O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; k- d" n* r. K% {4 f( N, N# d
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 ^: C2 I* y0 X! n. G$ W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, ^- u# V  z) v( k7 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 p6 F* F) S3 r, O: e# A
  271.       Fclearf(".\\update.dat");7 y  h, G0 K7 c1 d% ~/ T
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 ~2 ?6 Y+ w* @! I* G- B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 R! m8 s1 {1 D
  274.       {
      h4 @4 @4 L3 N/ U( D4 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      F% M' Z2 H, o: C6 y: `4 T% A( i8 M
  276.         {
    0 w) D6 @) i; _2 L* v
  277.           file=(*p).second;7 c& `+ f4 C8 Q. L( k) U) v
  278.           sprintf(filename,"(%s)",file->file);" @6 Q4 ?  W4 Z4 J' k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! M5 }5 i7 k1 |. Y
  280.           iCurrSize++;' R* O1 ~3 w* s. S, s8 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% v; t% K- ^9 t- [4 z
  282.         }
    % Q; v% L) P, _% {) Y. ~' r
  283.       }  Z" |/ k/ z! N, ~) I, W6 u  S6 B$ ]! Q2 _
  284.       unlink(".\\update.txt");. z- F: b: B, S4 ], J! K
  285.       unlink(".\\update.tmp");
    ( {2 j! a5 e! q  x' A
  286.       Fclearf(".\\checkversion.dat");. P4 E; b( f$ _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! B* n2 q! k: e$ |3 v
  288.       if(UpdateLocal.size())8 i: G! }9 |# |$ f
  289.       {
    ; E4 e: O" r4 N
  290.         UpdateLocal.clear();+ [5 D9 K0 ^7 A* ]( m. {  t& W
  291.       }
      {* n' r6 A/ s: ?
  292.       if(UpdateFile3.size())3 [4 z3 _3 ?7 c- Y- k3 J
  293.       {
    9 q7 n  m7 Y5 R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ J2 u9 Y% |6 H5 K
  295.         {$ E, |. s* G4 ]( m6 R4 w! r4 g
  296.           file=(*p).second;7 q# A/ e! V; A, v6 k1 ?6 ~) A
  297.           free(file);
    6 R" h0 ^- p9 A2 g& @+ e( ~
  298.         }
    # L+ r: e0 j, P( R9 L, Q
  299.         UpdateFile3.clear();1 \( Z  R/ {# i" ^" M
  300.         UpdateList3.clear();6 h% P$ J5 C3 t' r$ r
  301.       }4 A; {6 V6 C4 c
  302.       if(UpdateFile2.size())
    $ ?7 V- @: x2 K- p
  303.       {
    ; g2 \! @- a, k% h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), b4 c7 r9 P2 B% E6 A4 h6 l# m
  305.         {/ W, y7 V% a) @: N" l* l- X' N
  306.           file=(*p).second;
    $ n4 b8 H2 M& |. S
  307.           free(file);' H/ ?# t3 u1 m6 q! b  ?8 A
  308.         }
    ( e, I7 M% ~: T9 e3 o
  309.         UpdateFile2.clear();
    8 Z3 z" i* e5 G! w, g: M. m
  310.         UpdateList2.clear();
    1 a- m) E. j) ]  i3 M* o4 K. P4 \, [/ j
  311.       }
    6 V0 y. K: S0 G" Q0 v. H
  312.       if(UpdateFile1.size())
    8 m. W% Y2 D! q# F; q/ \  d  Q
  313.       {
    * H& g: a8 U* F# p+ ]9 a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), m' `- [* U* Q, H# l
  315.         {; s3 D: U+ O, T1 k5 ]" z6 }% f( `
  316.           file=(*p).second;3 V+ s8 J6 G! `1 K* k
  317.           free(file);
    : J6 l- @$ }( \" @
  318.         }! k2 P: c8 K5 ?
  319.         UpdateFile1.clear();6 L! A9 T3 F8 j& q7 q/ n- t5 s  L$ d
  320.         UpdateList1.clear();4 k% t' B+ k5 \
  321.       }
    , m! ^: ^  x5 u& U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' D: q2 h. s; _
  323.     }
    # V$ M! P, U  j' J# c* Y0 W: q
  324.   }
    & Q: n! v, i5 y2 f) Y! z/ d
  325.   return FALSE;; L+ q+ u5 N! Y3 A- k, [- ~
  326. }$ K. t' B: C; J+ Q5 b4 T- j( Z8 T' ?
  327. " x; |# O& b4 B$ G) `: E9 o( I9 H
  328. void CRevAppApp::ClearAll(void). ]; s! b4 Y9 Y& W7 ?, X
  329. {, u9 w+ M% k0 k! Z+ d9 a( u! G
  330.   LPUPDATEFILE file;
    ' Y* H% ^& T0 s2 m+ \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, ?6 J  C' [0 N* t
  332. , E# ]0 h# W0 O* y/ x6 f
  333.   if(UpdateLocal.size())
    ' [5 t9 }: Q$ `) b4 k
  334.   {" m) e6 z. _% t" s
  335.     UpdateLocal.clear();5 A; H7 W3 J1 y+ {" x
  336.   }
    5 B2 t) F7 e' P
  337.   if(UpdateFile3.size())- V  u, q" G) |
  338.   {
    # U& M$ D/ v/ R* o  Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / Z  V! J6 Z+ J. I5 K4 K
  340.     {& f7 M0 C' [6 N: @% y! S( C, q
  341.       file=(*p).second;1 J0 t" X* g' _: ?/ V. w# Y) J
  342.       free(file);
    $ x, j# I8 N) h. `) }+ P
  343.     }
    8 B3 X# ?, o8 T2 p
  344.     UpdateFile3.clear();
    ) E# }+ o1 M; l% |) K
  345.     UpdateList3.clear();/ N- ^8 R9 G  ]
  346.   }
    2 `0 r% t6 X* x7 a$ b, N2 t
  347.   if(UpdateFile2.size())& |! p- O: I' e% O
  348.   {
    , i# I) W: T3 y. Z* U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ p9 t8 y6 C7 E
  350.     {8 p# u# D. }: z/ i$ o( Q
  351.       file=(*p).second;
    ! Z* ?# z9 y1 @2 b* V9 t) G
  352.       free(file);. @: p+ ^6 f! X& Y8 S; |
  353.     }$ B: G) k6 Q% }
  354.     UpdateFile2.clear();2 |  t5 B4 _) M. z, L
  355.     UpdateList2.clear();0 _3 E5 H1 L6 Z7 z
  356.   }
    - k( Z/ u, F+ Y% S3 k
  357.   if(UpdateFile1.size())
    3 y& G1 |3 X/ B" ~1 M9 q
  358.   {
    . ^0 d- y  p" f% R8 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' t4 c, N: u! _
  360.     {( Q) c: W) h! ?3 T7 F
  361.       file=(*p).second;; f2 ^" N) T( t8 B' U8 L0 H/ {
  362.       free(file);- n' k7 o: X8 [: m: W' H) `7 c6 w
  363.     }
    9 o- i8 C8 b+ l4 u
  364.     UpdateFile1.clear();3 |0 E+ M) X, ~4 A
  365.     UpdateList1.clear();
    $ n5 Z, K! N' s5 Z( l. {
  366.   }
    6 i7 U$ {9 e' _
  367. }  , Q' B: L; J* ]
  368.   
    % U/ y! y/ e8 u; E% R
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 M! K4 O# M* s  v: m
  370. {
    / U0 Z6 t7 E: b5 v
  371.   int c;: Y- }& T$ X/ j+ Q+ w  _
  372.   LPUPDATEFILE file1,file2;
    ) j0 }$ Z# I7 V. S  ^- Y9 ?0 i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ s7 s3 D  L; [  a( E" J
  374.   std::list<CString>::iterator l;% R5 s2 Q: c* N: l6 N

  375. 5 m0 u# d# R/ f4 L, _( g4 K
  376.   UpdateLocal.clear();
    3 m: v8 z& F" B2 |0 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) f% k3 l. w, U0 m' c( O
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " _3 ~! {9 C1 A6 D( z3 l/ h
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ s5 q+ k( Y! h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( U% B" ~( E( g0 S9 J
  381.   if(UpdateFile3.size())$ O' Z1 `1 I' M4 l; o% p
  382.   {
    : j, ]! L) Y' Z; s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 M, w0 J& D# I
  384.     {" p0 N4 r4 }+ ?
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 V& ~0 o& r1 F- j" H* _" S3 y1 s1 @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 `1 t* I3 v- o
  387.       {4 j' j. ~3 Z5 p) P! T$ [
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' X- h- {$ L: T- O; g% R
  389.         file1->vers=file2->vers;. i! a; ]* x; N6 o. ]
  390.       }, [) ]" ~7 y7 w+ X& p
  391.       else$ Q! F" y" f* ~7 A7 h
  392.       {
    ) m) T  k( Y' r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 l! L; f4 T  {9 _( d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' }. _6 X* D! i* {7 X
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & Y/ k$ }3 U. w) t) B& {
  396.       }
    7 @; s5 }8 [( k
  397.     }
    * i4 ^5 H9 l. a7 ?8 y
  398.   }
    & ~+ R4 ^' d: o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' o1 M0 M7 P$ A, G0 P6 I
  400.   {6 f% t: p! b, [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% G, E- e1 ^) Q4 _& k7 v+ D' R
  402.     {
    ; d' e, f1 i/ n
  403.       file2=(LPUPDATEFILE)(*i).second;
      \& A  C: c0 }3 d6 X' }1 s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 J* z' S" f" [) U; l/ {
  405.       {
    - @% I$ r# V: ]5 g5 i
  406.         file1=(LPUPDATEFILE)(*p).second;
    & {9 [/ f# G! n, Q
  407.         if(file1->vers!=file2->vers)  ]* E& V, Z1 K# K! {
  408.         {# ]: ^& }. o& f9 x; W: |; w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 g& m/ o! H+ K* p& B
  410.           c++;
    1 \- [; I6 E( `3 d% ]! T  m
  411.         }
    1 C3 Y; U! d/ r9 e
  412.       }5 I; r8 z2 ~/ I! w+ Q$ R" e* N
  413.       else9 U1 A- ?2 D4 h  ~
  414.       {
    9 k9 Z" Y1 y% C9 x5 D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) r  ]# H7 ~) b' B  T: y: Y/ t
  416.         c++;) F, G# _9 E$ E# o
  417.       }  r- M, [( V, A6 ]
  418.     }
    9 Z! X0 ^9 ~: d; [
  419.   }
    ; b5 J& l/ B& g8 T3 f& A
  420.   unlink(".\\DownLoad\\update.txt");) h( E0 M5 [( Q8 i) K
  421.   if(UpdateLocal.size()) return TRUE;+ U' n: g# j0 G. z# E0 r* e
  422.   else                   return FALSE;2 f2 O5 B: L% ?- o9 d
  423. }
    8 Y. {2 K8 I6 T: T8 S9 y9 _4 J
  424. : l( P" g, \1 B( V& E8 J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( c+ w! q1 o+ ~4 Z4 I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; P+ v' D* G% P+ P3 b. H" `

  427. , O3 U$ O' G1 U7 \3 e2 O8 a( _3 _6 g8 E7 g
  428.   `9 S8 r5 H9 R5 d

  429. * j/ Q8 `% y$ X: [2 D: d% x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 {( K- M1 }: C
  431. {+ ^+ `2 z5 W4 t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( y: Y$ u& J/ W5 H4 {$ o( M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! d6 ^) E  a1 U7 ^6 o* Q, S
  434.   {- i. t  @% h2 N9 B# f
  435.     char szLanguage[50];
      N2 R3 R! Q5 @; h* b. k+ o2 g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " I! i6 Z  f, q! y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      }8 D" e, U7 Q8 k" O0 ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + W- H% A% |2 C0 ]' x- v
  439.     else                                   m_iLanguage=ENGLISH;% P6 Y/ m1 i/ q% M9 ^
  440.     char szRegister[100];
    4 t) U4 x6 C& K7 z4 Y8 e. R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 A, d1 }3 q5 k' H% s; Q
  442.     strRegsName=szRegister;
    * G. O. f2 t4 X% Y
  443.     char szPatchURL[100];! X1 K, G& }/ A* g9 g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 D0 K3 p! W4 r: E: e& F7 d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 C. T; {  g: {  v$ Y% d# @1 u2 h
  446.   }5 O0 D% [. Z; b  P
  447.   else1 k, E. k* x: x
  448.   {
    ) x$ f0 v0 f) F5 H( j( S+ t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 V  v3 F/ {6 m( q
  450.     strRegsName=DEFAULT_REG_URL;
    6 G3 @1 ~6 N( R6 \  ^+ H
  451.   }8 s( L8 K! O6 b" m$ N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + b: l, ^' t" b5 Z/ M# a: k! f
  453.   {. Q" w9 I% Y: _# a9 s4 I
  454.     char szIP[50];
    ( s3 H5 y1 d. w8 A6 @* Z
  455.     char szDIR[300];! p- j2 L5 p/ x+ V) ?
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; v8 ]/ R# K( _& U# M2 p
  457.     {: z, H* t+ C9 X4 u* e) \4 v' }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 H' D2 n2 t' k6 C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& J) N  `2 O: I/ b' z$ u
  460.       strHostName=szIP;
    8 n( n: b7 b, O+ D
  461.       strHostPath.Format("/%s",szDIR);& S# \+ t& S2 [% G" C
  462.     }
    & W) A% c5 W3 M4 c. e! A+ P
  463.     else
    4 q* I1 m5 U; A, U! h
  464.     {' q, G" e# o( g$ w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 T' a: U- N: I& e( g' |4 C
  466.       {
    " R5 q( G" Z  U2 W, \+ x
  467.         char szLanguage[50];
    + m5 H5 M! \$ V, V( u* P/ r+ y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + a3 Y' S' B$ @% W# Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # A! M( N( q, {! Z+ c* }$ ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 n+ s; W# N. o' N
  471.         else                                   m_iLanguage=ENGLISH;0 r$ \! I3 a# u: V' `+ o; p
  472.         char szRegister[100];9 E8 C! g* Z7 w+ t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # f+ _. k- _- e" Q
  474.         strRegsName=szRegister;
    ; @" O- O! g0 e  ^
  475.         char szPatchURL[100];
    , r2 v: p1 @' v7 Y; t2 v# g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % M5 d# e4 G- I, ?6 f; m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 n; ?1 h! @4 N: o8 E2 |
  478.       }
    / c* o' q0 s) _, D( S
  479.       else
    8 N, D& s5 W$ u0 G& U
  480.       {" l0 L- J4 \6 r/ _2 V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 x" }: K9 U( n( O
  482.         strRegsName=DEFAULT_REG_URL;
    5 f+ c3 ?/ H( s- _# `- ]. t( X
  483.       }$ Y; {2 r8 t7 C2 s  E
  484.     }
    3 o, u  H, ^& J8 \+ X% F
  485.   }  J' p8 F" E  B9 U& V
  486.   return true;
    - B1 |" F6 y& u" ~
  487. }: q5 z5 H, M) m6 u/ f  e
  488. : f# ^6 G* \# a1 j* {2 l3 O
  489. #include ".\ZLib\unzip.h"
    . J6 _! K( A6 N8 {1 M$ r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: y4 R( `% ~, C2 q( d5 }5 m
  491. /////////////////////////////////////////////////////////////////////////////
    % k, I: ]: z& R6 E2 [
  492. // CRevAppApp initialization5 K' e' _0 B, A" g, ^% L
  493. , c% _8 j! t4 r: A0 S$ g
  494. BOOL CRevAppApp::InitInstance()( J1 B% X* X& b- j$ x
  495. {
    - v/ {7 \  R; a" R6 l# V2 g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 o& y5 {; }1 k0 ?0 q. W- \! c

  497. ( w9 P/ ^/ _2 a$ |2 I# }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% r; [& b' f9 D/ F0 ?) K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . w" ~3 @0 R5 Q7 m# z: W6 H
  500.   {
    / O! \  i1 X% R0 R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! T5 T* |( ]+ @* Q8 O4 H6 E% O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ w7 t& o% d( `5 S! \# v) X- C0 o
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  X. t7 `) d7 R& j( F
  504.     {" P: b+ D# Z/ T9 W+ w& p& v
  505.       strcpy(szPath,szPathTarget);
    ! `2 e' f" X0 A8 s" V' {! P! D
  506.       SetCurrentDirectory(szPath);
    6 L* [+ d2 ?2 A- Y1 l6 }% t/ g: c3 s
  507.     }, b- r0 h3 l$ D- v* u3 S( L
  508.   }
    ; R$ g0 a- G7 b5 r
  509. #ifdef _DEBUG
    5 i% w, Z* y' [) \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  U6 t2 d/ L% f/ N5 \$ H  Z/ z
  511. #else* q# n0 D# w* F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ `! T. _/ o9 V5 W9 n  t
  513. #endif
    & H+ Z/ m" c7 f5 u. {. Y6 [
  514.   {
    , j5 q) A2 {5 V! r8 O
  515.     char tempFileName[MAX_PATH];. M' u3 p: G. f6 S
  516.     strcpy(tempFileName,szPathSource);
    ; O/ x" `+ ^* c. u) r4 Y$ i
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) T3 C: u0 {7 X) Z. I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! u2 c7 m  z7 V) ?$ O8 g2 k9 l
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 h+ T# ?1 O6 A: `, G+ m6 y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) x1 v) N2 x7 u0 V
  521.     return TRUE;: s# V' N4 Q" [( o7 c
  522.   }
    6 E9 ]% h/ x$ y+ Z2 Q" _9 I
  523.   // Nuke 0118: Delete run.exe6 ]9 g% \- d# \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    # v) u; y, p$ ?6 n7 X! V7 D- [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / e* ?* w5 Z6 @
  526.   if(!ReadCfgFile("Config.ini"))$ r9 E+ [1 b7 T9 l$ n" i
  527.   {
    " b" v, R4 n! x6 d9 G5 [
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 i& v# j2 _( D! F2 a
  529.     return TRUE;
    9 o$ o7 Z1 U) H  z
  530.   }  L" z2 c0 K  m  y
  531.   HANDLE mutex;/ Z2 Z  q+ T5 Z. H, N" D: ^! g4 V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 ?5 Y) [2 P+ ^2 K
  533.   {+ L) m) T+ P) m+ {$ m" F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 P) b; P1 Z  F3 b; ~
  535.     {
    : a* Z' f9 e+ c9 S$ a
  536.       CloseHandle(mutex);! |( |3 ~/ v: G" i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- \4 T8 v% w/ g# F$ X3 M# B
  538.       return TRUE;
    8 m, h5 B2 `4 R  ~2 |$ c; _
  539.     }
    $ }5 E. o. l+ G# C% o
  540.   }  
    " ?4 ?- c7 y8 I$ k+ f
  541.   CloseHandle(mutex);. B9 X# t$ n! W- S( w. ^) f6 M

  542. 5 S5 o0 {2 `: k0 N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ e3 J) y7 T; H% C  b# @* Y# T
  544. 8 e6 c3 ]4 ]4 \( I% u" Z' C# L
  545.         AfxEnableControlContainer();
    , c8 a- C( M8 m* b1 `; R

  546. 4 G. b4 C" H) ]4 g  |2 o9 E( n+ b/ U
  547.   bCanUpdate=FALSE;( Y) p3 S! S% H/ e, ^; d# [
  548.   dwStartUpSteps=1;
    $ g0 M- k2 X! }$ t% w
  549.   dwProgramState=AP_NOTHING;
    % l- F# b0 T( Z
  550. $ v' A5 q* ~) W! {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& @& r& h5 |. v) x
  552.   y. H0 z5 s$ W8 H
  553.         // Standard initialization
      ~$ U( \9 V; w& O& ^
  554.         // If you are not using these features and wish to reduce the size
    ! a1 [7 t" Y' p1 f; r! a
  555.         //  of your final executable, you should remove from the following1 ?$ {4 B. T$ t( u
  556.         //  the specific initialization routines you do not need.
    4 z5 r( ~' V# N9 g& c3 r+ M
  557. . y. H+ V: d. P. ^- L: v
  558. #ifdef _AFXDLL6 r( {7 y3 Q5 Y% n. J5 k9 D9 `1 C  t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 n% x; d& K0 z( j" l" L
  560. #else
    8 M& y+ v' w: s1 j% R. O7 V7 \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 C0 I  J; r% Q. P
  562. #endif3 b1 Y4 I* D; o: X5 B

  563. 9 E, J, }+ U- h* x
  564.   dlg=new CRevAppDlg;
    # n* R$ p( D0 C3 c+ u! F
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 |5 N1 {; o8 S1 z/ j- g- f  ^' z; R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: e0 n0 C: \" [, q7 k& u5 f. W
  567.   m_pMainWnd=dlg;
    ! }6 I- E- l2 C" W" \$ J

  568. ; x  d! ]+ C) G- z" w% N5 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 \3 A  t# W; [3 k# \/ |2 E

  570. / ?  Y; S. _( ]
  571. //  GdiplusStartupInput gdiplusStartupInput;7 ~3 U/ d; E" m/ v- u
  572. //  ULONG_PTR gdiplusToken;
    ! D4 ^, f: a8 v8 Q1 [: h
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  T' q- ~2 R2 i  L: c5 J' C

  574. / H3 I. A( L0 @* L
  575. //        CRevAppDlg dlg;
    2 v4 H" O8 v, z
  576. //        int nResponse = dlg.DoModal();
    0 _. J$ F8 i) O; f4 G2 [3 v$ H3 S; d
  577. //        if (nResponse == IDOK)
    0 Y4 a0 r  P4 G  p0 |
  578. //        {- R8 J8 q5 [5 X' |' Z
  579. //                // TODO: Place code here to handle when the dialog is, Q. N) }5 `$ W# ~/ Z
  580. //                //  dismissed with OK
    $ s- O4 m0 {$ y1 H0 l- l
  581. //        }
    9 d0 B3 y5 G7 b: B) i9 v" z5 L' L
  582. //        else if (nResponse == IDCANCEL)+ {4 U# q, H! q# G0 U
  583. //        {  H# a8 |% N) b: m5 Q
  584. //                // TODO: Place code here to handle when the dialog is: F$ J+ n  ~5 M% n6 R5 [
  585. //                //  dismissed with Cancel) ^/ S/ x7 {, v) k5 O3 n
  586. //        }
    6 k2 ~3 ?) x, @/ P
  587. 7 g  u& U* i  q1 K9 u, X0 y
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      y. x2 ~$ X  F3 f
  589.         //  application, rather than start the application's message pump.- x' f# l" f) l0 C7 `% g& u
  590.         return TRUE;* v9 B3 {0 X4 p- n  i
  591. }
    0 @6 U: U4 ]- h% c+ L# j

  592. 2 D6 q" k4 T8 t4 O/ M* P8 D7 Y' H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + x2 x6 j5 G8 L1 h" F- ?% S! L
  594. {- P6 T) ]6 b8 q1 h. S1 @
  595.   int i;( P! b" Z' U% S, k3 N( P; ]# V7 N
  596.   char *szRet;: i% v/ A7 T  C6 }. t# J

  597. % G' A! B6 F3 P6 R' a0 p5 J
  598.   if(pSource) { itoken=0; sztoken=pSource; }( Y% t, e) D3 `8 P9 C6 ^# t* N
  599.   if(sztoken)' V3 y1 U; W& ~; s, `
  600.   {6 y1 [; f! o( C8 n. n) x5 C) R
  601.     szRet=&sztoken[itoken];" E, F0 w) J. |1 D. g9 r+ ?; `
  602.     while(sztoken[itoken])2 b/ M/ x- ~6 a' s) e
  603.     {5 _) e# O4 C8 d
  604.       for(i=0;i<(int)strlen(token);i++)0 i6 Q% J9 y  B3 p+ I& b
  605.       {; ^5 ^  x5 v  ~& T7 O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    9 D; L/ b7 H% Y& j% n; T7 F* d3 j( G9 A
  607.         {
    $ K6 _' Z+ n; s" V  v1 b$ I0 m  v
  608.           sztoken[itoken++]=0;9 y+ A) ]' ^+ i7 V8 w
  609.           sztoken[itoken++]=0;6 w6 V! h; j' q+ T8 I
  610.           return szRet;6 h: f# p' C7 e3 c& F
  611.         }. W8 V% t9 a: F+ I+ D1 ]
  612.       }
    8 D1 m, ^$ D* O! K; Z
  613.       itoken++;
    , E& V# h( B% @! h& g* n5 s
  614.     }/ k2 j& ]+ f0 W  C/ c4 I
  615.   }/ j3 ~2 `$ L# T8 j+ Z
  616.   return NULL;" h* N# P- y$ ~' o9 Y* k
  617. }
    9 o8 f' F1 }: p6 l8 X# p+ _3 @
  618. . d% g2 y' G' z6 `
  619. void ProcessProc(long Total,long Current)
    2 {) y/ Y' y% s; b
  620. {: b: m  ?( w0 g) W! t! B
  621.         MSG msg;
    9 f2 y3 J/ }' V5 o* r/ R' V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; |& S# s4 W4 D* F( |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 _. |$ G! Q0 V( s  X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % X4 \4 S4 X  }6 X' s$ P0 ~" H9 e2 h
  625.         {  w) v1 H! M/ }* W2 S' m
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , N( V( r1 X# t" A& h. o3 q
  627.                 {
    , f' }# @% }  e+ O
  628.                         return;- s0 D/ s& {' d6 G3 }" S. `
  629.                 }& Q* o8 G" w4 G0 O$ K
  630.                 TranslateMessage(&msg);
    ! ]" M; E5 I: q# B
  631.                 DispatchMessage(&msg);
    ! ^; x! m) X! k. W; r
  632.         }          R* G, r& |% E, Q( }
  633. }
    / n& A7 X" Y4 ~
  634. & _  Y5 r3 W0 ^% a
  635. BOOL bFirstChar=TRUE;+ S% O1 Q, K$ X# C% m

  636. 2 u9 X( B' y) b" [" [8 K4 O0 B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 n$ `  s9 ]8 z7 Y$ l
  638. {
    ! Q& \9 X# S3 z% O# @
  639.         // TODO: Add your specialized code here and/or call the base class
    % f% _7 |. j5 e
  640.   switch(dwProgramState)
    % L3 C. d( y0 Q' J! A
  641.   {
    0 ?0 ~4 J' K# I2 m
  642.   case AP_NOTHING:! W6 @  x' v8 @- ^1 a/ M( }
  643.     switch(dwStartUpSteps)2 o" r0 f8 s3 c7 z2 ]0 [
  644.     {
    8 X, c0 `2 _7 O$ f9 H
  645.     case 1:) J2 E9 G  P. N* m2 F- {
  646.       {. t* Y# _4 P' m! c: K
  647.         int i;/ C0 p; h, ]& k. I6 [1 W. Q
  648.         CDC *pCDC=dlg->GetDC();
    7 Q. c  S- a. i/ U1 n: ]1 S+ s
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 k+ t2 d/ c" y4 H# I
  650. //        Graphics graphics(hdcwnd);3 v, p5 j3 D) E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 r2 Z6 \, h* D9 U! h! G
  652. //        INT iWidth=bitmap.GetWidth();
    3 {' H- p/ Z' s. M/ t
  653. //        INT iHeight=bitmap.GetHeight();5 l! S+ ~: ?0 J- J) C( }- [) y
  654. //        Color color,colorTemp;
    + \5 k/ X7 r! C( F/ d8 ^+ ~6 V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , x5 L: u  u5 {  x
  656. //        {
    8 T& w' R) d. \& P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . [: O4 g) \0 n9 V$ Y6 q9 b- a/ R
  658. //          {- w' S( O1 b+ x0 J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);' _6 [/ R0 {/ \  N# x- G6 c3 n
  660. //            colorTemp.SetValue(color.MakeARGB($ d; [7 g2 v: a! n* d# [
  661. //              (BYTE)(255*iColumn/iWidth),
    + \8 p% Z- L; [: a6 l7 ]& E; f8 Z8 G" t
  662. //              color.GetRed(),! b; E5 f4 |0 B0 ]: \; g2 V
  663. //              color.GetGreen(),
    8 D% P" N3 Z3 ?! t
  664. //              color.GetBlue()));
    0 a  b7 x: C5 F
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) n3 A0 C2 N- Y9 D! N' t+ z
  666. //          }1 y) Y( v  Q$ U9 l% _
  667. //        }
    3 S: Q9 h; t$ E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 e7 d& E, h; Q3 @" K' R) J9 E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( t4 ]- {. l; ?1 H$ Y( r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 r5 \: r* o3 ]0 a" `, S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" g0 m; Y0 ?) R
  672.         for(i=0;i<240;i+=8); d6 \" \- S6 |( b3 i
  673.         {
    " f  G5 {; l+ I% M6 |& \: W% D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # I0 f. s* l% Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 @# I; E* f9 V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ l1 `- N! p/ Z1 F
  677.           Sleep(33);; `1 y( y' Y$ t) ?9 ^
  678.         }
    9 o9 e1 @8 N1 I% V/ E( F& w4 q
  679.         Sleep(1000);
    7 l4 u& E  n- H( ?' ^
  680.         for(i=240;i>0;i-=8), ?5 L7 M/ I* ^" `: ]2 v& N
  681.         {
    0 F0 l8 r2 b/ P4 R2 P9 z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 x6 z* a- _4 I& f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & L) D' g* o" ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 D; n' t0 J; l
  685.           Sleep(33);2 j7 _# Z" W3 v! t3 s3 G
  686.         }8 G' d, i8 s& }/ ~% ]+ r+ `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 a/ T* w# ~+ }- I
  688.         dlg->ReleaseDC(pCDC);, w8 r( T1 u8 d. E# b' l) F7 T
  689.         DeleteDC(hdctar);
    9 ?0 N: t: @+ ]1 v- P% D' |
  690.         DeleteDC(hdcsrc);6 l: c/ n8 e; N! h  z  R! ]
  691.         DeleteDC(hdcorg);
    ! ^  n. k9 O7 V* X
  692.       }0 T, e$ R& O* q3 ~4 [3 f( x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , C1 [4 B8 o- G8 v( N5 f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  J$ Z* S2 o0 ^6 r" r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - L# e. A! L  [; s- V) Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - p9 E8 q& E; E/ D3 D; {+ |  O
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( f4 R( Y) m4 {1 ]
  698.       if(!Dn.Connected())
    4 }* V! L2 F" a
  699.       {7 J$ P7 W5 N8 p, c7 m( ^# ?
  700.         dwTotalFiles=1;
    # z: L) j# y" |8 W  r
  701.         dwDownLoaded=0;! F: p' ^; t$ z" J8 L
  702.         bSilentStep=TRUE;
    / y' Y1 O3 t( h. O) R
  703.         bCompressed=FALSE;
    + B; l3 L8 j' O3 b* O- f
  704.         strExtLocal.Empty();
    % i- d, P5 y5 w$ r) K* J
  705.         strFullName="readme.txt";' e  C# R8 U/ B) ], S$ f
  706.         dwProgramState=AP_CONNECT;2 ]6 y: ]) r3 S$ C/ Q8 S* \
  707.       }9 d: d6 ?/ E/ B* r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 {" c& E6 p% b" K
  709.       dwStartUpSteps=2;
    ) V! ?: z5 `' T
  710.       break;
    4 u' I1 R! l: G, @+ m" s
  711.     case 2:8 k' u, a9 C3 {: i6 m0 B
  712.       {% ?; _5 n) v) y# G% `
  713.         int iEOF;
    / q5 m3 v( h# Z! h  M  U
  714.         FILE *fp;& P6 B  M, i; v& k/ W
  715.         char szString[512];, |( s* e4 N% O$ b! t! q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; _# i; e( y- l% D
  717.         if(fp)
    6 V7 `1 G. S& N$ }, n" j& Y
  718.         {
    2 C8 g5 f  |- W+ Q2 `
  719.           do" c1 a/ U3 k2 d, n& X9 O' l5 y
  720.           {7 I( v  `1 L9 @" X
  721.             iEOF=fscanf(fp,"%s",szString);* k: @& t6 \" ~5 J  A4 q$ ^
  722.             if(strlen(szString))
    . d- a* @9 [, u4 j$ i2 G- O3 F
  723.             {
    $ Q# y5 T* M' q4 r# R( @
  724.               if(bFirstChar)
    . _* k0 I3 [7 ]: @; x# v0 a
  725.               {+ N+ x1 ^# m( y. b* S; f) l
  726.                 bFirstChar=FALSE;7 r; X& \* {8 j4 H
  727.                 bConnectIsBig5=FALSE;
    % ~" P8 f) ?/ W" j) L/ F
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ L$ K# J+ j7 f8 l
  729.               }5 m! I( ]( `) f: r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% F3 I" j% Z- D6 t7 D- b* I5 {/ `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + g) w. J% e$ x$ ?, V
  732.               dlg->m_ListText.AddString(szString);
    , R# w) s* s  w3 F% S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : a8 f) F$ C1 V" ~9 d/ s1 N
  734.               *szString=0;
    6 D# q/ Y/ v' l3 w; }" _
  735.             }
    / U' J6 Q1 \$ g3 U' o
  736.           } while(iEOF!=EOF);, {* r, Q1 J- l% G# D
  737.           fclose(fp);! U- V, o4 {1 |" ]
  738.           unlink(".\\DownLoad\\readme.txt");* N+ }  _3 G8 [3 N( ^) w" {
  739.           dwStartUpSteps=3;& N2 g- `2 h3 s0 A, A6 k
  740.         }
      K( k8 @) Q% v' V
  741.       }( }$ `7 O5 Y( t0 G  C" i. q0 Z, A2 K
  742.       break;+ E+ _# L1 R0 O1 N7 z1 v
  743.     case 3:
    - q+ k1 b4 c7 X. N) x
  744.       if(!Dn.Connected())6 ^+ ^- ?  m: r
  745.       {
    9 |2 R$ C8 P1 Z  r% d# B! b3 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) v2 y, I0 `& J( R5 S7 q
  747.         dwTotalFiles=1;
      P9 K% ], p- s' ?
  748.         dwDownLoaded=0;) h4 L: O6 h6 M( _
  749.         bSilentStep=TRUE;) c" o. _* J) J8 A
  750.         bCompressed=FALSE;
    % C! t; K1 |. q8 k8 M* H3 ^) L
  751.         strExtLocal.Empty();+ n" I5 r7 R# }6 k: a& f' M+ C
  752.         strFullName="checkversion.txt";
    8 }8 x9 u  \/ [9 c: _. H3 [
  753.         dwProgramState=AP_CONNECT;6 x7 M. V/ |6 l# D% k' [! W
  754.       }$ C; Z- g! P9 J1 \, {
  755.       dwStartUpSteps=4;, z" B3 A$ r0 n
  756.       break;
    2 z/ D7 {6 h# b' t3 M9 h" s
  757.     case 4:
    , }# O! V( [9 y0 a' W$ K$ ?
  758.       {
    # `( \  ~9 r; k# d
  759.         FILE *fp;
    9 k$ F. a; s6 j# K, b$ R: \" b
  760.         char szString1[128];
    , X- ?* d! [% }+ e  I+ [' |: d/ S
  761.         char szString2[128];# D* J! ^: O. q6 R' j2 Q9 Y/ g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( f9 u1 [9 y! l5 W/ o. W. A. n8 r9 g
  763.         if(fp)
    # O" {- M* ~! e1 ^6 {) ~& g: c6 w5 ?
  764.         {
    , p. @- g5 P: [2 S! V8 x- R- o, }
  765.           fscanf(fp,"%s",szString1);6 F" Z& V2 t4 u  Y& r/ d6 w
  766.           fclose(fp);
    2 e- l' W% e  Z3 q
  767.           fCheckVersion=atof(szString1);9 n$ ^5 P" G; `9 T2 P9 L. ]
  768.           fp=fopen(".\\checkversion.dat","r");
    8 H3 c0 Q& V8 u! Z& s/ k  d: y) g
  769.           if(fp)
    ' T/ _0 _0 o, K6 }8 Z8 J
  770.           {
    4 g' L, T, H3 b8 ~
  771.             fscanf(fp,"%s",szString2);
    ; ^% s! }' f6 I1 S. [% B2 d
  772.             fclose(fp);
    * z/ }1 N' V) ~1 U1 J
  773.             if(atof(szString1)!=atof(szString2))
    - X. p" E' C# d
  774.             {
    ! G! `+ j  g. r8 Q
  775.               if(!Dn.Connected())# N: H% E; _. I0 `, g6 G* N
  776.               {
    1 G9 u0 k: t0 Q+ f% M- a( W, z6 g
  777.                 bFirstUpdate=TRUE;
    ) L/ }+ z/ F& p5 ^) j0 F5 ]- H& T# X" W
  778.                 dwTotalFiles=1;1 i6 _0 h% b: _+ u
  779.                 dwDownLoaded=0;; y* @4 m0 `4 \; g+ [+ ?, g( _" y* t1 q
  780.                 bSilentStep=FALSE;
    0 k+ M  H3 ?$ p9 M
  781.                 bCompressed=TRUE;
    : s5 h3 I) ^; B4 L) `2 ~0 H
  782.                 strExtLocal=".\\DownLoad\";/ p+ V6 ]$ l/ G! s& {7 f
  783.                 strFullName="update.txt";# Q! `/ Y0 y' [, R
  784.                 dwProgramState=AP_CONNECT;
    3 m% B" x+ ^8 |' l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & O0 C3 _' ^5 n6 O: n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 [9 U# W, Q4 J6 v& L1 M
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- H' y) t& B& t
  788. " J$ F' d+ z# R8 y1 n' [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' d/ Y  G- S: {% `
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 j1 E# w; a/ L. p- B
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / D! A' M1 F% ^- u  ?5 ^6 Z
  792.                 {
    . Q: k' q8 |7 W, }1 e' K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    / Z8 x+ e- ?/ X, {: E/ {7 ]: O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 r7 x) A6 w; M, w5 J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 U, {' U* h% t" Z* J# h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 y+ u2 k& E) X4 q! E' `  T$ f" f

  797. - Z. x' h' y3 l/ C; l/ L
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; D6 k, y/ M5 E8 q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ C+ i8 c, {( l; c4 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % c# k3 ?/ b  s3 N7 ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @$ T3 P+ |$ D
  802.                 }
    * n2 x' w* K2 Y+ w( ?
  803.                 dwStartUpSteps=5;9 n6 F5 i/ E" O0 ]8 A" G
  804.               }
    + ]5 N3 v3 T+ j
  805.             }
    & P' i+ o9 d" y1 Y
  806.             else
    . {1 r% X) D7 ~, F/ C9 M$ p, C* H
  807.             {4 |  p! W) G# z/ b1 x/ S; p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) m0 J& A3 U. S2 t0 y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% M) d2 H3 H5 ~, s8 [1 L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 D; O1 H! e% Q( m4 \! c
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ r0 B2 S' x2 v+ f

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

4 J; V7 b. E  Y: \' Z- H
4 j! A2 {4 L9 i

評分

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