CSUpdate.exe源代码

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

3 L9 q  `; r) y+ ~2 s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / j3 a4 X- d1 d" W
  2. /// c" b) ]% L/ L  H5 _* g

  3. ! B: C) [# b5 U9 g  Z
  4. #include "stdafx.h"2 _8 M8 @* z$ P* T

  5. 6 d6 X7 T  E9 F. R4 m7 ?
  6. //#define UNICODE
    ( }2 \3 S* ?; K
  7. //#include <gdiplus.h>! m5 r, x. m" |# z) z- O% {5 F
  8. //using namespace Gdiplus;- p  R+ e- O9 ]  \" R
  9. ! ~: ?- f: V( c$ X" p) A- w: w
  10. #include "RevApp.h"
    - L1 s" I2 J5 h0 h
  11. #include "RevAppDlg.h"3 k, F+ n* r- x* ~" ]

  12.   _8 C$ u/ L- r
  13. #pragma warning(disable:4786). i; C9 `! R- ?1 c
  14. #include <map>
    ' M& t6 s* P' J* J3 I8 H
  15. #include <list>
    & q* j& i, }! a9 f
  16. #include <direct.h>2 F: C& b4 X% j+ `: @3 t
  17. 3 x) S" m6 U6 D5 ^9 p% Q
  18. #ifdef _DEBUG
    / I0 X7 z  a& g' u% I! ^
  19. #define new DEBUG_NEW
    " Q. o: ]$ |# Z0 |
  20. #undef THIS_FILE6 w6 e: F: X) |
  21. static char THIS_FILE[] = __FILE__;
    3 b% m. v$ {9 G& r7 D& x1 r( {. b$ r
  22. #endif
    4 R" a# [& j6 u; U( c( F
  23. #include "SkinResDef.h"
    , I9 c/ a: R8 e5 [5 i# F
  24. #include "ChangeBG.h"& I: l0 p1 `' `/ E
  25. #include "AFXINET.H"
    0 w, V+ H9 I5 k& `& e# j

  26. 7 s! k* y7 E* o9 B" H: @
  27. #define TRADITIONAL_CHINESE 0
    , n/ |; [- C% V
  28. #define SIMPLIFY_CHINESE 1/ z7 }  u+ j$ e3 ~- J5 U4 Q5 Q6 [
  29. #define ENGLISH 2! q2 K9 f1 l0 \# ?
  30. int m_iLanguage = ENGLISH;# b& w% D. l0 I! o( l- j- R: b( S
  31. /////////////////////////////////////////////////////////////////////////////
    7 m" r& V/ {' j8 v# h; A% ^+ k! p
  32. // CRevAppApp# q1 p: [) \; E4 T9 W
  33. - V" l7 o% c: n4 N+ m# b9 [2 M- \; K5 Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ `! d: f* L; P* e( W1 Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 P3 ]6 t# \7 c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : Z+ [  k7 w- C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' K0 ^5 D. M& n" M
  38.         //}}AFX_MSG
    1 f6 D. C) r4 X7 S" H) M6 X
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 X4 f( |1 t0 a- h
  40. END_MESSAGE_MAP()
    ( K9 G3 q! ]; A8 t& a8 @' b6 F4 i* i. k

  41. $ s  m% n4 Q+ a  g  ]5 h! p9 |
  42. /////////////////////////////////////////////////////////////////////////////. T. W6 v- b+ q
  43. // CRevAppApp construction
    - [8 [6 P: f+ M. A, Z
  44.   V5 ]2 k5 V4 ^; l9 m# D
  45. CRevAppApp::CRevAppApp()* k0 @" v6 v' G
  46. {; o# _% J1 f7 j' \/ `" \4 o
  47.         // TODO: add construction code here,
    - _: q2 l, u7 {1 f8 n1 l( x
  48.         // Place all significant initialization in InitInstance
    % M; ^' [3 X( j  O. o0 m+ M
  49.   bDisplayIsBig5=FALSE;2 D! N; ~; T: O6 z) b
  50.   bRestartUpdater=FALSE;' I4 n2 G8 Z6 U( T1 m# q6 H
  51.   bFinishUpdated=FALSE;% {- k' k! M( o3 H0 c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 m9 k+ }: D9 B
  53.   InitChangeDataBig52GBKS();
      y! b! ?" P, O
  54.   InitChangeDataGBKS2Big5();1 r1 y- [6 W0 m# H6 u+ S; W; P
  55.         //
    ( g' A8 n" d7 A
  56.         bClickRunExe = FALSE;
    : ^( `) D/ w) d% S1 u% N
  57.         //& g( e. ~: @5 o! k5 s+ `7 _
  58. }4 j  }& W. X3 b" c0 p
  59.   O1 o* [8 e# \# F7 f# T3 }
  60. CRevAppApp::~CRevAppApp()
    1 o; E7 ~/ h/ V! n# h6 o
  61. {$ l1 H* D% l# N( T3 ]3 ]
  62.         // TODO: add construction code here,
    ) @- p) Z! N% f5 {6 M
  63.         // Place all significant initialization in InitInstance
    ' ~$ B. n; A5 N7 Q
  64.   EndChangeData();3 }, n% q: h7 T: E: {4 r* O
  65. }
    + Y* J1 J) O- i6 Y9 O
  66. ! h3 \4 ^) D( Q9 k* ?7 n! c
  67. /////////////////////////////////////////////////////////////////////////////% z* q0 a/ k- |6 y) _3 D
  68. // The one and only CRevAppApp object
    $ V# Z+ _5 P# V9 i% W, `, q

  69. 1 \5 o. O* A% g% d4 l& T4 X* C; y
  70. CRevAppApp theApp;
    ; f; J: B& u( \' g
  71. ; R! S) z% o* r" T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 B% q& r+ u  q7 n; K% T9 W2 T
  73. {7 w4 P; s" O; k7 H9 b: h6 b" i! B3 Z
  74.   int iEOF=0;
    + |5 A* |4 _9 e, e, m
  75.   char szTempName[MAX_PATH];
    3 V) b4 a+ E% X% |3 |; p
  76.   *szFileName=0;/ O; D9 G# E# p+ G6 A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! A9 p9 Z+ ]! Z/ r- C2 z. c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ [" ?, W. u% ]* E. H% V3 j
  79.   {
    - [( `3 W! f! E# t
  80.     strcpy(szFileName,&szTempName[1]);+ y1 A- e3 w3 B1 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & ^/ X$ p+ U5 Z; v3 n
  82.     {' W, a/ ~+ n* @/ W1 T' {6 f/ o
  83.       iEOF=fscanf(fp,"%s",szTempName);: D6 n4 X& g. M/ e! `) J
  84.       strcat(szFileName," ");
    ' P2 p4 p$ {6 g) R" k0 P/ k2 O
  85.       strcat(szFileName,szTempName);
    * V; E; W4 ~# s; W* H- @: F
  86.     }+ W: n$ Y+ ?$ n- G4 g2 e
  87.     if(strlen(szFileName)>=1)" h+ }/ z1 x5 }' O
  88.     {. I, ?7 I; k1 F  O" p
  89.       szFileName[strlen(szFileName)-1]=0;
    ( Y- Q0 b7 _: c1 r$ {
  90.     }( E: k) H) F, S2 d2 G% s
  91.   }
    : n+ g1 {8 z) Q
  92.   return szFileName;
    + V5 s" d' R4 I; _  ^9 o# S/ c  u
  93. }/ Q6 d" Z) v: P( Y( G9 Q- w
  94. * A# l$ M' J3 u4 h8 K% Y% a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( [; F0 q" n4 I. b" i) ^% B! C
  96. {1 O9 C% V5 `2 P% G
  97.   FILE *fp;
    4 l& |7 o3 |3 ~; y! q
  98.   char *key=NULL;
    " p! d  `- Q: d% m( q7 i( [
  99.   char version[MAX_PATH];# n/ X! T7 \0 W" y" G( T
  100.   LPUPDATEFILE file,olds;
    ; g  ]5 [; [( D. a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # d1 @9 g9 X0 p  C) U2 A, j/ Q
  102. # Y) U+ j( V5 B* S  B0 X
  103.   UpdateList.clear();
    8 ^: D2 {$ e1 ?3 [
  104.   UpdateFile.clear();2 H3 J/ ~3 P, i/ G- m2 t5 w
  105.   if(GetFileAttributes(filename)==-1) return false;
    6 t  U# E' Z( z: H6 _) [7 i  O* B* T2 [0 t
  106.   if(!(fp=fopen(filename,"r"))) return false;! W" i3 T& ?# e! l! b4 j
  107.   fscanf(fp,"%s",version);
    : u3 h  c8 d5 y3 L8 W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" E. }* F; A) |/ S! x
  109.   while(fscanf(fp,"%s",version)!=EOF)2 W2 X% ]; z% K/ [
  110.   {# \+ d: ~2 x" G" ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ S# `# |, Q, @8 ^3 k% k( I) L2 c7 ?( s
  112.     fscanf(fp,"%s",file->path);$ Z: v* ~9 J2 C# A6 C. x
  113.     ReadFileNames(fp,file->file);
    ' w; |- c5 U1 K7 I
  114.     strcpy(file->full,".");
    " ^. P4 J0 c5 w6 V/ M% v
  115.     strcat(file->full,file->path);
    , T) d" X  }1 v) [& u) {8 Z
  116.     strcat(file->full,file->file);
    + B$ Y; T4 K2 o* @7 x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " Z0 `& j' R$ D
  118.     {
    ' \1 h/ n8 h! p5 t; E
  119.       file->vers=(float)atof(version);1 m% F6 p" L* z( h: ^& u$ o, q
  120.       UpdateList.push_back(file->full);0 U8 n8 w9 f! m* u, V1 s
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 L4 K( U; [' C0 Q, b
  122.     }; ~: h7 Z3 ]& A$ O- g
  123.     else
    1 E& W$ a# w; W2 G: B' @3 b$ T
  124.     {2 m6 e7 S3 U" k8 @( E
  125.       olds=(*p).second;
    0 O& n5 X+ b  J
  126.       if(olds->vers<(float)atof(version))! |: [4 a8 K/ Q% \
  127.       {
    7 D& J& e$ Y0 j+ |7 R
  128.         olds->vers=(float)atof(version);/ I3 D/ T* s$ H
  129.       }9 {! L" H) W9 {/ s$ P* \. r
  130.       free(file);$ r) @  {2 D8 K1 P* D7 u
  131.     }
    : x. H( ~$ a! L2 L
  132.   }/ R3 E+ a+ O2 @3 o! L
  133.   fclose(fp);& V0 |' _! b& C+ Y! G
  134.   return true;
    * ]; Y1 R& K2 [2 C( R8 H
  135. }. G& Q  F7 \# h" \
  136. ( ^) U6 ?# W- N/ R; h8 h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! V2 O3 M1 j  |: \; x/ B1 u
  138. {8 f, h4 r1 p1 q2 o6 _
  139.   TCHAR  szFull[MAX_PATH];
    : v$ q% Y- [& r5 }; @
  140.   TCHAR *token,*inter;
    2 c9 j2 s5 h5 f  L, E$ |' s
  141.   *szPath=0;# n6 P- K) I/ P. P, ^7 t/ b
  142.   strcpy(szFull,szFullPath);
    1 T9 [- T7 C6 ]1 h( I9 \1 o: R
  143.   token=strtok(szFull,"\\/");" r9 P1 p1 d6 ?7 w2 S2 a8 x
  144.   inter=token;6 Z# R3 C' H' F; J- r6 ?
  145.   while(token=strtok(NULL,"\\/"))$ b' E8 T7 y' |0 }. F2 c
  146.   {5 j/ j. L3 k9 t; ~
  147.     strcat(szPath,inter);1 l, w: I2 k1 J2 k$ E/ e$ G1 d# ~0 l
  148.     strcat(szPath,"\");
    % J  j3 r: l4 \3 u1 n
  149.     inter=token;
    * B8 z: S4 t- y: [' d) \5 q
  150.   }$ D. {  K( m6 ^. F. \9 t# N& \
  151.   return strlen(szPath);9 r6 ~4 E7 e( X
  152. }
      B! i0 l/ }" K% K
  153. ! B$ `0 N- }) ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 m. {( \! t- Z% }  G8 K7 h- r, J8 l
  155. {
    1 U9 H$ D( U$ K$ D' G% p
  156.   DWORD attrib=GetFileAttributes(Target);3 y( j9 b6 w  n: ^( |
  157.   if(attrib!=-1)# A" r" N# T" v+ i; W/ \" H
  158.   {, q$ p2 w  ]+ v. t0 x, ]) |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! W+ w: f" G% Z8 W
  160.     {& i2 b; i: u* R/ ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ ^* z, `' X! l# S- D/ K
  162.       SetFileAttributes(Target,attrib);
    2 f( D/ f1 H; X% r& M% Q6 B- l
  163.     }
    ; t8 d1 {; p. R( s& x" e
  164.   }. z5 v/ j0 l9 z" y+ b' Y* f; J. N# n
  165.   CopyFile(Source,Target,Erase);
    6 K* t7 s: z9 x. u' y3 q& k
  166. }% |7 X4 j# S* t& G8 M

  167. & u+ L' {) l6 R/ Y0 O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! Q' Z8 \9 |: C& R. r+ X
  169. {
    : e- _+ ~- |- q2 `5 a, E
  170.      FILE *fp;
    3 f7 n' B2 ^) b; a& M4 d. P
  171.      char  szBuffer[8192];
    1 s$ A% w6 X' V4 F
  172.   va_list  argptr;
    7 m' b0 C9 [8 Q. D+ v+ K* }. z
  173. / ~& r  h9 G( _4 R% y
  174.         va_start(argptr,message);( h! M6 L0 k$ u. |+ A  R; Z& M
  175.         vsprintf(szBuffer,message,argptr);8 H: g7 }. e* s9 ?; c
  176.         va_end(argptr);
    7 |# A: s* t7 T7 N% y( N7 C9 d* @
  177.   fp=fopen(FileName,"a");0 ^1 i4 R5 ~' _6 ~+ I+ A
  178.   if(fp)
    ' j7 M& U, P6 C7 u
  179.   {# c! G2 q$ {+ K% j7 q
  180.     fprintf(fp,szBuffer);6 J! g+ z- r  T( Z, v
  181.     fclose(fp);+ v' ^7 Q5 G: i% ?
  182.           _flushall();
    * e( F0 A, `# f8 W! p
  183.   }; P/ w! ]$ {7 H  |) t
  184. }
    : m4 V- v' B. @% `/ \- f. a2 t
  185. ( m4 U. j5 R- z8 F
  186. BOOL CRevAppApp::Fclearf(char *FileName)) D4 }1 f4 `( a; b9 ]
  187. {
    0 f  n' D: h# z: P3 J
  188.      FILE *fp;% }' n1 U+ t; T1 q* Q. M
  189.     DWORD  attrib;
    1 p* q! P$ \0 {+ L6 i2 r' ^. d9 W
  190.   attrib=GetFileAttributes(FileName);+ y6 K: u" g/ `3 |& U! O
  191.   if(attrib!=-1)
    ( F! [$ E) h5 W0 F
  192.   {
    + M8 a- W- A+ g/ w! d" Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 b7 X+ ?. Q, c" Z5 q" G
  194.     if(!SetFileAttributes(FileName,attrib))) s2 w" Y& O2 o/ V% d7 W; f
  195.     {
    ' s4 j& Z  Y- ]! L2 J% N
  196.       return FALSE;
    ' G* L  p0 Z$ B" E( ~2 [( K9 {
  197.     }- `+ W  i( \" i1 V, Q
  198.   }: h- R8 n$ x9 J2 J# ]- a
  199.   fp=fopen(FileName,"wb");- y7 Z' Z5 {- o. U5 W
  200.   if(fp)9 u: h: q' C8 k6 p
  201.   {
    . a/ n: T5 }/ H& x
  202.     fclose(fp);
      N; t/ a- w( x! }( Z3 Z1 y
  203.   }# ^! x7 g8 W/ o6 V
  204.   return TRUE;* K/ ^; g! O% [4 ]$ X6 J9 _' F
  205. }
    - P: q8 M& n* m' C2 l& ^

  206. 8 w) Q9 D' X8 C, ~+ x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' m  K' H% Q/ u. A' k- g. g: Y' ?
  208. {& p/ m' `" N# D+ t8 v6 y$ Y" ^7 Q
  209.   char filename[MAX_PATH];5 T# j3 h2 ]+ t
  210.   LPUPDATEFILE file,olds;
    3 j* W" q4 P# I3 [1 d" Q5 q
  211.   std::map<int,CString>::iterator i;
    ! m7 }- e) i& h3 a/ ?8 v" }: `8 M6 j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) }$ a0 o$ K$ P2 J. c$ R6 @3 e
  213.   std::list<CString>::iterator l;
    ! |" j" r9 G6 C; Z  y; S

  214. ' h) Z% G7 m9 o
  215.   if(bFirstUpdate)
    4 G+ w9 ~9 p# t0 b
  216.   {
    9 x9 d5 m  j0 s/ `% ^7 P
  217.     dwCurrFile=0;
    ) V) g6 w7 U% q8 _: e2 T
  218.     bFirstUpdate=FALSE;& O7 ]# a4 ^$ l6 s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 R6 H/ r; s+ F, y/ }- q* |: k
  220.     {0 Y; Y5 T( N/ q4 W0 J+ I" G8 l: J7 A
  221.       dwTotalFiles=UpdateLocal.size();
    0 k; X7 y* }: L
  222.       dwDownLoaded=0;
    1 t7 \9 I; d' R: G, I. z  ]# h( ?
  223.       bSilentStep=FALSE;
    7 r" T% a* k3 `& P! Y/ M
  224.       bCompressed=TRUE;' W( G, x% l# O' B- B* @
  225.       strExtLocal.Empty();
    7 `- T! g7 P. ], {; I) n4 ^. i
  226.       strFullName=(*i).second;! n# \) p' M+ y5 M6 E
  227.       dwProgramState=AP_CONNECT;
    , n3 }* e6 }( ?5 X4 V7 u4 V5 _
  228.       return TRUE;& O& \6 Q  t* O7 U2 V
  229.     }
    4 u6 z) g5 z# ]" W5 I+ ^
  230.   }
    / M% ^8 E$ t2 ?
  231.   else if(bRestartUpdater==FALSE)
    ! \3 K3 C9 G7 \# J" n/ L
  232.   {5 l& M4 g1 ?; u9 F! \; R7 x3 R$ b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 r( x9 a/ H4 `+ d! S) ^
  234.     {+ A& A* r9 T  X5 Z; r
  235.       file=(*p).second;9 p- b  J7 m; u; C$ \4 f; S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! p# D8 i/ a; C$ Q
  237.       {
    5 l% F6 z* w# V& [4 d- A& u
  238.         olds=(*p).second;* ?0 \* \1 ?: s
  239.         olds->vers=file->vers;, I8 l  p* i+ \0 A6 g, y$ \
  240.       }/ _6 a3 R. n! @6 ]9 W
  241.       else8 E) K9 e6 ?1 @4 x7 A7 _
  242.       {, `# S4 S3 |/ O/ T1 @$ |$ T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 f) g' b) i5 ~) M- M& {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 E8 M! X8 m- g  ~$ v. a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' [, D" S& |+ ~; g$ j, s2 n& R. b
  246.       }
    ) w  c0 a% Q, q0 V- p  j
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( D. i1 ]# y$ `" z5 ?; D! Q# G7 d* I
  248.       sprintf(filename,"(%s)",file->file);
    1 i$ |) }) i6 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& z( D) l% G: S' u7 \: r# r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % g  j+ A* v1 K- q1 c
  251.     }
    / L% X7 H3 r, w/ @0 B0 J
  252.     dwCurrFile++;
    7 s4 K3 n& ^- Y6 X4 Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / X/ C. T  v" x) V9 n! M
  254.     {2 g. J* J  I1 @1 C" n+ @: v# o% a
  255.       bSilentStep=FALSE;
    ' Y& |) j+ L- W* J
  256.       bCompressed=TRUE;/ W- q5 P; P4 ]- i! c. w. f
  257.       strExtLocal.Empty();
    " D9 ?& t" D) Y  l1 o0 D
  258.       strFullName=(*i).second;
    ; p. l1 y) ~, W$ s. S
  259.       dwProgramState=AP_CONNECT;
    * F" R& A+ F) s% U
  260.       return TRUE;
    4 Q& a7 D  G- ^% c9 A6 J
  261.     }, y- q& D. j! L' |
  262.     if(!bRestartUpdater)
      Y3 G7 R; P7 [7 y6 t. d8 B5 c: o
  263.     {
    ( i6 M: S' V$ n' @0 v1 p  ?: W
  264.       int iCurrSize,iFileSize;
    . U& n6 H7 Z0 R% a' i- j5 g
  265.       iCurrSize=0;( w6 s" \( F; z& n' g" v
  266.       iFileSize=UpdateList2.size();0 q) Y2 R: E% q+ R; O5 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ u- m' r4 x. L2 b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! _& Z$ q" O0 u% C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 Y4 Y0 M3 S) S% ^5 s3 \* a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 M  I; t- r8 g% E. j3 ?. ]& `' y$ a
  271.       Fclearf(".\\update.dat");
    7 a' q& Q+ O% k4 H" P
  272.       Fprintf(".\\update.dat","Bloodyf\n");, W. E3 z! n4 f- ^3 I% F& ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 B: |$ q! O  V  U' i
  274.       {% o: C% [; |( c" F
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 ~- C3 o( }! s: C. F
  276.         {  [) [" Z$ e- {3 u
  277.           file=(*p).second;
    ! ?# A# |, M+ a
  278.           sprintf(filename,"(%s)",file->file);& Z8 X* {' l' F# L5 L- }8 @! Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 i3 r6 d) E: C7 x9 X% V7 [( N. L
  280.           iCurrSize++;
    / M& k6 X2 r8 ?0 ~' a. K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" l  ~. u8 r( P8 ?( G' f2 ?
  282.         }2 S0 w6 ~  J; L8 d9 l/ S( C* g+ ~# J
  283.       }7 e/ i  M1 O! m
  284.       unlink(".\\update.txt");
    & P: t/ i: e/ a
  285.       unlink(".\\update.tmp");
    7 b* A1 e0 d& V1 M! f4 k
  286.       Fclearf(".\\checkversion.dat");
    4 P8 e, t, [, I/ h; E% o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' c' b( T; O  t* ]9 @
  288.       if(UpdateLocal.size())
    2 {0 T, U% y" U  u  s* k
  289.       {  E2 e+ b7 P6 {+ _9 [8 t
  290.         UpdateLocal.clear();/ F* i/ ?; @  w! N9 p6 t. ?( c
  291.       }$ A4 v/ x9 T9 i3 b* g
  292.       if(UpdateFile3.size())
    % u8 E9 z! b7 [" O
  293.       {
    8 H, d9 @, ]' J  H) F1 g8 L) Y, ?, ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) ]! f5 W: a+ r2 P/ r( u) k
  295.         {5 @( D+ l. c* n
  296.           file=(*p).second;3 }) M9 S" U! X. r  p+ y9 \
  297.           free(file);7 f6 q( ^! K3 f- s- C# E
  298.         }
    . S* E0 @9 P  A8 r* s
  299.         UpdateFile3.clear();+ B: c# c. Q/ A4 d4 i( t& B
  300.         UpdateList3.clear();
    6 g6 x* {9 }2 U9 \; x
  301.       }/ P7 x& A  j& ~
  302.       if(UpdateFile2.size())
    * t- A' t1 ~0 K6 l0 e
  303.       {
    3 ?* l" d$ o* d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% ^- `# t& }. G2 R, Y
  305.         {
    8 W, t3 O% b. r3 T" J; ~+ p
  306.           file=(*p).second;
    + \( d0 s9 Q' k
  307.           free(file);# @- H* Z9 F+ q( {- W
  308.         }, u9 @+ t- t* ^
  309.         UpdateFile2.clear();
    3 C2 ]4 f" |) V+ q$ P) j# A
  310.         UpdateList2.clear();
    - }9 y4 [8 g5 J  W
  311.       }
    6 V5 I% D' C5 @2 f* w" V0 P
  312.       if(UpdateFile1.size())  b9 ~3 g9 z( ^) f
  313.       {6 D" ?6 g8 I$ z3 d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 b& T& X7 w) Y/ f3 O2 P) |
  315.         {: d" a# F0 d4 j7 Y& e
  316.           file=(*p).second;
    / W5 H( }5 K2 o8 B% c- A$ C# `
  317.           free(file);! j6 w1 a+ f4 ^1 P. L
  318.         }5 `  T) c$ b3 }  H: ]
  319.         UpdateFile1.clear();% [# K3 I2 B* E" Z
  320.         UpdateList1.clear();/ U  k0 s+ @0 ?  @( v
  321.       }! N2 ?* j: K2 y9 y0 v) i! c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + f6 k$ U% l. l, Y# L0 z
  323.     }  w/ C+ H0 f0 P
  324.   }
    2 S. W& e4 S4 Q
  325.   return FALSE;" L7 ?: a" l1 j" W# D
  326. }
    " W" i! a6 p6 a+ K) Z+ k: ?/ Z- V

  327. 2 x9 {' Q# m7 l0 w: [/ e
  328. void CRevAppApp::ClearAll(void)
    " m- y" {; p* m: W
  329. {
    ( G/ S# e% K- C/ @) B- B
  330.   LPUPDATEFILE file;
    ! r( h' c% I2 d; I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, I$ }- P/ x+ e: q( l) ?) n
  332. 4 _% `5 z8 E3 x+ X% C
  333.   if(UpdateLocal.size())/ \0 t& ^- ]; _$ }' h/ p
  334.   {" L" c  Z9 Q4 D" c
  335.     UpdateLocal.clear();
    & a/ d  Z3 C% N. [1 J2 y
  336.   }
    / ~! A  B& q: ~/ _
  337.   if(UpdateFile3.size())
    , p# H6 X" y3 C  a  ~: i
  338.   {) [# S2 N% a( p; v) ]7 e% t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; S" H, j4 ~7 x( u1 h5 t) A
  340.     {2 E" e/ W; B5 t( P' f5 W
  341.       file=(*p).second;" U, g7 F5 k$ x% C9 ?
  342.       free(file);
    6 r) L# ~3 M) U- X
  343.     }
    ! W. U$ h! a, h
  344.     UpdateFile3.clear();) {9 V0 H8 I$ {$ o
  345.     UpdateList3.clear();1 |3 z  D. e2 F3 G+ D. R
  346.   }0 b* m: ~) e5 L5 o7 f% @( G7 l% g
  347.   if(UpdateFile2.size())- {& E% l3 |! w( b' t/ O; @$ T
  348.   {
    / R) E. I& Y2 B% r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* D1 o( D6 }( A) ?, `4 g# I7 ~* q
  350.     {9 p- J0 l) G( V* y1 U
  351.       file=(*p).second;
    4 {8 Z2 ^6 K9 Y8 y) I* M+ I6 Y
  352.       free(file);7 B$ m( e: u% ^- @' U
  353.     }
    ! U5 m  d+ O* [( s) d
  354.     UpdateFile2.clear();; h3 Z* D$ N, F; I; `
  355.     UpdateList2.clear();" ]+ ^5 h5 V" b$ i3 i
  356.   }
    ( U2 I9 L+ [- [: ~* P4 C% t- q
  357.   if(UpdateFile1.size())# Y0 @/ E1 F5 ~8 X, g
  358.   {
    ( P4 ^4 ^$ o- n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 k" [9 k2 _- L
  360.     {7 i6 Z- k9 d3 o$ [) f% ?
  361.       file=(*p).second;) W) H2 M: b: I
  362.       free(file);
    + @' x9 A  C. Z7 M9 a$ _
  363.     }8 o; h' D/ O* u, Y+ e# C4 D
  364.     UpdateFile1.clear();) f, {4 Q" g! x% A3 @4 P2 i  i
  365.     UpdateList1.clear();
    ) m- @4 Y& y8 i9 U, i3 [
  366.   }
    & I: \) e' Q% l+ O& {8 o
  367. }  
    ( A: r$ H( e" z, r
  368.   ( h# u( R! M0 M/ w2 c7 V: |" E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * \$ t5 o& H: N! r  V8 @! |
  370. {! Z6 s) v8 Q, k4 h0 t
  371.   int c;
    + ?" r; ~& F! o8 r" }
  372.   LPUPDATEFILE file1,file2;
    0 \' [# `8 x6 G7 _/ m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# T. X# P+ [4 D" b$ l7 X
  374.   std::list<CString>::iterator l;- r4 h5 P7 x, d. N
  375. ( }( T, r# b7 F6 t# S
  376.   UpdateLocal.clear();6 b+ q) R: v. I+ B3 f5 H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 G  I- |) j1 y) ?4 y* m" }, k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 v4 k9 d# }" @' N1 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 B- k: {, A7 S! q2 A! ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" ?0 F: ^' q8 x6 R& A
  381.   if(UpdateFile3.size())
    ' ~6 F$ J6 j( |! l& f- V4 {
  382.   {: F- v6 d7 h; i7 H8 O6 G, K4 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & A2 L  d& k/ [; C* @( ?4 V! o7 _5 i) e
  384.     {
    ( c6 y( }. h3 \) a
  385.       file2=(LPUPDATEFILE)(*i).second;/ L' c2 C# L! ~. s* N9 w) Q) B7 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  `0 B& `& ~* }, V+ Z4 @
  387.       {2 d5 N$ R' ?3 Q+ E1 ~- w
  388.         file1=(LPUPDATEFILE)(*p).second;
    % t: S9 k1 m, d2 ^" b
  389.         file1->vers=file2->vers;5 l5 ^* k  O! Y4 e
  390.       }
    5 T+ A. y, P6 q5 D* C: L' k: e
  391.       else. H7 _; k2 m' O" o: Z. p
  392.       {
    0 e  k: V% a+ t4 t3 H& P  A4 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # ^; P' d" f: P" o9 p1 H: Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    3 U: m9 l+ Y" ^' K9 Y+ h
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : ~) x7 [1 ^" r& z) y; e
  396.       }
    . c$ _1 N( ~" r
  397.     }
    1 v3 `9 [  ~4 Z' X4 A8 h: p7 C9 U
  398.   }5 y5 y1 H2 T& v6 s' R- c7 I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% }& J$ l' n  e$ B; U6 G. b9 q
  400.   {3 E$ W& T& v9 W& }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) m: d8 }+ m. u1 D. f8 s
  402.     {. d9 R6 I4 k! Z" ?
  403.       file2=(LPUPDATEFILE)(*i).second;0 U2 V2 ~. L/ e; r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 s* i/ H) V2 n/ y+ r3 H4 b
  405.       {
    / |4 x! ^/ o8 g" r0 t
  406.         file1=(LPUPDATEFILE)(*p).second;
    & m8 \# `( ?" n+ ]' M3 {4 A6 y/ s1 O, h( ~
  407.         if(file1->vers!=file2->vers)
    7 i, ^, q  N6 H) Y5 F2 @
  408.         {
    0 m# L- o, ]7 B6 z5 i* u" p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 I2 q7 T) F" o/ @& m% F+ w
  410.           c++;
      C1 ?% u* D6 T
  411.         }8 n# R# w7 X" `9 ~* d- _) B
  412.       }
    " r, E  s; n/ _. P7 e
  413.       else
    3 s) {8 _$ R- y( E. A( B
  414.       {( l: G. J- M% M- X, S1 w( t) q# y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 B& ^6 {4 T4 L' g$ |
  416.         c++;& U0 y& {' j! i0 c& O9 m1 q5 N
  417.       }
    ) `* U' X8 Y* W
  418.     }
    ( M* H+ n$ s: M& w( a
  419.   }
    6 d, `' C! y* d" u, S
  420.   unlink(".\\DownLoad\\update.txt");
    : s+ M: ^* `! p3 ~
  421.   if(UpdateLocal.size()) return TRUE;
    5 X5 S8 J* W' p/ x  l
  422.   else                   return FALSE;
    ! u- E8 @6 \* ~! |2 _' z
  423. }
    % w+ R- D. i5 \* H. {% \# f

  424. 1 D+ k% x* \' }+ D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# }$ z% w6 Y8 c: K3 z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) Z" K0 v- l' a, E+ S
  427. % O- \& S; G' ?  d* ]  ^6 e$ B

  428. 1 R% O8 Z$ q) z: }2 p

  429. 4 [! M& X3 _0 m" X; A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + r' K4 }- v5 J4 q: U- e
  431. {
    1 l: |  A& n+ p7 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' s/ t: m' X2 F' b% s  }, p
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 @8 Y4 }" A' g; h
  434.   {
    2 ?1 a, ^; `0 j  J) a/ h) S
  435.     char szLanguage[50];
    : v0 W8 E# q" ~& b0 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 b' b0 W) t6 v/ [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ D- W2 [4 F# k; d# _0 ^, W
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' p" Q3 P' D7 ~0 \6 R
  439.     else                                   m_iLanguage=ENGLISH;
    ! _! w! M) y9 r5 b" _
  440.     char szRegister[100];% e& v+ j6 D! d) {8 c- i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& B' Y& J9 S3 X9 L$ ?! t
  442.     strRegsName=szRegister;
    # w9 O  x0 R# w3 K" d' x# C
  443.     char szPatchURL[100];
    ) \# n" r6 a  m* N% }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % n% Q2 r; f& D% R+ s  ~9 a
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 g* l1 r% a5 s8 A
  446.   }- l  [" A9 l1 T+ `0 D# J/ w, T; P
  447.   else* a) T2 [9 h; \" c9 U: d8 {# u
  448.   {
    & s* o+ U. W$ V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 F8 `$ i) U( Q. F( n) l
  450.     strRegsName=DEFAULT_REG_URL;! N; q( Y. l* f0 N6 k- y$ @
  451.   }. ]! l2 z, D9 ^! I. P5 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      }3 q8 Q+ d9 K4 V* ~8 w
  453.   {
    + @: E4 j! y, Y* X4 I( r& W
  454.     char szIP[50];/ k. q( s- g7 u: e  i0 |
  455.     char szDIR[300];
    # x7 L( X5 P! X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " d3 m3 f: \" C- N
  457.     {9 x8 S/ ?) d% s% l( @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . ?1 l' ]# P" E+ E1 r& D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) l* m7 L$ E1 ~. X4 p
  460.       strHostName=szIP;
    ) e2 r; g& Y5 l4 k) L
  461.       strHostPath.Format("/%s",szDIR);& J) N8 {9 h* z. z# c5 [  |
  462.     }
    # C5 z$ t4 w3 h1 E" _+ a# J) O3 H
  463.     else9 w. K1 b4 J4 ?! z* {
  464.     {
    , p2 I" Y; ]* J1 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) C* r/ ?. O- G" r4 U% V  L
  466.       {
    3 I/ N" S2 j/ X( v0 d
  467.         char szLanguage[50];, L' ^/ m; z# f8 S  y% r+ c6 v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 g( f- Z/ D4 Z# T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ \6 @$ A$ v7 O3 d$ Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & X5 y8 ]7 z. X6 N6 S
  471.         else                                   m_iLanguage=ENGLISH;3 a. |% d+ R6 a$ R9 H
  472.         char szRegister[100];4 Y: P- Z  e# d% m* A' M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' j, H' g8 G. Y2 R
  474.         strRegsName=szRegister;
    5 L  P! s5 p& Z9 |2 l2 x4 u. n
  475.         char szPatchURL[100];- S# V" k. _0 u0 B; X# F' n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% W3 w/ J3 C6 `9 u0 d
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 _# m1 [( ~0 f# u5 i' x
  478.       }
    2 |4 ?' d$ f6 ~9 ?: z
  479.       else
    / @8 Z* D4 @1 j
  480.       {, T* c, ?7 H  r) D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! `: R1 W+ B- P* [& ^
  482.         strRegsName=DEFAULT_REG_URL;
    - w1 y, Y  g0 J1 c; w; A
  483.       }
    % q: s; V2 p! [: i8 k
  484.     }8 v" \0 I) v) T
  485.   }5 G- N+ |' D+ z2 R
  486.   return true;) r: j* e3 [" A
  487. }6 `2 v4 J. ~+ Y! O- u3 ^* u; j3 p1 [
  488. & z8 D" n' w' k8 {! A
  489. #include ".\ZLib\unzip.h"
    4 v! R6 N; r& _/ c1 X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 p: S# V- d3 F$ \# F
  491. /////////////////////////////////////////////////////////////////////////////
    ! k4 n5 C1 ]$ A
  492. // CRevAppApp initialization
    3 J/ L5 c# }: j* _# z' C
  493. ( B7 L6 p% z/ P9 K8 }1 \
  494. BOOL CRevAppApp::InitInstance()5 V  o7 o* u+ N  z$ Z. m7 \
  495. {# n5 t% O2 Z1 E6 p8 v6 ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) t& S$ S# {# P. {" ^$ ^4 N; A' Y
  497. " t$ ~) o' h0 B& a8 S% r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 @% x) s$ K+ b( V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 e; H, k( z% B' G  J9 }  ]8 Q
  500.   {# |: V1 \" I, Y3 z+ G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : J! a) P( B: c- U$ c" E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& Z( p" F9 Q' K% f  B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 Y8 s$ B7 h" |$ J+ {+ b$ k
  504.     {
    * M( O1 W, j1 l% s. b! t0 Q1 k
  505.       strcpy(szPath,szPathTarget);* G6 B4 x; h5 F0 y, |0 q: t
  506.       SetCurrentDirectory(szPath);: o5 j2 o% ^. a0 K! s5 T
  507.     }1 x% b5 l- j- R3 t8 S5 o
  508.   }
    & k  q7 N2 b5 c  T$ r
  509. #ifdef _DEBUG# o# F" z& L$ |6 x# N& [1 `7 I& `
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ ]0 W8 L2 @' w! u
  511. #else
    % q! }, C2 A9 A2 G( }% I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - a3 X9 p! P4 y6 m7 v
  513. #endif# [' L# O! t7 K5 B: |$ z
  514.   {
    / [( `  h* R" {- u
  515.     char tempFileName[MAX_PATH];% _( W* Q& u4 d! G2 l8 T
  516.     strcpy(tempFileName,szPathSource);
    ; _! Q+ b, ~0 D' p" J7 @6 N. W! J* [
  517.     tempFileName[strlen(szPathSource)-12]=0;% `+ E3 P, |6 t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % d8 S5 @( e6 k; a6 K6 x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 m# ~# `/ k2 O; t1 R/ N+ _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; T' n. X7 z7 g3 {& i0 s. `* t
  521.     return TRUE;: X! E' z, q) D( g
  522.   }, u- V' h8 ~- N1 T  c
  523.   // Nuke 0118: Delete run.exe
    , z; B1 T, [* P  X+ D  ?3 R* n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 `  P2 G$ c8 x" g1 B( q) o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # s* e4 V9 n9 h- o/ m- e1 S! C
  526.   if(!ReadCfgFile("Config.ini")): Y$ p$ ?: e: U* L3 e! m
  527.   {
    ; |8 V! |/ w) w* C9 X6 `0 X- M3 C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " e) h( `5 R+ f7 P
  529.     return TRUE;- y- P( g" J( h+ {
  530.   }
    6 |$ w! t: `6 b' G
  531.   HANDLE mutex;
    ) s3 `* B5 q. `! ^( c+ d" W3 c3 ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 G) ~4 S* D# E/ o3 T1 R# O6 T2 _
  533.   {
    " `" q( J4 y, X; H) G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % G2 ?* E6 ?, G$ t
  535.     {* Z2 L. t! }: e7 n/ _7 l, X$ K
  536.       CloseHandle(mutex);+ V& {+ w( O' j* z  q* b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - z$ b$ o( j3 A! Z, p; `6 v
  538.       return TRUE;
    - u* ?  J5 l7 g
  539.     }, `* L" ^6 f9 F+ }( o' F
  540.   }  7 e1 m( k9 [* W9 O0 c
  541.   CloseHandle(mutex);
    8 q2 J4 Q  z) k* u

  542. 2 W4 f$ l( Y0 N  e" v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( u- @2 Q  H( S

  544. ) t, k5 A* [- q1 X- o
  545.         AfxEnableControlContainer();
    3 l. }; o+ v8 X7 X
  546. 2 ~; f  H6 T% _! ?
  547.   bCanUpdate=FALSE;. w  W* j4 t: G( u# C. ]" e" `
  548.   dwStartUpSteps=1;
    ) l: i. i  H3 `6 \$ f
  549.   dwProgramState=AP_NOTHING;
    ; a( p$ M/ K$ y& M) _8 V, w

  550. : d1 W6 o9 q, i+ @* W% m* x  T3 {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 Y3 a4 z1 R. r) D
  552. : V- o$ d* w$ E
  553.         // Standard initialization
      h; l8 b; t1 `5 d
  554.         // If you are not using these features and wish to reduce the size- @- R7 J9 X9 t* ?& S* U/ _
  555.         //  of your final executable, you should remove from the following
    " G  U& m% K, P. Z& t+ W/ S
  556.         //  the specific initialization routines you do not need.
    % I. N# |+ Z" n. a5 x

  557. ; w% H& X/ N: k  `5 r, D8 l! v
  558. #ifdef _AFXDLL
    * X0 w! K' ]6 C7 b8 V& a- v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 {, I/ Y+ ~$ q+ Q8 n5 l4 \
  560. #else2 C% q  X+ j+ o' F& L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: g8 e' R- c# g2 }
  562. #endif
    * d! y- g4 [/ @5 p
  563. ) @/ R$ Z. Z4 n9 ?8 M5 c0 {  a3 d
  564.   dlg=new CRevAppDlg;* _% q5 M; [7 I
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 ?, h. o4 R2 _0 {, A) E; B/ \0 A
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ [3 A& a; {: h; n
  567.   m_pMainWnd=dlg;8 T8 \0 W7 e; S
  568. # f2 n" {8 u" k" s' \& B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- F% K& I  @: H' I0 i5 e

  570. 5 a9 X3 }' i) X  E3 P$ D; k
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / R/ K+ x$ h& ^% O: S+ x
  572. //  ULONG_PTR gdiplusToken;
    2 y6 Q: t  y% Q* Y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);/ D! M8 Z: ?, w5 M
  574. $ W1 U, z/ T# v8 c9 W; K
  575. //        CRevAppDlg dlg;
    4 Q) X8 {" x3 t; Z- H5 c
  576. //        int nResponse = dlg.DoModal();% _' [/ K9 x- J* O
  577. //        if (nResponse == IDOK)
    ; c  \3 `$ V0 i+ G
  578. //        {4 F2 |+ a) L: F+ ~
  579. //                // TODO: Place code here to handle when the dialog is
    ) `) b# V" ]# J' U; Y. E
  580. //                //  dismissed with OK, E+ D4 X3 `4 `8 E% g! n) _. o
  581. //        }) |8 |4 a7 @8 C% Z: z0 T# |0 d# V; q
  582. //        else if (nResponse == IDCANCEL)& ]0 ?6 w8 w! Z, d" p7 w0 P" Y5 H% Z
  583. //        {' G( q7 l5 L+ D2 Z% S7 z2 Z  t0 T9 {0 @
  584. //                // TODO: Place code here to handle when the dialog is
    ; R2 C9 R5 o) E- `8 [
  585. //                //  dismissed with Cancel( j) ^/ N3 J1 ^2 I; `; A1 Q. R
  586. //        }
    , h, ?( I9 u' N' ^) G: L

  587. ' l, u' T" W4 {: j* {' y" s. [
  588.         // Since the dialog has been closed, return FALSE so that we exit the' c1 T7 W3 f1 O: g! ^
  589.         //  application, rather than start the application's message pump." E' t  Z5 A4 c4 j3 D. p
  590.         return TRUE;
    - ]# L# h) |! x0 Y" o9 E% `8 Y
  591. }
    / \+ ^. w2 o( Z# S

  592. ' [& H/ W2 U6 F3 o8 q( y& f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    0 A0 j1 _2 E4 \8 l& O9 G. a  R% L
  594. {9 o0 c7 ^1 t8 W( k( h- ]4 X) d9 [
  595.   int i;  t' d$ F2 O' H% a
  596.   char *szRet;7 K/ T0 [5 s! o5 q1 T! M
  597. 8 v% q* j" C& I- I" K) r
  598.   if(pSource) { itoken=0; sztoken=pSource; }& u7 W. ^4 V( F& f
  599.   if(sztoken)
    6 U& j& D0 S7 Z4 U
  600.   {" Y9 F' h& b- S, G% E
  601.     szRet=&sztoken[itoken];
    , E$ c  @% d- k0 l0 }6 J
  602.     while(sztoken[itoken])
    . b$ m$ r: W1 M/ U/ ~% k6 n$ M4 l
  603.     {" k: ^8 L0 `; w% j0 G* y
  604.       for(i=0;i<(int)strlen(token);i++)
    % a" T, \9 D9 M8 j+ \7 x) T  ^; s' m8 q
  605.       {6 f& w  f5 m. B# s, D% P4 b7 C
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    - L/ C9 ~' c( ~' I6 w! R) c# L  ]) S* ^: s( I
  607.         {
    4 l1 X/ E- L7 }, ^! T; _$ Q1 n
  608.           sztoken[itoken++]=0;. p& H( H% p" D# h  ?
  609.           sztoken[itoken++]=0;
    ' N6 S* ?% M; ~( t
  610.           return szRet;
    4 T( p0 h9 O2 W5 c$ l; u$ }% S+ n4 P
  611.         }: R  U2 |* U. ]! N! I$ D( U" \! w+ H; M
  612.       }
    # n) b% D0 B# D
  613.       itoken++;0 y7 k* U: A4 H# {
  614.     }
    2 X9 I- c6 ~& ~$ Q( c+ M
  615.   }
    1 C7 q3 m! a7 X: ]
  616.   return NULL;
      `, r. [) [4 H/ U6 w. L7 F* D, K1 `0 Z
  617. }9 [, [$ i* Q1 a( X) [5 u

  618. $ q# t& ?3 q0 _
  619. void ProcessProc(long Total,long Current)1 F+ R( R" O: ~% I) ~' v1 R8 [, E
  620. {! U9 _: W) @! N# h) H5 t
  621.         MSG msg;
    / x2 [6 y& e  f$ h. b& p. N( E& K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , y8 [5 q: U( }) f! q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  {6 k9 l( r$ ^4 x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 ~1 ^2 `; h/ g% n: ?% ]5 n7 H
  625.         {
    : X; Y" s% u/ [; w9 V  [
  626.                 if(!GetMessage(&msg,NULL,0,0))9 ~3 o* \" S& D  O& N
  627.                 {! b: D2 ]# Y! \" p' W8 C
  628.                         return;
    2 U2 y# W" a! O9 Y& [
  629.                 }" G4 E) K' N* `
  630.                 TranslateMessage(&msg);) E3 H( \  F1 F7 n% E6 d4 ]
  631.                 DispatchMessage(&msg);
    & N8 a' E6 x1 R9 Q  T  q
  632.         }       
    7 d$ x  S( S2 g' H! r7 \( e
  633. }& n+ Q, B6 G& W% D+ ?

  634. , s" {' Z/ [& k2 O/ w) ?* O
  635. BOOL bFirstChar=TRUE;
    ) F. k* ]+ [6 ?6 n
  636. : K9 E! B1 y& w: Z! ~# t/ {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - j9 [, C7 x# ~6 N  v  f$ B, v
  638. {
    8 G% O! D$ p  D  T# z1 E! R7 f% ]
  639.         // TODO: Add your specialized code here and/or call the base class$ ^7 i; v! h4 P4 U1 l! N) Z/ \3 e
  640.   switch(dwProgramState)
      ]3 v5 J: b9 T3 {7 L
  641.   {5 v) y) U8 O% O" \
  642.   case AP_NOTHING:7 `: W9 _8 V6 ~% N& H/ ~
  643.     switch(dwStartUpSteps)
    8 K0 u! a, Y7 D7 e  G5 q. P0 j: _
  644.     {
    8 g7 W/ b$ e. d- y9 Q0 f
  645.     case 1:$ Y9 p) ^- d% X/ T9 G1 b
  646.       {
    ) O+ ~+ y3 a+ w
  647.         int i;1 [) e2 b  T, V2 v! C8 a
  648.         CDC *pCDC=dlg->GetDC();
    1 @5 Q4 S2 z2 [3 |: @9 C0 z
  649.         HDC hdcwnd=pCDC->m_hDC;7 c) u! `' t& R" |7 z/ L
  650. //        Graphics graphics(hdcwnd);: x% Y' a4 }, g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 K/ T# v* Y' _; P/ [5 P$ d
  652. //        INT iWidth=bitmap.GetWidth();
    4 G# J: ]( V2 L$ N7 Z, h3 R, G
  653. //        INT iHeight=bitmap.GetHeight();
    ( e& I/ q- M: \
  654. //        Color color,colorTemp;- N0 U& ~( ^8 p# {% i/ j$ B/ \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): U9 T$ T& ~5 d  B" z6 V; F
  656. //        {$ ?" q  f% b% F: u3 @2 l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) ]) U  u- t  l! V) a
  658. //          {) U- x; v# l  O
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' j& E: i: g0 i( h2 y- h- I
  660. //            colorTemp.SetValue(color.MakeARGB(7 v  h9 C6 o* z8 H; q
  661. //              (BYTE)(255*iColumn/iWidth),/ c2 S4 a1 I# K( h: D) T* y" M" o
  662. //              color.GetRed(),
    + R: `( X- Q2 m) {: a, V
  663. //              color.GetGreen(),
    3 ?, s, @2 e7 u6 w& A+ W8 j
  664. //              color.GetBlue()));  h4 V7 V2 L; c' `  n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    & S* i4 J1 U$ |$ o8 d5 |5 i% p+ Y
  666. //          }
    ! K# w; @8 _" j; z0 U$ j
  667. //        }
    2 C  P) E& d5 U
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# o! t  s7 T  k, {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 ~% G3 p# I- U2 D; k! _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 _2 |! O1 U# X- j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 G5 v1 t+ d& K  L1 R
  672.         for(i=0;i<240;i+=8); f  B$ d6 M6 Q4 K8 J( Z: Z/ w0 d
  673.         {% E/ |% G, c* F, m3 Z+ F; j: v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % u' S$ H& v  w0 Q) z  Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 i) }/ s/ k/ F2 @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  {" o. Y  c8 s4 n$ Q6 E
  677.           Sleep(33);% L6 H7 T. ?% e3 {1 R& a4 w
  678.         }
    2 ~1 T, h5 D3 ~
  679.         Sleep(1000);: n8 {" e- N' x5 N2 b; I, F
  680.         for(i=240;i>0;i-=8)/ l  x$ O9 e  N; G$ ^
  681.         {
    # R) i2 A3 D5 t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' W7 `2 m+ I4 C: N$ ~% Q; H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # o( f7 w1 H9 Q/ D/ w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ n: z2 u& p9 E6 U8 F
  685.           Sleep(33);+ V( {, K. L' @1 v+ }4 ~
  686.         }5 d. @- l  n* M+ r7 w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. _7 f9 ]1 f7 r' E! x$ `
  688.         dlg->ReleaseDC(pCDC);
    9 _5 a8 o) h" w9 i$ y
  689.         DeleteDC(hdctar);
    6 s+ z$ d' ?$ f7 ~! B' l
  690.         DeleteDC(hdcsrc);
    , D4 W0 P& N7 w" N4 \% N# q
  691.         DeleteDC(hdcorg);
    5 `+ m  t3 M# H2 m
  692.       }  [/ f6 H3 X, c! j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; G7 L2 ]+ z2 l4 \7 R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & _5 c( i* w9 w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; o3 C3 V, ~  S; O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! W( m/ F, l) x+ U: m! f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ^7 q+ n. r7 M* P
  698.       if(!Dn.Connected())& P+ H5 @: E4 a* I) H+ l) u
  699.       {% q# D2 Z6 @& F8 E- {9 S
  700.         dwTotalFiles=1;
    * V9 Q* d% \+ O
  701.         dwDownLoaded=0;
    5 k$ @9 `& H( a" i5 y/ k
  702.         bSilentStep=TRUE;& t; H. K. k0 |. @$ k. B
  703.         bCompressed=FALSE;  N( ~% |  [" K* @/ k; b. m
  704.         strExtLocal.Empty();8 _$ S7 @; U0 w5 Y1 r) b
  705.         strFullName="readme.txt";/ W, f6 A! i6 T3 \% T3 g$ q
  706.         dwProgramState=AP_CONNECT;6 V- K1 `8 }; y9 R# ^% _/ p3 |& k/ V
  707.       }
    3 j* E8 y: A6 O4 J
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* o: a1 y( A1 G5 |5 x
  709.       dwStartUpSteps=2;
    0 ]/ Q. \/ @# `$ \( k
  710.       break;6 `3 A9 R" W6 q5 \7 a; O
  711.     case 2:
    : d7 {; }+ s& `% `/ l7 L
  712.       {2 E; w6 n: ^6 ]& J! G9 W
  713.         int iEOF;
    % F! `& Z/ U9 p
  714.         FILE *fp;/ L  z# y/ R& m1 `5 C4 g
  715.         char szString[512];
    0 M$ w/ q1 i4 F3 u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");& p& @- ~* y1 {0 {6 S3 J8 R! b
  717.         if(fp)/ t+ y! i2 m; Z7 q3 t) g+ b
  718.         {
    0 P) E& g( v- f% _9 H3 H6 K
  719.           do8 R; U* Z) A& v/ A3 j8 K
  720.           {+ `3 ~- J- Q( ^: D( v
  721.             iEOF=fscanf(fp,"%s",szString);/ f2 i9 T- `( e
  722.             if(strlen(szString))( P2 d) }8 O, j8 E; D
  723.             {
    # n+ K) `3 Z3 U  E! b
  724.               if(bFirstChar)( n# l/ p9 r4 ^' o- ^
  725.               {
    3 ~( c1 D: X. G2 I& R" X, k
  726.                 bFirstChar=FALSE;
    ' V& h3 S% s9 z( i2 Y0 x; X/ ]
  727.                 bConnectIsBig5=FALSE;
    4 L3 s) R9 K& T* m5 O+ x, I6 ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. Q( k0 E8 y5 u& _* ^8 i
  729.               }* O+ y8 m. V9 X# e8 G. g. H5 Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # Y: N2 T' @% E: D5 c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : Y( [! {" f+ C' Y0 ^
  732.               dlg->m_ListText.AddString(szString);% d: _! \# z0 ~" C" _& F3 c9 w, h; L
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& T+ O) V& |/ l
  734.               *szString=0;
    ; \' s5 F  @% g1 a* I& T( Z
  735.             }
    7 h& I2 D0 R* D) {; U  u
  736.           } while(iEOF!=EOF);
    * L3 h: S2 k  G" a
  737.           fclose(fp);8 B# z6 F( |* O  ?
  738.           unlink(".\\DownLoad\\readme.txt");
    * I+ g$ A8 M8 \" Q3 _
  739.           dwStartUpSteps=3;
    " P/ I1 g# [/ w" o7 t
  740.         }
    * |" u4 G* _5 Z+ V' c
  741.       }
    & W# H) b) n1 w+ E( ~4 W/ o4 l
  742.       break;. n. C# w9 W; j4 I
  743.     case 3:( f6 |7 `$ ?3 B0 q% i9 D$ H' ^
  744.       if(!Dn.Connected())
    : d+ @* ^1 h% L% ^  k
  745.       {5 w( m" B  D: r  x" V
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 t7 o: U- F$ m& L
  747.         dwTotalFiles=1;; |& K" h' \; b$ d& Z$ T5 M
  748.         dwDownLoaded=0;
    # K) c' ^6 ~; ?" O7 w, K& S
  749.         bSilentStep=TRUE;
    2 ^9 w# t, G' U
  750.         bCompressed=FALSE;
    7 w0 Z" ]9 m. I7 U6 W: ]2 y
  751.         strExtLocal.Empty();( y, N8 M& u# W5 q% A/ v; k
  752.         strFullName="checkversion.txt";6 r3 z" C$ F6 r* I* R/ _
  753.         dwProgramState=AP_CONNECT;
    / D& D% F( I0 I$ c8 q+ B! p0 ^
  754.       }
    $ f" W+ I8 r& S' ~+ W9 s
  755.       dwStartUpSteps=4;
    % o& y$ t& w7 {
  756.       break;
    ( \7 G! t. m6 P
  757.     case 4:6 k- h' t7 C0 E  L6 S; l/ o
  758.       {: m* `4 \+ K8 A" Y! J3 _
  759.         FILE *fp;- D( A' b/ P; P( K7 q" ^
  760.         char szString1[128];- Y4 o0 I" Q# ^8 O# ~) N
  761.         char szString2[128];  }- Q" t6 w8 B& Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) k, u; M& y4 m6 I
  763.         if(fp)
    ( H1 e0 y: `. ]5 h
  764.         {
    2 \0 k4 B9 ?% l5 f
  765.           fscanf(fp,"%s",szString1);0 j: D5 k4 d6 W
  766.           fclose(fp);
    ( p+ \: c; Q8 I; Q5 Y3 i
  767.           fCheckVersion=atof(szString1);% ]; i" G" F3 I: M  [
  768.           fp=fopen(".\\checkversion.dat","r");
    ; B: }8 ~# q2 ]
  769.           if(fp)
    " s9 V; m2 a: E) Y  v2 f
  770.           {
    $ `+ F+ |/ c% Y0 @+ U1 f, B
  771.             fscanf(fp,"%s",szString2);
    ) ]. u9 a5 Z& _; B2 [- s5 ]
  772.             fclose(fp);" x' D" M. n( }% {5 Z8 J2 o
  773.             if(atof(szString1)!=atof(szString2))- ?5 B. C9 \: f& y4 c
  774.             {
    ! Z# N- f! r1 M; t
  775.               if(!Dn.Connected())5 n$ q3 j! p8 s8 T# U/ a
  776.               {5 o/ y0 h: p$ P) `- I( K0 t) P
  777.                 bFirstUpdate=TRUE;+ B+ B. g1 ?% K& c, \- o" b
  778.                 dwTotalFiles=1;2 O, m  b: D1 C) y
  779.                 dwDownLoaded=0;2 U% O5 n' v1 D, \( o& a
  780.                 bSilentStep=FALSE;
    # }1 j* o  {# x) i
  781.                 bCompressed=TRUE;
    ! L: e$ [) j1 M" M: i, ^
  782.                 strExtLocal=".\\DownLoad\";8 v  R. B- y7 s" D
  783.                 strFullName="update.txt";3 [5 y- g+ ^0 B2 h5 G+ r
  784.                 dwProgramState=AP_CONNECT;
    $ C8 p8 |: d9 a. r7 u/ V6 r# X/ h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; F' K% r% |1 p, u+ u9 V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 c& |) H8 ^2 q$ _* i( [/ I$ t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . R2 L# G2 r% I( H0 D

  788. 4 L" {$ n6 r2 g& v" X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ~4 U: X# r% ~/ U2 u% p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 f4 E/ ~$ K  _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 q/ i: g3 F" M- u$ I( C  q4 z
  792.                 {
    ( S5 u) `4 N( Y9 ~5 P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 p. s4 p; b) j/ {" e
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : M' V5 t( q% a4 h' \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ N9 [4 x" @3 D% R+ S5 a) ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " p0 E- r  C3 @2 f6 p- C& G

  797. 0 ]5 T; k: d# w. i- M  I9 H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ |! b9 o4 }9 Y  u$ j7 q( |  d2 {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 P9 l* `: {  y$ @) ~4 s6 W  B, l8 F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( Q0 ]9 O' w& m0 v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ a/ @, @1 ^. K# ^0 G
  802.                 }
    , S% {: m6 ]1 G/ |: [
  803.                 dwStartUpSteps=5;
    , i9 Z$ s- s6 U# i$ _
  804.               }
    - h; v2 k8 P* ~; @) V6 n8 b
  805.             }( Y% I: Q* e8 G9 s
  806.             else
    $ k+ G# P6 c% Z: V
  807.             {
      Y+ P8 y$ E) K& J& S% N4 s
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! N8 E# L$ f1 p7 R$ {* k
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! d/ z' ~# m% o1 v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) Z! Y9 r% P  p" v  S  ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      M& L7 g' b. _2 N

  812. 5 L9 i4 o7 ?3 p, y( ?4 f0 `/ R. `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ a% H# h$ t) M3 _: N: X+ p, u
  814.               dwStartUpSteps=99;
    % }+ k2 k; x  u1 N: k% J: Y) g# r' ?* P' Y
  815.               bFinishUpdated=TRUE;) I% O# v. l% D3 ]/ O$ L
  816.               bCanUpdate=TRUE;- T7 ^) a) R0 T6 U$ d
  817.             }
    * r/ T; I# D6 |+ R! _
  818.           }
    : y* x8 H: x+ W1 v( u, U8 w
  819.           else8 o- Y. `: Y# {% Y  @" \- M
  820.           {$ J9 B# e3 j- r+ [" v$ {
  821.             if(!Dn.Connected())! I. P9 [9 v4 ^- ~
  822.             {" A" g' y. h5 C7 r& ^" g5 L2 h
  823.               bFirstUpdate=TRUE;+ x) N2 s, P# {' K: c/ {! E  |' z; G
  824.               dwTotalFiles=1;6 v. H: s# ^9 e+ F' k7 G2 }# x$ j# q
  825.               dwDownLoaded=0;
    + E* I, c# b  p' [) s# c
  826.               bSilentStep=FALSE;
    + H; L$ z4 H9 m2 R: u2 a% D
  827.               bCompressed=TRUE;
    * _0 f0 s$ \/ W8 ?
  828.               strExtLocal=".\\DownLoad\";
    ; B- o- T4 B3 N. S0 [/ }: ?8 D
  829.               strFullName="update.txt";
    9 j( F/ H* l: u/ I: x
  830.               dwProgramState=AP_CONNECT;
    . @+ d& K% M- l, M. S) x! f
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( p5 n9 N( f7 {& I1 @9 l+ w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: `0 v9 C4 L3 I$ r' F6 ?, T$ o
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & s7 T2 S" z3 B( G1 Q: ]; R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 R( [9 q$ d, V; }' C
  835.               unlink(".\\DownLoad\\checkversion.txt");5 V; r. n! d3 h% D% S6 W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& t2 K) d3 L7 H1 t7 O
  837.               {
    / m; V* O7 k! Z( [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 t, r! U9 O; u; g/ q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% Q& e# y: i* l, c3 u% b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 m$ E+ H' i! I6 P0 {! O9 a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 U- X0 x8 |- g! A% U
  842.                
    , i$ I, W0 o( _+ B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 G8 V9 u5 `' F0 g) W1 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % {, q. ~. i* ?5 K* ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 l& q! S* b0 T7 D
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; n& }7 R: W, `6 i; _
  847.               }
      D! p, N$ T6 H' ~/ F9 _
  848.               dwStartUpSteps=5;8 n( \/ n. ^: U, l3 w" J2 T
  849.             }
    2 P# l! ^/ s, D; U2 ^0 P
  850.           }# _5 T. P, U  m
  851.         }8 g  A. h+ Z2 D0 R
  852.         else% V0 D: g9 U8 j- ^8 U$ z
  853.         {/ R9 g% n% J9 G- Z* s  M8 b+ U+ s
  854.           dwStartUpSteps=3;) A! h. C0 ]& s, v
  855.         }9 \# l9 V( i- y/ N" l
  856.       }1 ?6 T. ^: D9 x7 e
  857.       break;3 c9 N3 j; _3 s3 E. \$ }( j6 N3 x
  858.     case 5:8 X+ b4 E, B. T3 B; L7 S2 B
  859.       {  {+ S, d# K4 D3 Q( \: I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ Z, ]: N8 f$ ?* {4 h7 g
  861.         {
    3 f2 W! k4 l8 c( g: Z% g
  862.           int opt_overwrite=1;
    , s, ?) C0 l8 |# B9 S1 P' ^
  863.           int opt_do_extract_withoutpath=0;
    % Y, d- m: l. q0 w
  864.           unzFile uf=NULL;
    . h0 d" u. y4 d' S- G- V

  865. 1 E  [! `2 h, I
  866.           uf=unzOpen("Wsa.zip");
    % A4 s2 G" E4 y+ B2 [( w8 V
  867.           if(uf)
    . r1 p5 Z# m/ g: ^3 f
  868.           {! l2 ~" c& l, x1 H6 {& s' f6 \8 `
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 D! e" X, E2 f- Z% H7 l+ ?
  870.             unzClose(uf);2 @  z; ^. _( G, h8 j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    6 Z! G( }) T2 O3 m0 J  g5 q7 T
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% G7 n2 k! i. P) X# p5 _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( L: P2 r6 Y3 {2 J0 A. \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ L& y% w6 p8 u+ D  c
  875.           }
    - r2 M5 r) N3 t: H& J9 m, J3 |$ p$ ]
  876.           DeleteFile("Wsa.zip" );
    6 ?- \7 T, ~# k6 ~
  877.         }" J) @1 q, G7 ^' }# U% k8 u

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

* k! L, z9 }) o
/ M2 \$ r6 h/ ?0 v) u( o

評分

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