CSUpdate.exe源代码

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

4 q* `$ i% S2 ~
  1. / RevApp.cpp : Defines the class behaviors for the application.1 w3 Y; _- B0 i& U! t& \
  2. //
    ( N3 F( A1 p+ \; K& R/ B% [

  3.   A1 u7 c4 Z) ]1 z
  4. #include "stdafx.h"% l- d9 f$ n. Z. a8 V* e# ^7 @8 b% Q+ H
  5. * k+ H1 ~1 p3 Z; e( W5 Z+ N9 q
  6. //#define UNICODE
    3 f0 M+ }* A4 q2 B+ @4 v# [  }
  7. //#include <gdiplus.h>8 x5 }6 t% k) q& N
  8. //using namespace Gdiplus;
    ; G: t3 D$ X* h2 B7 [( u  K" z$ d
  9. + Q/ J6 @& R, E% X8 p2 z8 ^7 w) q
  10. #include "RevApp.h"
    1 f, ]! k% s3 I6 c
  11. #include "RevAppDlg.h"
    ' h1 A, e9 i& r& u& i

  12. 7 ^2 \* K3 j" s* |; v8 U9 L8 @+ Z
  13. #pragma warning(disable:4786)
    1 {: ~! M7 N( V& g
  14. #include <map>
    4 \- A& B$ z* N, {5 T2 U2 v; S
  15. #include <list>
    - k+ c" W$ ?! ^. _2 d" X) {" S
  16. #include <direct.h>
    6 k3 Z9 ^( N1 n6 o- ^; N  A

  17. ' y0 r% P, S: t# |9 [4 \
  18. #ifdef _DEBUG3 ]: t' m  b1 N( M" G" a! }- ]- X
  19. #define new DEBUG_NEW
    * F- S% R# W) H% ?/ [; ]5 W4 y
  20. #undef THIS_FILE
    " j; y' y: F* [+ r
  21. static char THIS_FILE[] = __FILE__;
    : z6 g  ~' x. N" K/ A8 S! U$ D
  22. #endif" i3 S1 |0 F, C0 H8 \% a
  23. #include "SkinResDef.h"
    2 N  |. z" a- Y4 j1 v  l. T* |) Z
  24. #include "ChangeBG.h"- @  S0 J. W: _
  25. #include "AFXINET.H"
    5 c: E2 b2 X0 t) n# s

  26. 3 Q: o$ i  J" `3 Y, Y1 J) u& y5 b
  27. #define TRADITIONAL_CHINESE 0
    & n$ H9 I" e3 ]2 G4 c+ ?6 E
  28. #define SIMPLIFY_CHINESE 1
    % R! G2 a: V2 k3 A( g, G
  29. #define ENGLISH 2
    2 w8 Y3 K1 p9 m5 w
  30. int m_iLanguage = ENGLISH;- o  r$ i1 c+ Y% E
  31. /////////////////////////////////////////////////////////////////////////////
    1 p$ j. B' e7 m- x. O6 G+ S
  32. // CRevAppApp0 t) h3 d9 m# r3 w; H  H

  33. : X8 K9 i9 s* L/ R
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ t% e& H2 n7 v% v
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : e* Y8 ?' E4 F. @/ b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      G/ A5 Q- I" b9 _2 m* Y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' O- [! ~1 R- j* o, u
  38.         //}}AFX_MSG
    2 W- g2 m% F! ?& W$ F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( d& E2 N9 W/ ^9 a
  40. END_MESSAGE_MAP()/ ^, v, y( s8 J$ J

  41. ) j5 ?) @6 e* N7 ]8 z. w
  42. /////////////////////////////////////////////////////////////////////////////
    - {8 d2 _+ R- M: J6 @8 e8 |
  43. // CRevAppApp construction
    9 F, B: J; v4 d2 `2 N  I  l

  44. ' N% P& I* ~0 j- D5 l( r
  45. CRevAppApp::CRevAppApp()
    & @+ A( ~3 B4 x1 ^% I: c
  46. {3 t, u- {# j* A+ Q0 G, G
  47.         // TODO: add construction code here," P* V! u- X6 y
  48.         // Place all significant initialization in InitInstance
    , ?; `8 x  a% H* Y- q" b
  49.   bDisplayIsBig5=FALSE;8 j  R7 W) s! s4 ^: Z
  50.   bRestartUpdater=FALSE;, c- K6 b& B8 w' E, w* F
  51.   bFinishUpdated=FALSE;
    ' ~; M6 j7 F6 v  R* [* B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : x8 J4 }0 x% K: l& r  r
  53.   InitChangeDataBig52GBKS();
    ' d# Y8 Y2 z* K
  54.   InitChangeDataGBKS2Big5();
    . H: I  p- j/ O% X2 t& |% @
  55.         //4 A- K, [$ `" P0 P8 `# Q) L- i
  56.         bClickRunExe = FALSE;, I2 P4 n+ S* ~/ k) n( v* W
  57.         //. Q5 I8 Y  K& j6 m9 Q
  58. }) \% o6 M" ]  P5 ?
  59. 1 j7 O  x2 E+ J0 n
  60. CRevAppApp::~CRevAppApp()0 V8 }) h4 ~( h
  61. {
    % W& F0 ^8 V& b
  62.         // TODO: add construction code here,
    : X" R: M8 `* y
  63.         // Place all significant initialization in InitInstance" z) g. }+ S& w" h. \8 d8 g
  64.   EndChangeData();1 E/ V1 k+ \$ G
  65. }1 E- E$ I5 q# \! J  {# R2 O, M% z
  66. 9 Y2 R. o% d* t5 z8 K- x
  67. /////////////////////////////////////////////////////////////////////////////" e5 @* r5 s+ Q# p. ~# D4 T2 Z! r
  68. // The one and only CRevAppApp object; d( E: B8 ]! q  ~4 F) k9 h
  69. ' c0 O) \3 `1 I# J8 K0 H$ g
  70. CRevAppApp theApp;
    + h, A, m8 k' E( w- U

  71. 3 M- ^( [" j1 T" X; F+ F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! v3 }9 |1 Z0 P# v# v
  73. {
    ! y  m( J# j) r& p$ h4 v* T
  74.   int iEOF=0;
    # O" W% h- w" ?
  75.   char szTempName[MAX_PATH];
    . `( v2 M0 E; X& q) b, h
  76.   *szFileName=0;
    " k- T, D( q( q8 a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % M" K. k6 M5 O/ ?( T; \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    + ^: U7 y: V6 {+ M8 s
  79.   {6 Q6 O/ N; _% A2 R4 R5 ]
  80.     strcpy(szFileName,&szTempName[1]);) c" N( |+ K! S1 l# n/ L3 g6 Z4 z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 f- u/ I( z9 N# \3 |! W+ @, ?
  82.     {/ m- s6 h& P6 p4 l" V
  83.       iEOF=fscanf(fp,"%s",szTempName);4 F+ o' j# I& ?) l; s7 M
  84.       strcat(szFileName," ");
    & \9 V% u7 X( z) H# F# p' a
  85.       strcat(szFileName,szTempName);
    4 N: k  _! p" c* r4 y/ }8 ^6 C8 M" f
  86.     }1 M- ^+ `/ K" V- |' ]
  87.     if(strlen(szFileName)>=1)
    ) y0 q" I# e, P8 [% D7 Q4 x" N
  88.     {
    - b- `- G* @$ r& `' H: @: w
  89.       szFileName[strlen(szFileName)-1]=0;
    % c, ]% y; ]# i6 Q
  90.     }( W4 h7 r" i% W7 W% ?1 X; b& \4 c
  91.   }
    ' F) o4 [2 P+ {0 _7 v  R
  92.   return szFileName;
    6 i* E' }6 k* ~1 d4 m
  93. }0 H3 m+ b- e% Q, g9 o9 E5 g

  94.   [: R0 f8 M0 z. l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( f' o: K, V. c8 j! @' f
  96. {4 E; I6 z$ Q- H% y2 G9 ?* b( u
  97.   FILE *fp;4 I* s; ^& b% D
  98.   char *key=NULL;
    6 o% z% `3 |8 z
  99.   char version[MAX_PATH];6 n2 ~3 \+ s  g/ D7 C& r+ O( i8 \. N
  100.   LPUPDATEFILE file,olds;$ F. f5 O" S  Y1 ^0 b& o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 L3 a$ P- {7 F

  102. # F7 t2 J- B5 p$ ~
  103.   UpdateList.clear();( S. l% r* l. n( `7 F0 [0 e9 n
  104.   UpdateFile.clear();& l  V: Z; B& Y: U6 `% N
  105.   if(GetFileAttributes(filename)==-1) return false;  y. z4 L" i" g' v, H! R
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * z. N8 n( M# ~/ D
  107.   fscanf(fp,"%s",version);1 \1 f% F5 e  b, Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) V; G' t' c  a0 m2 H, G. ^; ~
  109.   while(fscanf(fp,"%s",version)!=EOF)# w  e9 h5 F2 M% j8 K
  110.   {3 x. T- f4 {8 V. w' N
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) S5 @5 u* c5 @$ `
  112.     fscanf(fp,"%s",file->path);
    + ^% Y% V$ {$ R  z, ^
  113.     ReadFileNames(fp,file->file);- G/ m, `5 H( n( s0 [$ j
  114.     strcpy(file->full,".");6 R) j! H! R2 i- Q# b) K% j$ K/ e
  115.     strcat(file->full,file->path);
    3 s) i2 w& h) U+ N0 _
  116.     strcat(file->full,file->file);- u: ~& j+ a) n$ A# ]. Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ M3 x5 _" I# q$ w) p
  118.     {
    ( b% O  r+ [, b4 N2 m
  119.       file->vers=(float)atof(version);; O) l* u5 y" Q1 @  @
  120.       UpdateList.push_back(file->full);
    " U: y6 U4 X; M5 t& M8 v) n. A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- P3 p. F3 S! H3 d! W6 X
  122.     }
    ! f( W5 N) F; w0 l3 l% |. f
  123.     else
    ' |2 [5 P: O+ m4 _; e  z. T- g7 I+ B
  124.     {! [0 k- P; {* b0 e0 o4 M1 S0 [8 T
  125.       olds=(*p).second;% d3 e* H- v" s2 p) Q' Y- H/ i
  126.       if(olds->vers<(float)atof(version))
    " p" V" q8 M7 t
  127.       {0 R) v9 x* F6 m/ s# F, j
  128.         olds->vers=(float)atof(version);
    - M$ S+ [( {: q( N
  129.       }% X- f( G7 S* `7 V3 O
  130.       free(file);  B' h' H; Y9 S' M
  131.     }
    ) |. @0 x* h4 ^8 h8 U
  132.   }
    6 {8 ^3 l9 N! B- k6 o4 Q6 W
  133.   fclose(fp);& u. W7 X) n( D# Y/ Q3 j$ y
  134.   return true;
    7 J% N7 P* f3 f( b
  135. }
    9 w# U) R1 W8 p  r

  136. 7 k8 g$ l( ?' q+ N9 a1 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 Y- @! C: `! l2 F# _5 v
  138. {
    + D; K# y8 Q1 Z- @% t
  139.   TCHAR  szFull[MAX_PATH];
    6 P  v: ]( A* ~, r
  140.   TCHAR *token,*inter;, Y9 l. Q- |0 {1 _1 n
  141.   *szPath=0;
    - o% P1 g, I. S
  142.   strcpy(szFull,szFullPath);. H: {* V2 O# J- t/ J
  143.   token=strtok(szFull,"\\/");
    5 ?3 }: i4 {7 w) H+ l
  144.   inter=token;  e3 Y8 w4 {% o
  145.   while(token=strtok(NULL,"\\/"))7 v, H$ `% d  J3 N; F6 u2 N& x
  146.   {* t% z/ @" e1 Z8 U$ k. R% W6 t
  147.     strcat(szPath,inter);
    ) S4 ?8 T2 k$ b1 j
  148.     strcat(szPath,"\");: Q" {8 Z4 X" q5 Y5 L  q
  149.     inter=token;
    ! y3 p5 d+ |% N3 G  _* C- j
  150.   }; e( z, p8 s9 t  W' Z
  151.   return strlen(szPath);+ A9 Y; `. q3 N2 K
  152. }, E3 O; w' u! h+ T. e2 u
  153.   M) Y" J% a9 Z5 E2 t) X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ u& }, C7 A& K
  155. {) G3 \6 M" h. o$ W' a6 O; b# P
  156.   DWORD attrib=GetFileAttributes(Target);
    # J/ w- \, h( U
  157.   if(attrib!=-1)
    ( m8 n% K% I! I$ Z9 v
  158.   {
    ; h& Q/ }$ _: t! A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" w4 T) v1 Q5 `" i: Q" g: j. t# @7 t9 h4 B
  160.     {
    4 ?% C) L. ?2 M& j6 \- `
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 @, t8 l: V0 }% k  m
  162.       SetFileAttributes(Target,attrib);
    ( q) d! R% G, U& E0 q. ^
  163.     }
    6 N, e$ P8 i+ L# e9 l$ O
  164.   }
    - ^4 a0 [; S# T9 _; E
  165.   CopyFile(Source,Target,Erase);
    8 L4 E% v7 h6 z
  166. }
    8 M$ Z9 m3 D3 s8 V4 B: Z5 j6 d
  167.   Q  ~- J% z, s
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # ~& r0 l7 o! D1 g1 ]
  169. {& k% t" Z! B$ F8 W
  170.      FILE *fp;0 |; D$ |/ i- A, l' q$ U
  171.      char  szBuffer[8192];$ z+ e( J  r3 b7 ~" n* l$ y
  172.   va_list  argptr;9 o# O% C8 S) k4 D9 M7 @
  173. : J# w, \$ U5 b& y0 ]
  174.         va_start(argptr,message);+ o! u# U' K9 ?: W
  175.         vsprintf(szBuffer,message,argptr);& @# `3 l. s5 b& B3 o, u4 C7 Y; `
  176.         va_end(argptr);- d+ g# ~9 V. K1 t1 }) d. Y
  177.   fp=fopen(FileName,"a");5 a" E* v- n+ |% l  f# R* c
  178.   if(fp)
    & B. ]6 g9 B5 s% X) N% [
  179.   {- ^) }# M# K( k" E( f1 |  I
  180.     fprintf(fp,szBuffer);5 J8 L" R; [2 |  a9 r1 z0 |
  181.     fclose(fp);  e5 F0 N2 k/ `, s5 E/ d4 k
  182.           _flushall();
    . F" }! d% b8 U( N8 h% z- A
  183.   }! n, }2 G% d- T* @& s  v
  184. }
    0 j7 U' [4 R8 e+ b7 _

  185. 6 N2 a% h5 J- H- S7 t) d  P$ m
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ {# W* [; `6 q1 }
  187. {" ~9 f8 o8 o8 s, Z% j0 o; o2 @. Y
  188.      FILE *fp;" c4 @" R2 S8 J1 x" _$ h) B' S
  189.     DWORD  attrib;: H9 S% M2 N; c, N+ F7 `9 m9 A
  190.   attrib=GetFileAttributes(FileName);' |6 f1 I) c) u( _* H, H
  191.   if(attrib!=-1)9 G9 D+ S3 C3 m- I3 i' @# F
  192.   {0 u( C/ N  b& d- h5 O* `- r5 {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . ~/ o7 u8 O' z' e( m. Z3 g  [
  194.     if(!SetFileAttributes(FileName,attrib))# K5 J# U, @, e! I  P
  195.     {
    2 u$ J! M8 y8 |/ o3 C9 z
  196.       return FALSE;$ r" o/ @7 k) p5 Y3 {
  197.     }
    7 E  S0 ?' @, I4 S6 P$ H
  198.   }2 h7 F; {6 `3 U- m' }
  199.   fp=fopen(FileName,"wb");
    / d3 h  U1 G& @$ h
  200.   if(fp); s6 P( ]/ ^; p9 u
  201.   {
    + `- G! a7 r6 v/ o" O
  202.     fclose(fp);
    " C1 R3 l) ]$ _. k
  203.   }4 |* D" r5 T4 m7 }" n+ V
  204.   return TRUE;
    5 o2 s4 [3 o4 N" D
  205. }
    ! @9 Q# y" |$ Z* y9 l
  206. , y$ w& T2 y, e" M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)2 W" f# g' S4 A. e. _9 w  }
  208. {
    / P: t! L; u% s( n& B: |
  209.   char filename[MAX_PATH];
    + `9 Z  Z# ]# e, a
  210.   LPUPDATEFILE file,olds;
    - y  V0 D% a" L2 U& C
  211.   std::map<int,CString>::iterator i;
    1 e+ ]' t" O1 \* r! X% m" y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    " D' h8 t# P/ c5 T& F
  213.   std::list<CString>::iterator l;
    6 w2 f. i' _2 F7 w5 T

  214. 0 r' ?9 `7 c! E9 t# n, @% m- @
  215.   if(bFirstUpdate)
    # z1 x( Q9 n0 k0 F+ N5 t
  216.   {
    * R& X3 g! _2 t& _. T' `. \1 A
  217.     dwCurrFile=0;$ u+ `; n1 P* E
  218.     bFirstUpdate=FALSE;3 C' N3 C9 X, C% D' N% d" P7 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% \" w) O8 s8 v8 h
  220.     {
    2 v/ I6 H8 X+ u# v+ R, B+ }' m
  221.       dwTotalFiles=UpdateLocal.size();$ v7 U) B: Q1 ]# q! |' R  B7 g
  222.       dwDownLoaded=0;
    5 @6 L5 j2 z7 f* e" J2 q
  223.       bSilentStep=FALSE;
    3 q; t; o" o' j! p- w) q2 y5 p. M
  224.       bCompressed=TRUE;
    $ C+ q! ]3 w/ r8 v  f
  225.       strExtLocal.Empty();
    7 Q! _$ a) j: G
  226.       strFullName=(*i).second;
    5 K, d+ h! K5 k, P1 F
  227.       dwProgramState=AP_CONNECT;5 S" A% U+ I) G2 M0 g
  228.       return TRUE;; n0 s/ P# l6 G& O
  229.     }
    / m' {: z+ H( r6 ^+ V8 y& J
  230.   }
    5 W1 D* z  m- {% a7 x4 i8 I
  231.   else if(bRestartUpdater==FALSE)
    ; u$ Q. ~8 A4 C+ N# y
  232.   {$ [" `! d3 D1 A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " n. h0 ?: Y" |1 U. |
  234.     {! b8 L2 \) ]3 H" C) N9 P
  235.       file=(*p).second;
    5 T+ j2 ~3 C0 W: J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). ?" ~, [4 g, h0 D7 a; D
  237.       {
    : c7 G5 w4 Z" s& W
  238.         olds=(*p).second;/ u' q$ u' l  B  m7 X
  239.         olds->vers=file->vers;% h5 m% V8 p5 ?) ~3 i
  240.       }2 F# q8 c9 M) \) T% x0 F; h# V
  241.       else
    4 o6 o$ t& y5 S/ ~
  242.       {
    + h4 \( c) d4 J: [1 o
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 y5 {0 Z3 G* G' _; b) _& z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 T' S- Y1 }& X# Y. w  z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 a5 X8 l. f5 ^
  246.       }) o; m7 S& |6 r: T$ s* t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , J2 \9 A8 X: }; P8 X
  248.       sprintf(filename,"(%s)",file->file);( d, `6 F8 A8 [5 b9 l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 {% S* T, e& P' {
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % R! C. F/ V" R" b7 R+ V
  251.     }8 s& K8 c$ |' R4 A
  252.     dwCurrFile++;- d. ^2 ]# v0 T( }, S! r
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 Z' y5 H; L, ~! V2 ?1 U+ i
  254.     {% W$ b3 A  F2 s* ^' q) `
  255.       bSilentStep=FALSE;
    9 L* F( N# S1 D& o% }
  256.       bCompressed=TRUE;
    3 k3 I( P/ q; f+ Z3 l
  257.       strExtLocal.Empty();* z$ L8 a7 ]" J1 m) C& L' j
  258.       strFullName=(*i).second;$ C% B; ]: K' ^9 I  X& H
  259.       dwProgramState=AP_CONNECT;' \  S/ e. C5 T8 ^1 g; I9 m3 k
  260.       return TRUE;4 a. w0 }9 u/ k/ _" Q
  261.     }
    ) A) V6 o# c/ ~/ g
  262.     if(!bRestartUpdater): F4 m% }( G9 A8 V
  263.     {  V. H. R( L1 @
  264.       int iCurrSize,iFileSize;- w( M6 s' a# F3 z/ I( V
  265.       iCurrSize=0;
    ) _" r9 n2 A5 u% v7 T
  266.       iFileSize=UpdateList2.size();
    1 O. N0 @0 c/ R$ P+ O& _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . q& G/ M3 P2 }* C# I" ~. E7 C6 D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ U$ ^, [9 q% c0 I; t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , s2 |4 P" x% p1 K& \0 B, Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % y/ K% |- Y- x" U6 P
  271.       Fclearf(".\\update.dat");
    & a# O* w& W% U/ k/ O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( ^- U2 u7 y  f% i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* s- u) K: k. A
  274.       {* p, L* L" e( h+ W) Q5 E; T8 \$ M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ ^( W1 t2 J+ `* |' O6 u
  276.         {+ ]$ C2 o& l2 c8 ~* c
  277.           file=(*p).second;& d& t* W8 x# b/ }  y5 F( y4 @
  278.           sprintf(filename,"(%s)",file->file);
    2 ^0 J4 d1 W$ X' U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  H3 y  I$ d" x7 d9 l
  280.           iCurrSize++;& l- h5 M7 {1 S, m& M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' @0 H/ E5 W0 l2 v* C
  282.         }
    - }. t4 V. p' v0 F/ u; Z1 X* d
  283.       }
    # n( t8 a$ P$ l" \- {0 j' {
  284.       unlink(".\\update.txt");
    & F6 d, x/ y. z0 H5 G
  285.       unlink(".\\update.tmp");
    , Z2 i( l% t$ l" ]
  286.       Fclearf(".\\checkversion.dat");9 u4 \, R9 R* D% `* b) j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) ^! G) e" L5 f; q5 Y( h4 B
  288.       if(UpdateLocal.size())
    . s7 U' Z4 |1 w2 V8 K
  289.       {5 N. |. ~$ O& c) ~
  290.         UpdateLocal.clear();+ N6 z4 M- ]1 t5 a5 X, q0 Q
  291.       }) d3 l7 Y. v6 U$ @7 N, ?* M  @! ^
  292.       if(UpdateFile3.size())1 f- U) w9 D. y1 q, p7 P9 Q" H; ?
  293.       {
    1 [8 h" Y7 Z9 h* b2 O" |. N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 g- G1 [: N  ?5 b' A# @' k
  295.         {
    " f6 F/ \! }& C! l2 e, n) i
  296.           file=(*p).second;/ x9 X# Q6 N0 d! M* V
  297.           free(file);  ?0 y' w% M- ^+ [
  298.         }$ j* ^5 n. t+ S. R( a2 x' j7 f# ~1 ~
  299.         UpdateFile3.clear();
    0 n% ]7 }7 k' ~0 x* I/ t( Q
  300.         UpdateList3.clear();0 Z/ G4 O3 t: M1 S& J, ?( v
  301.       }5 J! m, [3 c( r2 E: ?7 S0 K
  302.       if(UpdateFile2.size())8 [/ d4 G$ S: V2 E: A. E2 x
  303.       {
    ( h$ V6 m, k2 w9 L) m& \
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - u& x$ m) X! S
  305.         {. c0 N* E' k: m  {( E
  306.           file=(*p).second;
    $ ]$ g/ D% D( H$ w
  307.           free(file);
    , v$ u% ^7 b7 @, v$ H" n5 I& ^
  308.         }
    : `( Z# o, i0 V! |1 [
  309.         UpdateFile2.clear();; w. ]  o  w; V, P$ x4 Z
  310.         UpdateList2.clear();
    7 s+ ~4 F- R9 j" j
  311.       }
    3 o: W7 N& }# ~% _5 F. g" Q/ o$ y3 P
  312.       if(UpdateFile1.size())
    1 `! K2 z1 B9 k  T& n
  313.       {3 M$ |! t' M0 E3 |( n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! ?( m% l% F' T+ V. c' y
  315.         {
    5 E2 C: ~7 S; y; Y
  316.           file=(*p).second;
    9 N* o' Q. p% \" ^6 H0 C
  317.           free(file);( p" m: P1 t$ e0 Z3 o6 m5 L0 O! m
  318.         }) M& i: ]* P# }- ^& [& h5 G, [
  319.         UpdateFile1.clear();% m- A/ O8 f. y. q8 q- H6 g  c
  320.         UpdateList1.clear();
    7 A7 C: _- n  a- |  h# }, o
  321.       }: Y* b4 ?) u" s, j4 D: P/ _
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 o: j8 c5 L. K3 V! ^
  323.     }
    % |) t5 E+ c2 o
  324.   }
    $ j1 A3 r! ]( e9 z5 U$ v# w
  325.   return FALSE;% X4 o" U0 B; ~
  326. }) l9 W2 h" d4 ^

  327. 2 J. t2 ^* ~9 w
  328. void CRevAppApp::ClearAll(void)0 C( q4 z* _* B0 l" Z
  329. {
    - F2 k+ d- [, Z5 L
  330.   LPUPDATEFILE file;
    5 X7 m& N) O0 H( S% ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: s2 ^2 `* `, s' Z6 j4 j9 B
  332. ) o0 N9 H; C0 ]1 h. ^8 u/ |
  333.   if(UpdateLocal.size())
    : k' n7 X/ u0 u0 l( s
  334.   {( o8 f/ G. d6 x: g1 A3 ~
  335.     UpdateLocal.clear();
    ' r) M) O5 t' n- D! Y
  336.   }
    ! P# u0 {" O8 @  E
  337.   if(UpdateFile3.size())
    / ]; `4 U) W$ i0 h7 K4 i$ J
  338.   {! E$ g( a+ |) V% Q7 H, l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); S4 \+ y& Z1 E2 U
  340.     {  y, k5 M) K' h8 v, M# ]4 g: v* b
  341.       file=(*p).second;) T" L+ I9 Y/ v
  342.       free(file);
    6 M3 V" n* |; {6 _* G2 L: u
  343.     }
    & ]# c; M& O. C5 m
  344.     UpdateFile3.clear();! @- r  ^% i& X& B: w. _4 T. i8 B
  345.     UpdateList3.clear();
    : ^& o( z7 P( f( N+ a& j9 f6 A3 V
  346.   }+ o/ h+ M9 N  _/ g2 \' a
  347.   if(UpdateFile2.size()); T. F: a8 {8 d4 E9 s% P5 ]. q. _' c
  348.   {, B4 A* [) g* v$ Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 [) j7 T0 u$ a
  350.     {: S' c+ M. _% f, x
  351.       file=(*p).second;
    * ]) c* ?: k1 X3 y% k9 w( e" [# G& G& n
  352.       free(file);! E3 r& N9 z0 f+ h( w7 W; U
  353.     }
    3 P. Z' v' f. F
  354.     UpdateFile2.clear();" r, @3 w# z% o
  355.     UpdateList2.clear();7 L/ T) E0 P9 W  D
  356.   }
    , l& [! U% K6 P) |* q
  357.   if(UpdateFile1.size())
    & o2 a% e6 s3 v) f4 n1 P
  358.   {2 o& ^8 v3 }* U7 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 t/ s/ c5 ^3 B$ n
  360.     {4 h, g* P* j& I9 B4 ^" e
  361.       file=(*p).second;
    3 t( l! B* v! o2 ?1 w5 P
  362.       free(file);' g1 G7 i6 B! I% _6 b
  363.     }4 ~2 [2 i, Q. D, H2 v* J* M3 }4 a
  364.     UpdateFile1.clear();' n& Z5 ]- r6 c0 q% }
  365.     UpdateList1.clear();
    ) s0 _* k% e# N* f( \0 o" W
  366.   }* Y' v9 x( `0 h0 k# n
  367. }  
    % O( V2 Z- d4 k& w3 `! X5 }
  368.   $ ]; n+ W8 ~" `7 v' u( V. Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' k. @) c; }( S. X& {
  370. {( X/ w% ^* X# x: ?6 B$ N
  371.   int c;
    3 J# v0 a, B1 Z$ M6 V9 u
  372.   LPUPDATEFILE file1,file2;( v& U4 n, p: C' G$ r4 Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / c, X5 o$ p8 Y/ m9 {1 U; t3 @
  374.   std::list<CString>::iterator l;
    6 F' \" |; H. G3 @

  375. / @. F+ Q/ j& j% p/ K
  376.   UpdateLocal.clear();
    ' T% t7 m7 J0 n. C6 F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) e' N, p* G. b0 ?$ m% t4 `2 @% Y1 o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: V5 |+ x( r# T. x# O: `  V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ F0 N9 T2 D5 j0 d/ c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) s4 o( q# [$ ^/ I" b
  381.   if(UpdateFile3.size())  C) p! z; y. v! H7 ^$ J
  382.   {
    & Z1 Y2 P. p& N, W  q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' P; g- v) O! s6 L) b; u
  384.     {
    $ _  G0 L5 s( h/ W+ i- x: D1 b* a
  385.       file2=(LPUPDATEFILE)(*i).second;2 z/ ]* u, G6 ^! n3 m, n# \- h3 u  ~  \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% Y, ?9 a% g( p$ e" L
  387.       {9 `( [3 F1 F  n5 M% r
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) R) V% }  Q# r( J  {" x2 V( s
  389.         file1->vers=file2->vers;8 i. V& b7 S7 Y4 O$ j* L( q
  390.       }  S9 X/ N" H' r9 R' |' ^
  391.       else
    ' ~3 D  c, i: p7 v& a; S
  392.       {. T6 X8 {. H+ @+ m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 a/ D5 s- m# d) Z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ I" m" K$ j4 _5 u! g8 h
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / Y9 z2 s/ U6 p2 a: q  D" O
  396.       }" v9 w% }" k0 ]( l2 K& k: K  l
  397.     }
    3 l* U5 J) s6 S# ]6 j9 S$ _3 m
  398.   }# ]# i3 b5 j* [
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " G3 d; t0 L; W! `0 w' ~& m! \
  400.   {
    , Q5 A6 D' ?' t/ f5 p$ T% L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# q* G" h6 A8 B
  402.     {
    ( j- r; R+ X  p: c
  403.       file2=(LPUPDATEFILE)(*i).second;
    + H3 i+ b0 w: `( `; T' j5 R, f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 d( N6 r0 X6 o6 }- i* O
  405.       {
    0 O. l) x/ E6 n+ T! M8 g4 D* d: O8 R
  406.         file1=(LPUPDATEFILE)(*p).second;, c1 u+ F/ \( P7 C  l' ~
  407.         if(file1->vers!=file2->vers)
    / v  C- Q5 P& o$ g2 f7 d
  408.         {
    + i4 d( T7 w6 _, r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 v( Z3 ]: q( W7 ~, }& J
  410.           c++;
    7 f4 N$ q$ Q" L. w5 Z& B/ J
  411.         }
    8 `' A, b) ?6 a2 S& O( Y" p
  412.       }
    , e( G8 d& O2 a2 Y7 s, d
  413.       else
    & F7 d5 A+ S# y7 G7 q" z
  414.       {
    2 A0 F( H8 ]$ u% U' P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + X5 l, m$ [0 W
  416.         c++;7 U+ }, v7 _" D4 C% t
  417.       }
    ! M  E+ e+ n, e9 O0 p3 L, |2 \" E
  418.     }+ ?) N+ d0 K  [  G6 a* m
  419.   }
    " N. M, D$ B( J0 X
  420.   unlink(".\\DownLoad\\update.txt");
    9 R" D5 y8 f: y# E5 u$ A) O# S5 g
  421.   if(UpdateLocal.size()) return TRUE;
    % u1 X" z& i4 F( C* A4 E
  422.   else                   return FALSE;$ m2 h  q2 Z$ D; {6 I
  423. }
    / o$ T# C1 O# _& x" m9 ]
  424. 7 i( v3 D* N  |" P0 [: L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " t: j/ I9 R) g( v) y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( q9 @9 _* }/ l& x+ I8 K8 b4 @

  427. ) |! E0 _0 W( C

  428.   l% V4 ?# ^% {: F& E( h
  429. , a' w, ^/ l8 \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 `6 c5 f& z) o) K' F9 D3 ?
  431. {" j) V# J+ a  s3 s+ i3 M2 G+ J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . [# R2 Q$ N/ J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 D" h# s: X4 u9 h
  434.   {
    % s/ t' Z# g% E9 W/ w3 N! K
  435.     char szLanguage[50];/ d. k: K1 v  f% u5 d, g- {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" k# |/ \9 [0 f/ v% ]) Z8 ]
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' N- C0 G( z( C$ K' y0 s0 a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & H2 B) S6 b% Q* t( C$ i
  439.     else                                   m_iLanguage=ENGLISH;- X. r& P. y5 M: i% j, B
  440.     char szRegister[100];
    + B% s7 D; y: P& k9 U% ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 n0 W5 u8 C8 |. H( E4 e
  442.     strRegsName=szRegister;5 g( ^9 L  ^% d/ I
  443.     char szPatchURL[100];# m  p( J3 c3 E4 f& q/ h1 p/ R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- N4 t* Y) c7 p" A& Y0 I* i' \2 [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; X' _/ f7 K# z# X& n
  446.   }. e  f7 |/ S8 {  w/ E
  447.   else" A1 k( u7 G" t% A; {% r- v6 i
  448.   {
    - E( K4 v% I8 q' R! |" M, A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( i! s3 r1 z) G) @2 E
  450.     strRegsName=DEFAULT_REG_URL;
    $ Y/ `/ H; M( o4 `8 `
  451.   }
    5 s0 c# s, t% |+ ^& P8 u
  452.   if(GetFileAttributes("hosts.ini")!=-1); j7 B! g0 l- I5 _  G
  453.   {
    5 ]7 ?+ H5 n' `1 s6 I7 L, t3 _2 B
  454.     char szIP[50];9 ^7 f$ y! b! }6 m) I, Z, s, \
  455.     char szDIR[300];0 ^# J. H: q& J8 u& U% M% i8 j
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ h2 F6 n1 X3 x, p: a1 r* z' E% G# M! p
  457.     {
    & y0 M& e6 ^0 H, o+ y# i& H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");% d9 y: E. M  q3 o
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 S' h, z9 E5 @' E0 j+ \
  460.       strHostName=szIP;
    : b2 E6 J* [. @
  461.       strHostPath.Format("/%s",szDIR);/ W6 E, D" Y# x# Z3 T
  462.     }1 ~: r! c# }: u# Q. R- J6 l8 ]
  463.     else8 M1 I5 O, D% n  D+ m
  464.     {
    # @* X7 d. E1 i( ~) n, A/ G+ ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - X7 p0 o- Y9 `4 ~& I
  466.       {3 U9 d  b- _( m7 y% [$ p; o7 x/ V: \% M
  467.         char szLanguage[50];
    * _* S) ?" j( \5 `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 X( s2 d5 c! {8 |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* b7 P( {. C+ I; L4 p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , i" }, f; E1 y
  471.         else                                   m_iLanguage=ENGLISH;
    3 ~4 G& f+ |  ]" c
  472.         char szRegister[100];
    & v) g- z9 }+ c' C7 b7 l# K* j+ |. W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / N( w: \6 ^: T- W9 i+ I  v
  474.         strRegsName=szRegister;9 \, g& s. Y+ ]2 k% R& u* k4 r
  475.         char szPatchURL[100];
    3 Y! B0 e: U  y  a& N; f% j0 s2 k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' g4 t. }) a& i/ o4 H1 y. p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ u/ _+ k$ s+ m4 e! J
  478.       }) k. E- p& ?; a5 ]
  479.       else
    + Q% k5 B' M, L# J
  480.       {
    ) o( ^: U0 S, x5 Y/ x- e+ U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 g. u* ]( o* |. C
  482.         strRegsName=DEFAULT_REG_URL;( q- j$ A  T8 q& X8 @
  483.       }* \( u# `$ O: U2 ?4 f& K
  484.     }& Y- u1 k4 v6 B. a8 \
  485.   }- Y7 k( s, X- u% v) F
  486.   return true;
    & f* w/ i2 S/ S' ^  u
  487. }5 g6 E! Y# Y. _, V

  488. : o$ l: t* _3 t& h
  489. #include ".\ZLib\unzip.h"
    - w! P+ |4 O' a' X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ D; h7 H4 s/ g; `9 d
  491. /////////////////////////////////////////////////////////////////////////////! m3 ?3 }: s: k/ {# M
  492. // CRevAppApp initialization
    : v2 E. h4 Y$ ^6 E6 s* A

  493. 6 o1 q8 r6 V5 a- t  R) e' P! c
  494. BOOL CRevAppApp::InitInstance()" R- r$ b3 V( a2 c, H8 E$ ?1 s
  495. {
    ' e3 }. ?4 M1 L6 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( v4 t8 H  k% ?9 s; Q
  497. 5 U" `4 i3 }: g8 U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! H0 Y* ], u0 W& Y8 f7 b; _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( J) _4 x8 D& Q/ S1 t: x
  500.   {
    * w8 j7 B" k* U7 n. O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , c- F3 ^; H+ J' v- |( h8 u. Y- V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' R8 j& e' V6 L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 }' [2 M2 b# j) B; {# J& e
  504.     {! P; P; {3 d2 W6 I- T% q+ j9 p
  505.       strcpy(szPath,szPathTarget);; G  m+ Q: v# t; G
  506.       SetCurrentDirectory(szPath);9 U+ h7 O# F6 v$ W
  507.     }
    3 J4 J8 I  O" ^* `/ s
  508.   }
    % U) v, h* R7 E6 a) N$ s
  509. #ifdef _DEBUG; N- c, k3 s9 a+ L9 ~) r8 P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; L# {* j  Z# B7 N4 J
  511. #else
    7 _9 y2 u$ z% z2 H  T5 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); h5 @# u5 B$ k; B6 T6 {; s
  513. #endif
    1 {6 o& S2 K8 s+ u
  514.   {1 K; J6 I6 j4 }7 f3 R7 k
  515.     char tempFileName[MAX_PATH];7 v- m; j9 F3 F5 K1 k, \0 l+ O
  516.     strcpy(tempFileName,szPathSource);3 ?9 F1 @0 ?9 M- N/ C: W0 K1 W$ t
  517.     tempFileName[strlen(szPathSource)-12]=0;) J3 I4 e* a+ e3 d- b9 D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% `. ?9 [0 i$ [7 ~- f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* i1 ^4 [0 N9 a3 f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 a/ H* ]+ N  R4 r3 z# p
  521.     return TRUE;
    1 n- y- U2 [* g) N
  522.   }1 a* Z3 L8 S! u
  523.   // Nuke 0118: Delete run.exe
    % M0 Z. e; B7 V( [$ a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" t* w& {" O3 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / E1 t( g( L2 g( _& x% e
  526.   if(!ReadCfgFile("Config.ini"))+ M0 k9 _- G% O1 v5 Q1 B
  527.   {+ n' Q% }. v+ H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ I+ J+ L+ q/ S
  529.     return TRUE;0 M/ a* X! Z5 Q! J2 w
  530.   }
    9 d8 m8 s, d: t( w6 `
  531.   HANDLE mutex;
    ) |& C7 G! z4 e( I, P2 r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 a) x; ?' g) a6 T5 t
  533.   {+ V- i& M4 @' d8 e/ S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ R' t% O; T  B3 E' o
  535.     {
    : y  e) T' ]+ |! k
  536.       CloseHandle(mutex);1 k4 P5 q. I- b) b: a* E% M
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 Q1 `8 Y, T. x! N: q5 Z+ G
  538.       return TRUE;
    + U5 I3 I( A* ]. ]" H' P, q# m
  539.     }. O0 ?4 N# @3 S
  540.   }  
    7 {! z! l. I( H. ?
  541.   CloseHandle(mutex);
    ( T7 f2 G5 M9 D

  542. + h2 c9 K% C. e# Z5 \! F3 F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) O6 D7 n  {! e* x7 U

  544. ) n0 m# ~, d' ^7 A( J9 b7 @! n
  545.         AfxEnableControlContainer();
    + Z* S( ]6 b$ x& s' g# T5 y

  546. 4 W7 l5 W* {8 D! t/ d
  547.   bCanUpdate=FALSE;9 _8 g$ T+ T! U: s
  548.   dwStartUpSteps=1;
      u) ]2 E% T6 h2 Z( W
  549.   dwProgramState=AP_NOTHING;
    5 u$ E; {; O! E. u: c" N, ]5 \% l

  550. # s( w& s. p! b7 F. K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! A% S, m! X' d2 O( }' _. t8 Z! l

  552. & s- ^8 ?( p9 I& o7 y# H  Q1 r
  553.         // Standard initialization
    4 \. d( g: J* t  I# r
  554.         // If you are not using these features and wish to reduce the size
    - O" M0 \$ T: q# @: X6 u7 s6 O
  555.         //  of your final executable, you should remove from the following6 M: T7 p4 _) Z9 q4 R+ y9 n
  556.         //  the specific initialization routines you do not need.! r( }; H+ j: J+ ^/ {( R7 E

  557. 0 u9 U0 {1 E/ v% F) t6 d6 u
  558. #ifdef _AFXDLL
    8 b5 X# F" Z9 l* \- A" ~) f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 j8 G6 }, {  y9 `2 F
  560. #else
    3 y) P' z3 k* `2 |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ H/ k: j( x6 F6 b6 g$ {) k
  562. #endif# R$ h4 E( a" x" F8 D: V

  563. ) U$ X' o% ^" M) _* T# X' \
  564.   dlg=new CRevAppDlg;; H' C: m+ j4 O: H6 Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);  o3 T1 `3 m. i8 [0 P  n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 o& O/ _# Q7 x0 l) ?" l" Q  O
  567.   m_pMainWnd=dlg;3 V2 T( }' [  D7 q
  568. 9 U; @& @& t; O0 ^) G* R* s) P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 `) A) w7 C/ L: a
  570. 3 x0 G" @; I  N9 \/ Z% S$ W( N: Z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % [6 O! ^+ Y- S1 w  N
  572. //  ULONG_PTR gdiplusToken;
      X3 R4 E6 K) o" H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 _3 U# Q3 E) E! [# r$ E
  574. * K3 D, A* j$ \0 n5 ^- ?3 O
  575. //        CRevAppDlg dlg;& y0 }5 b6 j/ W* ]
  576. //        int nResponse = dlg.DoModal();( n+ v1 T' z5 @" V8 e% ^
  577. //        if (nResponse == IDOK)
    % N. `, w! L1 B4 ?
  578. //        {& n) I  O" Q3 c" l7 ~  `$ M
  579. //                // TODO: Place code here to handle when the dialog is/ T0 M- {  s2 d  d( o
  580. //                //  dismissed with OK
    9 W) ^/ f% ~& P* D1 g
  581. //        }
    : x  L0 i- X& n3 C7 S' E2 p5 [
  582. //        else if (nResponse == IDCANCEL)3 l* f* u! u6 T. e9 T
  583. //        {5 d. [( c' G1 g, B1 T
  584. //                // TODO: Place code here to handle when the dialog is
    ( q: h# H3 {* P
  585. //                //  dismissed with Cancel
      w& y7 j. g& Z4 T( {. b( X# W$ v$ V
  586. //        }
    ' Z' w, ^' B& ^

  587. 3 o& q& v8 w  r( h& J
  588.         // Since the dialog has been closed, return FALSE so that we exit the( u% }$ Q0 T3 D% q* e3 X4 E
  589.         //  application, rather than start the application's message pump.. x" U3 Q- Q! ?) i- n) N; f
  590.         return TRUE;  F1 G6 X- O4 k, M7 q; }
  591. }2 ]  k2 m# g8 l. Q7 R0 w* p

  592. , P9 o5 v! J+ {  _/ t% u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - d  w6 k6 Q% }" o7 R% \: i  n7 S; X
  594. {
    9 m+ W$ B) I  T8 j
  595.   int i;5 R. p  s+ \! r: l  I2 J' D
  596.   char *szRet;" d. P8 p3 Q( k+ h
  597. ( c: X  j9 n8 J' g' M$ K( f
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - S- a0 G/ q  \. H+ x4 q
  599.   if(sztoken)
    : h+ t, v1 C- V: Z
  600.   {
    6 U3 x- l+ ^  X: {* U* t+ q- r+ k
  601.     szRet=&sztoken[itoken];
    * z" O3 r% o7 V( d: Z- h9 L
  602.     while(sztoken[itoken])
    8 v# h- |' f+ S$ y
  603.     {
    2 ?& e4 k4 C. f! u' z; W
  604.       for(i=0;i<(int)strlen(token);i++)
    ' t$ e! h" B7 ]& l
  605.       {
    # L& W. U+ x* j7 E# }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ a4 A( {/ y1 n$ y1 O
  607.         {
    ( X/ q; O; ~$ s$ R* p, ]8 j
  608.           sztoken[itoken++]=0;
    1 N! q; q+ e5 e: t
  609.           sztoken[itoken++]=0;
    / [$ |1 l; X* J; j( H
  610.           return szRet;
    : U; P8 s7 \3 f6 `
  611.         }
      B; K8 P  N. ]2 V. v" ]8 R1 a
  612.       }' F$ c- N. h$ B* U
  613.       itoken++;8 ]( \# Q/ Y( R, Z1 w4 w6 P
  614.     }) a* d2 \  U5 \$ `9 q
  615.   }
    4 K1 r, h  Q4 ^- W4 F( c
  616.   return NULL;8 z9 y6 K4 W2 v3 O1 D, @
  617. }
    3 I. i5 O: C9 x+ @6 r* u9 b5 |
  618.   n1 W$ n' N9 ?2 q& y8 I* x9 V
  619. void ProcessProc(long Total,long Current)
    ! c* {* U: J$ q; @  p
  620. {5 K( b* @% U8 h
  621.         MSG msg;
    , V, L- q. ~+ l# Y' p3 A2 W9 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    & n: o" V" Q, Q0 H! `' }; b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 s) `% B$ {. T+ ^. D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & ]2 e0 @2 Z# e& H5 s" ^4 a0 d# h
  625.         {. d) ]2 Z; j) X) J
  626.                 if(!GetMessage(&msg,NULL,0,0))$ }$ d, q8 [+ d) w0 @% `
  627.                 {/ M/ _# M3 Q) P2 i$ v
  628.                         return;
    # n9 |& V. |* X: k" Y
  629.                 }! V7 Y% Z7 H, q7 X4 v! S. Y* a! Y
  630.                 TranslateMessage(&msg);
    ) |$ o9 P1 G  P9 l
  631.                 DispatchMessage(&msg);
    . }: Q5 Y6 g* @* h
  632.         }        ' W* I* _$ O+ J& e" f
  633. }$ z* s% ~; |3 y  s% r4 x# B  P
  634. 3 e2 i6 A9 _5 x  P- D
  635. BOOL bFirstChar=TRUE;/ \/ _4 {* c: H
  636. . O0 p1 Z. [5 J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)* z8 J7 v) V6 R7 `% b' |0 p
  638. {
    ! T" h0 {  q* C0 ^- n' q
  639.         // TODO: Add your specialized code here and/or call the base class
    " j- z) T/ v8 @/ c; S8 ]6 e
  640.   switch(dwProgramState)
    7 |/ w# H! V0 w" w9 A& _( w$ v0 G" s
  641.   {8 ^+ O1 g+ P/ s
  642.   case AP_NOTHING:9 {% D8 b) t# M8 t' J. ?: K! z+ c$ m  k
  643.     switch(dwStartUpSteps)
    / o6 c3 {2 E* M
  644.     {1 r& w( r6 c# S$ T3 i
  645.     case 1:
    . M* P0 k% ?. W$ e+ X
  646.       {0 p6 x6 c$ X# D5 l4 w! T  R
  647.         int i;! }" W% O" {! Y  y
  648.         CDC *pCDC=dlg->GetDC();
    7 P7 l3 `) r8 t% |6 x% U+ q
  649.         HDC hdcwnd=pCDC->m_hDC;5 f& ^3 y# r! ]' u( I
  650. //        Graphics graphics(hdcwnd);3 T+ k7 U! [1 A0 a- T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 j' Z7 O! p5 c9 E# F. k. v: Q
  652. //        INT iWidth=bitmap.GetWidth();. q' D) |8 R" c- X' a
  653. //        INT iHeight=bitmap.GetHeight();- `$ c  w1 N6 F" `2 w4 l& S
  654. //        Color color,colorTemp;
    9 S0 A/ h. W! v7 i+ v) M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ b8 p. ?) l" A1 g; V! N2 [) ]
  656. //        {
    , N& h+ @2 }/ O; w+ z" \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - r* L7 N" x' V* d# R
  658. //          {. ?) i9 e  G) R4 }# H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 R) s2 _+ F2 |. }
  660. //            colorTemp.SetValue(color.MakeARGB(, B; b  O: y, v* x: ?
  661. //              (BYTE)(255*iColumn/iWidth),0 C  {# r% f$ w* `0 \$ j
  662. //              color.GetRed(),
    " a' M9 q5 h( v% `/ S  y
  663. //              color.GetGreen(),( D( d  a, x% T4 T, d: K
  664. //              color.GetBlue()));( ]( V6 h% f5 h' |: T( y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- x4 @4 ^& ?) X$ E1 \; r
  666. //          }& B: l% Y7 p) p* s4 n. e
  667. //        }
    ! I, y; V2 {- I& H: K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & R6 k* ~. T' E' P+ G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : O; P8 N; F6 S: V4 @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 s3 A3 b! G: O3 {) u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , q2 _( N6 W7 f# H  a
  672.         for(i=0;i<240;i+=8)
    5 |0 f# q4 I) }) t0 b5 C- [
  673.         {
    & W0 Q3 x9 A/ U/ \2 Q  `+ z1 b
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# V1 K4 d1 ?, C- A, ^! W/ f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 F0 h8 x1 M. |7 v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 a% I7 k2 m3 h' x
  677.           Sleep(33);
    : V1 g! b4 p- m2 K
  678.         }3 i. k5 _- Z: p% {5 g
  679.         Sleep(1000);( n! B# k9 x. ^: v% M
  680.         for(i=240;i>0;i-=8)
    5 w" J6 w' x: ^
  681.         {
    ! X" |! H  h8 r. p- r
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 ^: z) l6 y3 K+ a( q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / h$ k  V; f& B% S0 u: A- j
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , n, g, @( q3 Q/ h
  685.           Sleep(33);% X. S. d  M* {: G/ |) u6 c
  686.         }
    ( a8 _7 u/ x; p4 P6 g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 b; X! z/ q# I  x1 F
  688.         dlg->ReleaseDC(pCDC);
    0 F, s+ t* x; i- F5 k7 ?/ s; S
  689.         DeleteDC(hdctar);! x+ L- }& G' r6 r! L
  690.         DeleteDC(hdcsrc);. h" V' D  L: z7 y) ?8 f0 f1 A
  691.         DeleteDC(hdcorg);
    - ?2 G) [1 E- y6 o; S: l& V
  692.       }$ y) U, c) \) P$ w. I% K& E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 c) V! |/ J8 i0 N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ ]9 N* {$ }" w+ d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " e2 o* |" e* Y  u) E5 X7 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    & t* E# ^/ R& i' G' |) g( S8 k* v/ J6 Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 M# P, x$ n; G3 |* e& t& n
  698.       if(!Dn.Connected())0 g+ `9 T$ w5 J: b- H
  699.       {& \: d  o( ^. }2 }
  700.         dwTotalFiles=1;
    3 v5 N7 k; T+ {: j; U& M
  701.         dwDownLoaded=0;
    3 R. u3 C% w+ c4 M) z
  702.         bSilentStep=TRUE;
    ( }# h/ u# c# W- j
  703.         bCompressed=FALSE;
      Z" y# ~8 o2 l2 e
  704.         strExtLocal.Empty();. ?+ Z# ?. G$ T* a" k
  705.         strFullName="readme.txt";
    0 k7 D0 o9 [& w. M. e, X
  706.         dwProgramState=AP_CONNECT;
    % m# b  }- ~* Y* [5 Q! \
  707.       }
    * l4 J0 d# o0 U! U- k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + ?0 f4 K0 B+ i. d& |1 p
  709.       dwStartUpSteps=2;
    : u9 z; [4 B& r! C
  710.       break;
    9 y/ X; X6 ?, }. x( W- N
  711.     case 2:0 y" a3 F4 s+ @% |1 F; I
  712.       {
    3 @, t  V1 n! ?  H, G3 \$ z
  713.         int iEOF;
    7 ~5 X6 D; f! _* J
  714.         FILE *fp;0 p$ p; A' ]! ~$ G) ~' k& O7 ^
  715.         char szString[512];; l) T% z5 g' x) B* @9 c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 ^5 L- \! ]8 A, L- Z( V3 C
  717.         if(fp)
    ' ]" ?& K( u. Q! U/ M& _# y
  718.         {  r4 B' g5 n6 m1 |+ |9 y% `  G
  719.           do
    1 T& J& }$ Y$ F8 Y4 j6 @& h
  720.           {
      L5 S' c  N3 B6 e$ u3 j: V
  721.             iEOF=fscanf(fp,"%s",szString);
    % E  m. h+ T, D& S
  722.             if(strlen(szString))0 ~0 T0 h* o4 f/ v' F
  723.             {
    8 g: L7 g" T4 a6 _- q
  724.               if(bFirstChar)
    ) e( r/ Q& ^/ b( w( M
  725.               {
    " k4 y* U, ]7 `- X6 |$ r
  726.                 bFirstChar=FALSE;* z. G/ E# ]  R9 p7 Q3 w% q
  727.                 bConnectIsBig5=FALSE;
    0 U2 P1 o' P0 O% d/ x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 \: W, Z4 @" s7 D/ n. r8 W* l
  729.               }5 T4 s2 C* q3 Q+ e3 h9 L
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- R6 G3 B9 \; a. C  _5 m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' k% x5 L. t. F/ C, K6 x$ l: M' c
  732.               dlg->m_ListText.AddString(szString);
    ( r/ C# \1 Z& N% \% B, _( I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - m9 a$ ?- M7 E& l! o' ^
  734.               *szString=0;
      X8 [( J9 j7 l3 i
  735.             }
    2 V  K9 h  T2 Y9 {' a+ A( t
  736.           } while(iEOF!=EOF);
    & G! x4 _6 U. ?  G) `' N1 }
  737.           fclose(fp);) y$ {, s: n) h: Q, {, [
  738.           unlink(".\\DownLoad\\readme.txt");
    & Q7 r- c7 D. o0 G5 w! n4 c) t
  739.           dwStartUpSteps=3;
    $ D( D/ o* ^- ^
  740.         }
    ' _% a8 l) J: O1 G0 G% N
  741.       }
    ' d  K2 p: l! i. L8 f9 r
  742.       break;
    4 p. C, c- K; [' h! B1 h  t2 b
  743.     case 3:) c8 C$ p1 {, c) A* I  K" G
  744.       if(!Dn.Connected())
    , ~! i6 `  Z* n* g
  745.       {
    . H7 {: M3 w; p& C. b  X
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ' Z' L3 A5 ~, ?( Q
  747.         dwTotalFiles=1;
    ' N4 ^: F/ T& ]% N! h
  748.         dwDownLoaded=0;7 f1 `+ f# M  T5 ~
  749.         bSilentStep=TRUE;0 j. C4 E/ u2 Q" M
  750.         bCompressed=FALSE;5 G) A7 @. w! x/ F
  751.         strExtLocal.Empty();+ b! M; c0 e+ \4 `, t, Y. s2 d
  752.         strFullName="checkversion.txt";
    , {8 u: f$ w( n
  753.         dwProgramState=AP_CONNECT;3 y% `6 @9 ?+ @$ l& K% p* q
  754.       }# X& q1 @4 P- N! l8 E8 Q( l1 A7 P
  755.       dwStartUpSteps=4;
    . T+ p, O- s( j. r! {6 N7 V+ y0 S
  756.       break;
    2 \/ M) U$ f; C1 |/ F7 v5 D# T. j
  757.     case 4:
    # v3 `4 y0 O7 H
  758.       {5 a$ I2 j8 m, W
  759.         FILE *fp;  T5 @; \, ~5 @& h# p5 c
  760.         char szString1[128];
    * ~) [; F/ ~8 X' N8 f' M$ Q6 m* A1 P
  761.         char szString2[128];9 M' k. \% j) ^: d9 @+ a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " f! S; t6 [1 i0 z) J1 ?; m
  763.         if(fp)
    : ^. d& O% s# r- d* |$ E9 G% t' B) j( G
  764.         {8 F/ G; j, q: u: R  T7 L
  765.           fscanf(fp,"%s",szString1);
    6 y! w- j5 s$ a1 I
  766.           fclose(fp);
    ! q( _5 t% P8 A5 j6 D9 ]
  767.           fCheckVersion=atof(szString1);! |2 J0 A- Z* f  x
  768.           fp=fopen(".\\checkversion.dat","r");
    , {' Q" }+ Q7 V) N
  769.           if(fp), A, U2 C4 H8 L1 d! I- [3 V
  770.           {/ Y9 P$ L' S1 |: T# I- p
  771.             fscanf(fp,"%s",szString2);
    ; ^( N2 t. i; A( i
  772.             fclose(fp);
    , y& b- ]2 ~+ \1 k# h# H( V
  773.             if(atof(szString1)!=atof(szString2))
    4 I) q+ i( o, z4 o& Z+ k: A
  774.             {1 _! \. ^9 F6 d- q; r  B
  775.               if(!Dn.Connected())
    8 }) j0 g2 \0 m* a4 {. Q
  776.               {' _/ m, s- p9 Z9 M
  777.                 bFirstUpdate=TRUE;4 j! H4 V4 @+ ~0 L5 n+ s# t- v2 \
  778.                 dwTotalFiles=1;
    $ f9 E; I/ r/ P# Q! s
  779.                 dwDownLoaded=0;  [) G# ^* ^: G$ T# ?4 I
  780.                 bSilentStep=FALSE;, ?0 d1 y% H8 A' a/ H3 J- |
  781.                 bCompressed=TRUE;
    ( z' O! {5 H9 y9 G% [4 D8 Y3 X
  782.                 strExtLocal=".\\DownLoad\";& C4 y  @$ `+ r' b
  783.                 strFullName="update.txt";
    - D, S+ k, j1 o  l- k) {! I
  784.                 dwProgramState=AP_CONNECT;3 O) v" x8 }" R/ f& H8 o' ^& C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , d! y  }' t" z+ F/ j, z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ T: D% j, w+ m+ F1 y: H4 b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 v; I/ s; ?2 K6 m/ A# I$ R2 @

  788. & C# @1 L7 N0 u9 E  F3 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; y3 P; F4 F: {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / ~! R/ w. A0 ?/ {1 k$ `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! Y: \6 Y0 i3 Y
  792.                 {
    3 Q  P, k: l$ O* a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");; p2 m9 g# `$ j" L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' Y# Z6 v4 U& s. p1 T1 R! i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 ]# \! K% c# ^' k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( f% i8 f) i  [$ @

  797. ( V' A; G, P, ^! i0 \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " y7 ]! y3 @1 ?  X" `) i1 X! ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. `( W, f( g  Y* I& U6 Q  c( ?' i( b# d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 U; `9 _& u0 }' c. Q) a; k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ~& X  n0 v2 W
  802.                 }
    , c2 G  g% ]- A
  803.                 dwStartUpSteps=5;
    . S2 J& f4 R8 Q3 L
  804.               }4 K2 G) i5 u. w9 ?* c5 `" K
  805.             }
    $ r* `# N0 ~& C2 X
  806.             else0 V- e& j" d$ y' j% `1 f5 P6 F3 V
  807.             {% ], G& \+ d' q2 c; q! o8 j3 |
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; P: O, k) o5 W' ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / C" s1 p8 ?: N4 X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% q0 ^  G- ~6 V/ T& A" i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 \' e4 B9 p- i6 ?. m* i2 x

  812. - M7 `$ w4 k5 a# P' n" b- K$ O
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 k3 X" [. K& H% P# w
  814.               dwStartUpSteps=99;
    * |4 h+ V6 q" U# ?/ F" @
  815.               bFinishUpdated=TRUE;
    4 m, Y- D$ e; ^
  816.               bCanUpdate=TRUE;- \! P1 r7 {# }# R
  817.             }' d) l" y8 V  D9 c: M. m
  818.           }% `, P( j. u. L, L8 ?' {* t
  819.           else
    * Q9 n% F. N# Y5 q3 S9 I; u4 ~8 U! P
  820.           {
    7 j& w( P; U$ @* E
  821.             if(!Dn.Connected())
    + y, }7 G" p; G* [' O& p
  822.             {
    & W: O/ L- S9 Y$ p* I
  823.               bFirstUpdate=TRUE;
    1 w& s8 J, o7 r" P. C# q
  824.               dwTotalFiles=1;
    8 u, p; y& g# r' g' a% H  r
  825.               dwDownLoaded=0;
    2 Q7 s' w7 v% N, }3 ~
  826.               bSilentStep=FALSE;
    . t$ N7 ^7 b1 z' t( J) w
  827.               bCompressed=TRUE;+ _) T+ l6 l3 Z5 T& _
  828.               strExtLocal=".\\DownLoad\";- I' F# H9 c8 g$ K2 R
  829.               strFullName="update.txt";# s3 t. i" w' D- b$ l
  830.               dwProgramState=AP_CONNECT;2 Q7 B. Z: R( U% [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ j. d$ x, D" J+ w. Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) a, T4 ^0 @0 a! q; ]+ C: K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");4 t  D* d+ S' z9 L. b  C9 [2 k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; j3 b4 B0 P; A2 N
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . ]; S) d+ I. u( u6 j% f
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): B) Y+ A) c- w) s
  837.               {/ h# W: Y/ ~" t. B) f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; _* w+ o* r  C: C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: F" s5 o0 l* l" }; w$ W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");$ c- ]1 `1 z7 i) O# [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! k7 o" U: S$ N- h" O2 w+ }, Z
  842.                
    % p+ }( X% O9 m" v( K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . d! L, @+ I0 c, `) |" i0 b* j6 p
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: ~  v8 j2 }) Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 Q: \$ ~# F5 J* I# R4 L  T' \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( t+ }+ R) f0 M# p& k
  847.               }
    ! {4 s( A: F6 N; h
  848.               dwStartUpSteps=5;" x6 p3 V/ C5 z& \' O$ z
  849.             }
      U6 U7 Q- Z% W$ e7 ?1 }. U; a2 Y
  850.           }
      b: M6 D! T! D0 d  r
  851.         }
    3 V/ d6 n. _9 L( y
  852.         else: O% Y9 U" `/ @4 I8 h6 x
  853.         {
    + D2 C5 l" ~: R# w8 h" F  ]
  854.           dwStartUpSteps=3;1 J+ J8 U& f! [6 }$ F6 @
  855.         }
    ) A6 L5 F7 {& f. U- ?/ I( L
  856.       }
    - L* v9 X5 f4 b
  857.       break;
    8 m9 r8 z8 }$ X4 b+ ?' N' R/ J; |
  858.     case 5:: v4 f, P- [4 A, Q0 _, v% `) I  M
  859.       {% y3 D5 E1 |9 J5 i2 i* q# K! h" |' `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! d& q( L$ U3 v# I
  861.         {
    . `5 M5 s  N2 k1 [) [# o4 ~& W
  862.           int opt_overwrite=1;0 v5 |+ b8 J( }8 |  [" m
  863.           int opt_do_extract_withoutpath=0;5 m9 g6 r3 E0 [2 n
  864.           unzFile uf=NULL;
    2 ^& c2 x$ i5 ~3 ?1 N9 Y! U
  865. # |% e5 x: `* Y" I/ q
  866.           uf=unzOpen("Wsa.zip");% Z+ ]' l1 J' Z' H2 a; k
  867.           if(uf)6 S; z; W& c9 u$ c8 V' y2 K8 K
  868.           {
    % G8 F: w8 d& r7 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);' V. \" m; O+ m
  870.             unzClose(uf);
    - M, w6 `- P9 v. ?0 e7 S2 p
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; X! A  n' E2 E$ y1 Z% Z  f& f* c8 I* z* \7 Y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* m5 U* `, Y/ M9 b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");4 f" W9 M3 o7 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 d9 x  Q. J7 w; J7 p
  875.           }6 U6 `5 c0 s/ T
  876.           DeleteFile("Wsa.zip" );
    ; n) v1 _/ l) Q) h, `' \
  877.         }) I+ q, c: t+ M

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

. W6 y% j+ o% ^- s

評分

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