CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
: t, Q, C) r. |! ]+ u
  1. / RevApp.cpp : Defines the class behaviors for the application.' B# y3 s8 l2 O4 d5 e
  2. //
    ! r+ [- d% Y& s; ^- _- G" J

  3. ' U& [6 y% J) |: @) Q' W8 W% D7 i& _; H
  4. #include "stdafx.h"
    % i7 b- I; G$ m! K

  5. $ @6 g! V& }0 a) L
  6. //#define UNICODE7 K" L3 f$ e0 g) y; G
  7. //#include <gdiplus.h>
    * L& `( ?& _, _* _
  8. //using namespace Gdiplus;/ i' V' w3 F9 w# q; `8 u2 C( B

  9. % j7 d* |3 ^6 ]) Z7 _
  10. #include "RevApp.h"6 o# O. v  t7 h; G% V2 E
  11. #include "RevAppDlg.h"
    5 I% |+ ^+ _7 [" L# z+ ?5 i  {7 B
  12. + d6 d1 J8 a- `7 o6 {0 e" s
  13. #pragma warning(disable:4786)! z( W+ [* X! g1 M8 N( |
  14. #include <map>
      m1 ~. e: [2 q3 ]$ R0 n# G/ ~
  15. #include <list>
    0 N$ O) g2 a2 w
  16. #include <direct.h>
    4 q4 n" J5 h" `

  17. $ j; `( K8 S5 w5 C
  18. #ifdef _DEBUG
    2 P, B1 E) R* Q# j: m
  19. #define new DEBUG_NEW
    # O& b) ?* S% G# c: l1 k
  20. #undef THIS_FILE
    ! e) x- b$ o: z: F* W  f$ Z7 z
  21. static char THIS_FILE[] = __FILE__;
    5 C# g+ \6 s$ M8 f2 M" _
  22. #endif
    ; i2 U# |5 i$ o
  23. #include "SkinResDef.h"! W  `3 M1 W; ], p! n2 k
  24. #include "ChangeBG.h"! z: T: P& Q* K" _' F0 Y
  25. #include "AFXINET.H"
    - a- x+ F, [& _# u! V/ c8 S

  26. / Z6 [; v( e, D) [/ D
  27. #define TRADITIONAL_CHINESE 00 x: U6 j2 w8 n+ Y8 S6 B" I
  28. #define SIMPLIFY_CHINESE 11 N7 H9 N/ v4 |* T3 o
  29. #define ENGLISH 27 {; S' R/ V9 \8 k9 |
  30. int m_iLanguage = ENGLISH;
    9 M% q  _! ^& Z  K( z
  31. /////////////////////////////////////////////////////////////////////////////
    / C$ `! U" N8 U; o3 k; O) o" D
  32. // CRevAppApp
    7 [' U$ v" t, I! x0 r

  33. 1 C6 l9 r- q4 f! r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# o4 U% `1 W2 t- \( d
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( ]. q5 M  c4 Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! @6 A+ q" {9 {9 T' s$ I, H) U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 s2 }  v  e$ p/ b% n; q
  38.         //}}AFX_MSG! S. V. z. ]- G' I! w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% k3 W) j* ~& L6 T# y4 _. c  p
  40. END_MESSAGE_MAP()! @  _( q! V% K* ^- W8 P
  41. * B) z9 X# X) i  B
  42. /////////////////////////////////////////////////////////////////////////////
    " p. r2 Y4 g6 s
  43. // CRevAppApp construction$ g8 \3 `9 R3 I5 Z' {1 B
  44. 1 \' R8 x* S/ X/ f5 S7 m4 Q0 }% C
  45. CRevAppApp::CRevAppApp()
    : A' X% ^+ z$ e  F+ K% U' o
  46. {
    4 G: }: @" J0 |  k6 c
  47.         // TODO: add construction code here,
    , X1 D7 {3 F1 b! o. A
  48.         // Place all significant initialization in InitInstance
    ; [7 g: [6 Q0 y) P" x2 H% ~
  49.   bDisplayIsBig5=FALSE;, v7 t' @1 ~* Z7 P, F
  50.   bRestartUpdater=FALSE;5 u3 U5 A# V$ R5 f
  51.   bFinishUpdated=FALSE;
    ; O8 e" @& S) K( g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / N" o4 t9 a4 m( E- K& g/ F
  53.   InitChangeDataBig52GBKS();
    8 Z( s' s9 b' K
  54.   InitChangeDataGBKS2Big5();
    8 C% A1 t# q- j( X6 a$ u
  55.         //
    " s* a6 j7 ]1 H' Q) p4 P
  56.         bClickRunExe = FALSE;- k6 H& D0 i+ i  F
  57.         //" p% A6 q& Y* I' ]
  58. }% x- v6 \3 x$ j: ?# R$ v

  59. . `+ F& F* o$ G1 k0 v
  60. CRevAppApp::~CRevAppApp()
    ' z9 r) [, v, ~* r$ r+ V
  61. {
    1 p! d& s9 h6 H8 [" z$ e
  62.         // TODO: add construction code here,( X4 W) m; |+ |! J/ W4 d7 o
  63.         // Place all significant initialization in InitInstance  @8 d4 f# F; y; F
  64.   EndChangeData();8 C1 q5 f2 w9 u2 [
  65. }- z: D. h7 j$ _! \
  66. % x  A4 U% V. h9 u6 u/ H, B8 D
  67. /////////////////////////////////////////////////////////////////////////////6 i3 ^5 z/ O/ L! q: Q. C' k) i' V
  68. // The one and only CRevAppApp object2 J# ]& u4 k: }( E- [9 C1 |( {

  69. " Q9 f& W# V8 ], J$ O$ V
  70. CRevAppApp theApp;& _# q. U0 j0 y/ k

  71. ( T1 [& d4 T3 I' o0 j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 T+ V* o2 ?7 N* m: J4 s
  73. {$ j5 Z6 J& w. U; |  z9 f
  74.   int iEOF=0;
    1 o8 n3 j/ C3 x2 d
  75.   char szTempName[MAX_PATH];# a7 t4 V# t1 y. i
  76.   *szFileName=0;
    ) C  Q& O3 d# L& @
  77.   iEOF=fscanf(fp,"%s",szTempName);! |" q0 }% c) Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    + }8 n* ?# Z0 M; B
  79.   {0 K. k! Y  P, Q2 P, k% K
  80.     strcpy(szFileName,&szTempName[1]);
    4 l! _5 S7 S3 l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& c% N. J7 }  ^4 G% O% u3 |* g( z
  82.     {
    $ j. Y" }4 S, m6 K5 _, x
  83.       iEOF=fscanf(fp,"%s",szTempName);: }9 N) T* v# G
  84.       strcat(szFileName," ");
    0 m, G1 J' s  ]7 T$ C; h. w% z
  85.       strcat(szFileName,szTempName);5 `* r, E" x6 o$ K1 t
  86.     }
    & S- R% ?5 x, e
  87.     if(strlen(szFileName)>=1)% X/ `4 d% U/ w- n
  88.     {
    2 V) x) d. e2 ?: W6 G0 G
  89.       szFileName[strlen(szFileName)-1]=0;7 O$ |0 [: U# C5 d, ]
  90.     }2 U4 }* P/ t# T9 l  k& k2 A  |
  91.   }
    - x8 ]- [6 V2 B! n2 \; d) v* e
  92.   return szFileName;# v, o7 z4 Z8 R
  93. }
    ( C1 c" c+ s; z5 [6 ]1 q
  94. 6 A: @, Q: }$ q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- s6 L- y9 k( J2 y( r# _' f1 E
  96. {1 Q! b) ]7 Y" ], }% M5 N
  97.   FILE *fp;
    , V; T7 B% S" v) T7 M% T" z# f
  98.   char *key=NULL;
    / n8 w* C" {0 Q) B; w# {* D9 K
  99.   char version[MAX_PATH];
    7 m8 V  ^5 ~: V1 ~' x- e
  100.   LPUPDATEFILE file,olds;
    1 E$ ^% \6 |! u1 ]2 }1 W& E6 b+ }
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) b/ q2 a/ `  I9 R6 C5 j9 ~; ~$ C

  102. ! F1 Q/ q+ q' Y0 E/ w# d2 B( _7 \
  103.   UpdateList.clear();8 @2 L- v6 _9 H; O# t& \) ?! a7 x
  104.   UpdateFile.clear();
    0 _; `( h* m7 q1 A# b/ G
  105.   if(GetFileAttributes(filename)==-1) return false;' N! A5 M) v! e1 l. J- k( D1 z; |
  106.   if(!(fp=fopen(filename,"r"))) return false;# U/ E. u8 Q& y+ O/ h
  107.   fscanf(fp,"%s",version);
    0 e  E' c6 B0 w6 X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! V4 w2 v; ?9 z3 L
  109.   while(fscanf(fp,"%s",version)!=EOF)6 ~6 W& ^+ M# s7 _( K
  110.   {, T0 Z+ n* T- A2 P& q0 F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 O8 ^9 T! O% V
  112.     fscanf(fp,"%s",file->path);! O3 e" x+ ~. u, Y. c- z* G  ^
  113.     ReadFileNames(fp,file->file);
    ! X* e# z6 L4 ?" x: g5 ]) P
  114.     strcpy(file->full,".");
    . k0 R* S. p2 L: g5 d4 q
  115.     strcat(file->full,file->path);4 W: Q# I+ O% N' Q6 O  ~
  116.     strcat(file->full,file->file);
    ! R6 ~/ j+ q; m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())! b. x6 c3 j5 v- v' O9 ]
  118.     {0 R6 ?1 ?- Q# \% o( g# F
  119.       file->vers=(float)atof(version);- g# q- k% ]4 D0 l/ A4 k& B. A
  120.       UpdateList.push_back(file->full);# \7 ~  Y& T/ G( f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ Z% \+ q8 H& j0 ~- j7 C* R' e. `9 Z# M
  122.     }
    & c4 s% ]+ R0 a4 I* ^9 W. R& ~& J
  123.     else
    & e/ p/ G( }! d- O. m0 _/ K
  124.     {& L& F+ C  V- w$ s
  125.       olds=(*p).second;
    6 t5 y1 h9 K2 S+ O" F5 @
  126.       if(olds->vers<(float)atof(version))
    " F. U. H# M% E; f
  127.       {0 M$ ?* X# H& p, J2 l' t
  128.         olds->vers=(float)atof(version);, _. Q7 S2 z6 P( m* W+ j% Q
  129.       }
    8 |# Q- W1 v5 b7 o
  130.       free(file);  g' R4 ~; J7 L
  131.     }
    3 m$ }" L7 \+ G7 B- L
  132.   }8 _9 Q! O  G  d- z
  133.   fclose(fp);
    6 n6 d) d2 q6 s, P* f% D2 @# U& D
  134.   return true;
    7 @' T! e. I/ M0 a9 g
  135. }
    ( o2 k: n) a) U

  136. " h! L2 L: e8 m3 L# u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      ?1 X) k& [5 k; }  s: e
  138. {
    % Q! f0 o. [; B; W/ M
  139.   TCHAR  szFull[MAX_PATH];  l9 O+ W2 m8 {$ U% I2 ?% ?4 P* l
  140.   TCHAR *token,*inter;) {( t1 t( `; f
  141.   *szPath=0;- T9 C7 {6 y6 P: d# x7 x
  142.   strcpy(szFull,szFullPath);
    , {0 A) U; U% S) u7 Y
  143.   token=strtok(szFull,"\\/");
    - D1 X) j+ b# z* \" F+ d$ _$ |+ _
  144.   inter=token;0 |: u3 B8 {, Y, h- y5 `: H: T* ~4 _/ b* Z
  145.   while(token=strtok(NULL,"\\/"))
    : S7 Z; ]8 ]& n5 k& S! F1 a% v! t
  146.   {) E' m) Z+ D0 T- {
  147.     strcat(szPath,inter);
    ! z! D) G' ^/ V/ K: u. U1 V3 h
  148.     strcat(szPath,"\");
    3 e) T0 R' ~- Q. s1 I# a7 p
  149.     inter=token;. d: J, f5 ?7 g" l; `$ G
  150.   }6 k* U' T: e4 P0 [/ I. b
  151.   return strlen(szPath);
    * ^. A0 v. B% C
  152. }
    & v4 _. z2 h: g9 w6 v9 t0 w

  153. 7 I* {- ]& O8 C9 [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% D" u- Q" q+ R6 i; k
  155. {+ @* g) y8 u* B! q' N/ e. a
  156.   DWORD attrib=GetFileAttributes(Target);
    & T" t9 k& x# k) Z( d/ W$ y/ V
  157.   if(attrib!=-1)' l. d! x1 C( E0 I1 b
  158.   {
    - p  {& |6 d( V# N: |5 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( k4 Y# k7 S( \$ V! V1 m) [' k
  160.     {0 O: C0 d. T+ v" c" n9 i8 C# O6 C  a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 _, R4 Q% W5 D. H
  162.       SetFileAttributes(Target,attrib);
    2 x% k, G8 l5 n1 {! o* k
  163.     }
    / s& ^3 \, u% \0 H
  164.   }3 c. B: O( d7 q3 Q9 s
  165.   CopyFile(Source,Target,Erase);
    4 n. s( {2 t( J9 D) l$ B) k' A1 n
  166. }9 |! Q6 t) |# v+ S: X; }, l! m2 O
  167.   r. T# o7 u2 j" Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ N! A4 u) _( D+ n  }2 C8 m
  169. {3 c( B# M$ |. j' O+ u$ ]* E5 f3 s2 ]5 u
  170.      FILE *fp;, t, O& T# P9 l6 |% k
  171.      char  szBuffer[8192];5 p7 ^+ W$ L8 a
  172.   va_list  argptr;
    2 w# A" V% V- |; `6 w3 l3 z

  173. - W: V5 N/ u1 ]. m
  174.         va_start(argptr,message);/ }. q3 G/ i) b
  175.         vsprintf(szBuffer,message,argptr);
    0 I0 Z' ~7 V5 E
  176.         va_end(argptr);0 D# _  V. N  e6 s* f
  177.   fp=fopen(FileName,"a");
    ' c* e) p3 e3 D! B
  178.   if(fp)* Q5 q. x6 h) f* i) |
  179.   {
    0 l3 t( d' u# T
  180.     fprintf(fp,szBuffer);
    $ u2 Z" J% E7 G9 \
  181.     fclose(fp);! v$ O" J; I6 j6 ?. Z
  182.           _flushall();
      G5 r' G. {' f/ q
  183.   }
    " m+ a- ~1 U' p- W( z
  184. }' F4 x+ K7 c9 U. W7 K8 W% C

  185. 6 s4 s9 j, z' {+ x- p$ E& }' m
  186. BOOL CRevAppApp::Fclearf(char *FileName)5 k8 k8 r8 [5 x. J' ^" x! Z
  187. {9 @2 D6 ]! L: p
  188.      FILE *fp;# S" E, g( a# h: w2 o/ c' S
  189.     DWORD  attrib;
    & ~+ g7 }# x/ r* [. H) A. q- ?
  190.   attrib=GetFileAttributes(FileName);
    & u' W; G0 R* i* r* C3 b. m
  191.   if(attrib!=-1)* e7 B9 R$ w7 E8 e% y- n
  192.   {
    ( i, O) n) d) g8 }+ W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 b! I" W: @/ u( S$ q* r. P# ^
  194.     if(!SetFileAttributes(FileName,attrib))+ d3 m- }1 P- v: ~' e
  195.     {
    . z" l- h% B4 T
  196.       return FALSE;1 X3 L. t" P  a& Q; a
  197.     }. [( Q5 V# O3 q' h& c& v: B' ^
  198.   }
      F0 `1 `- j* }  T* J- s
  199.   fp=fopen(FileName,"wb");
    3 V4 v* o% K. b, z# x0 C
  200.   if(fp)7 w+ `* q& w  Q: w& q# D, `/ a& u  A
  201.   {4 v1 E* T9 X: k9 a1 _# Z  q: ~" O' S
  202.     fclose(fp);
    9 D' r6 x3 k, {+ g
  203.   }
    . Q; m- M+ |8 B* S2 o2 O0 m- S
  204.   return TRUE;, a$ v. W3 S6 R! n, u) W
  205. }0 J* z( b7 l$ y$ v* V/ \. e) c. S! C
  206. 8 t8 R  R0 F% t: Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    : ?6 g5 m% T5 n8 S0 y  e
  208. {
    % k' G: v. h0 n. f, s0 S4 K3 J9 P; V
  209.   char filename[MAX_PATH];
    . H  n- F0 {$ E7 w) |
  210.   LPUPDATEFILE file,olds;
    1 t9 h% M  h8 w& i$ u3 R
  211.   std::map<int,CString>::iterator i;& b1 u/ H; B7 R1 ?# @! [2 r. }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' N$ ?2 g4 }7 l! F$ L
  213.   std::list<CString>::iterator l;. u2 h. _' ?  X. b- q, [: i# X

  214. " P5 i7 Q$ p- f6 ?$ S
  215.   if(bFirstUpdate)
      E3 b/ B4 [" g
  216.   {
    - W4 `) Z4 w+ g2 A1 ~' ?
  217.     dwCurrFile=0;
    & c! w% K5 y8 c: Q
  218.     bFirstUpdate=FALSE;
    0 u  s6 b, ]8 t4 ~7 X' U8 Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ M+ g3 |. Q; h: Y
  220.     {+ b: t- w7 u1 [' G! _4 e8 H1 Z
  221.       dwTotalFiles=UpdateLocal.size();0 b( [% |& I' d: d6 {+ P
  222.       dwDownLoaded=0;
    5 T, S7 a6 y: u# }6 J
  223.       bSilentStep=FALSE;0 G" y, S$ U8 z
  224.       bCompressed=TRUE;
    4 C9 ]9 j1 F9 {1 e  o7 B
  225.       strExtLocal.Empty();
    ! T0 d; r3 F' g- }- b$ C
  226.       strFullName=(*i).second;
    / l' j) i$ H7 l1 s) F
  227.       dwProgramState=AP_CONNECT;
    ! l+ y1 z' U% S' S6 M  K5 W; c0 }
  228.       return TRUE;
    ' x1 Q' A4 h6 {" w" {9 M, G: a1 e" [
  229.     }4 U% I$ m0 O" p, y( D, M
  230.   }! O: I) r) f& B! V0 H1 B4 z
  231.   else if(bRestartUpdater==FALSE)
    . i8 Z( {6 `' l0 E& W6 A% I
  232.   {
    ! O7 s) h" n5 |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , |0 M* i2 G5 K" W5 D  T
  234.     {% M+ g' S' V; Z& g
  235.       file=(*p).second;
    1 Z% _9 D4 Q' l- ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! z5 N/ m9 _" ^& x+ X
  237.       {! [1 ]( F. V  j2 S" H
  238.         olds=(*p).second;
    3 {& X' h2 O% w0 Z8 z# j* V0 c' W% ?
  239.         olds->vers=file->vers;3 Q% ^, J; T& e0 t8 _! o5 F8 n0 B
  240.       }$ W: ~0 A$ i4 V' q. t; W
  241.       else
    ) o% L2 ?  Y* A. u, s  O' R
  242.       {0 w$ m  B" m' T/ E5 w5 c, U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! x8 @8 d2 ?8 |+ S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) |; y( y! H, @! Y* K; ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 D! j; k6 @' m, [8 q0 ~
  246.       }* z! O$ N2 H% j+ j
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( ~) z/ d- Q2 L3 |/ m& _6 R6 w
  248.       sprintf(filename,"(%s)",file->file);
    ) |- z  k( P0 p8 J5 U1 V( b. F) u
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: j& n8 m$ k; |* C5 c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, l# M% {& X4 K1 E$ J4 B, V% A+ c& K
  251.     }
    ( k# N4 J. y$ \; S" x+ y
  252.     dwCurrFile++;' r. q4 y1 q/ j2 R) J! s2 q* x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 ?) ^& n2 z2 u6 Q
  254.     {, F/ f4 L) |; v" ^
  255.       bSilentStep=FALSE;+ D* B6 W9 H7 I$ o# @: w4 P
  256.       bCompressed=TRUE;
    ) M! R0 t# D! e; `8 p' y7 e
  257.       strExtLocal.Empty();
    " N) l/ i3 j% v' q6 ]$ D# t" v0 E
  258.       strFullName=(*i).second;) M: b7 g7 J; v- c
  259.       dwProgramState=AP_CONNECT;4 W' V0 o8 D* k
  260.       return TRUE;# Y' I( s4 Q0 `+ `
  261.     }1 I  c  O( n& s, ^
  262.     if(!bRestartUpdater)
    0 F$ \6 B1 |" n5 H6 c
  263.     {/ r# ]2 Z) @" D' u
  264.       int iCurrSize,iFileSize;
    7 u9 t7 \5 l" T, _& \
  265.       iCurrSize=0;6 W" b6 j& L! X% M1 ^- g
  266.       iFileSize=UpdateList2.size();7 o/ u+ ^5 T: k- y5 i# Q, O# X, Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 s5 j0 d. v( D' H" h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 O7 [3 r/ z; r9 D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' l0 X2 E4 A. Q: }7 u' Y- m& w- x
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) _) u; R6 c& W1 n% Z
  271.       Fclearf(".\\update.dat");
    % R! t0 ?  l! F; S9 ?% N( a
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 J9 Q& f% A' z3 U0 t  P. p9 b
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ Q' _4 k: s' O5 Q) k/ K
  274.       {
    ' W& S0 d* v2 M6 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! U9 Y& Y4 w$ t* Z9 o! N4 ^3 K
  276.         {! T# A& p2 N8 S+ Q9 K$ h6 o2 s
  277.           file=(*p).second;
    5 w8 w, m' K9 I, ]( r0 u5 g& `
  278.           sprintf(filename,"(%s)",file->file);
    ' t' n7 @2 Y& N0 H  G6 h" ?2 b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( J! G: q' f% B( ~
  280.           iCurrSize++;
    ( T5 x+ c. J/ I+ Z& y3 s9 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 Y6 ]1 W; b7 p2 d  F  F" ]) K  Y
  282.         }
    1 _& f8 N8 q9 I' x# R4 w4 _# n2 k
  283.       }% _! x6 F# B# g  p) N$ G7 j8 i
  284.       unlink(".\\update.txt");
    ) E/ ^7 a4 k. ?5 A
  285.       unlink(".\\update.tmp");
    ) U% T& x0 A) b/ J
  286.       Fclearf(".\\checkversion.dat");
    . g" w; _9 A! g+ _! e0 y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 X( R* Y& A) j4 O
  288.       if(UpdateLocal.size())
    ( z, A+ T: r0 Z9 R7 X+ m) V/ h5 k
  289.       {- z& T; ^, j6 m0 h  ?1 ^
  290.         UpdateLocal.clear();
    2 u: A3 w# n+ K0 J
  291.       }- Z( A+ \" o! Z/ g0 s
  292.       if(UpdateFile3.size())' K2 F! u9 R; f
  293.       {
    $ ^5 w& J+ T7 X" w8 ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' M4 [9 X: i0 G; H+ \2 b
  295.         {0 b$ W" \  O7 m6 u; D
  296.           file=(*p).second;7 D9 m0 v# j" I* }6 A
  297.           free(file);2 U+ {3 d( J( ^7 a& R1 {+ g
  298.         }  F8 E* |5 f9 x! z  e) l( ^
  299.         UpdateFile3.clear();
    + N+ [6 z; I8 @5 r' W7 s4 m( ~' G& n) q
  300.         UpdateList3.clear();; A! P; @7 E4 d3 a5 d
  301.       }
    ! N) h2 r7 Q6 d& g7 X8 o
  302.       if(UpdateFile2.size())
    0 I( g; R7 ~7 S3 c  Q
  303.       {" V9 C+ W' u7 z4 e- r# a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - I2 e" }  C/ |0 m4 G6 _* D& r  C
  305.         {/ [* W: ]  F; N/ d$ s
  306.           file=(*p).second;
    9 Y, k3 _/ X% p
  307.           free(file);
      V. p. I+ T7 ~7 P
  308.         }
    ( m" p9 f( J* k- G- y
  309.         UpdateFile2.clear();
    " z+ j5 @4 _* p; {& C
  310.         UpdateList2.clear();. O" _5 Q% B7 J" m( @
  311.       }
    # m4 ]& O; C* O" B$ J
  312.       if(UpdateFile1.size()), Q- _0 X! v5 h) t4 y* H: X
  313.       {
    - x2 M+ ^6 N, G0 Y  q, j& W! O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - k/ |5 h! d0 c. }1 h# L
  315.         {# G3 p4 Q( S) \( b  Q
  316.           file=(*p).second;
    , o/ [4 i3 A5 m3 E( |- }
  317.           free(file);
    + `) h$ n' j1 s. v5 q* {
  318.         }$ i' m$ z/ e: x5 S. H8 U) H
  319.         UpdateFile1.clear();  T1 f! P0 ]5 u, f" f& D
  320.         UpdateList1.clear();: t9 ~( p. x& K: w
  321.       }$ F/ H3 o6 V1 q% Z- U" S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 N3 P1 a, {$ D6 p! V
  323.     }: F: \' c, |9 g" m: l) }9 Z+ w+ x& B
  324.   }0 R9 {) p* d6 d, R8 ^! x3 ?
  325.   return FALSE;
    ; Q5 d& D+ T& K2 W
  326. }8 T- u9 n. I; y9 a

  327. ( A% f) e: o) ?* s- N5 }2 H
  328. void CRevAppApp::ClearAll(void)
    2 X: X2 \+ T; s+ I5 S2 {
  329. {5 D( U6 j- M5 N; q7 |' z+ @
  330.   LPUPDATEFILE file;' s* r! R- {3 Q: d! C2 P* X1 E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + A) O, `# s: P' X, Z; c" \4 W
  332. + c4 P" g2 h% W( E2 j, D4 z
  333.   if(UpdateLocal.size())
    : o: \/ I2 C" _1 q; f% F' w$ u
  334.   {5 O% i8 t# k, n6 ^0 b- A+ n
  335.     UpdateLocal.clear();
    + ^) q, s6 R/ N, v
  336.   }
    5 \$ v5 u7 ^/ Z2 j- E" L
  337.   if(UpdateFile3.size())
    7 f. D6 W7 o2 ^7 V; O2 T7 a
  338.   {9 [2 q# r( j* T) G3 t% ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # E' O9 k' H6 S/ k/ L8 J& `" `$ d
  340.     {
    : X; Y' G5 W+ F5 p; c  C# }
  341.       file=(*p).second;
    " _( f' B9 r) [* m; g* L
  342.       free(file);8 Y, r- T# g- T/ o3 ?) L$ h
  343.     }
    9 M3 v4 a! s% U2 O
  344.     UpdateFile3.clear();
    ' k$ E, {& e; s- q' o
  345.     UpdateList3.clear();6 p; ?$ V. g# N2 A' q6 L$ g
  346.   }
    ' ]& @4 ]0 h7 g  V
  347.   if(UpdateFile2.size())  I' }( N1 _+ H" }$ G& X8 i% C* X
  348.   {
    9 y  `8 T; r5 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 I9 [. K! J5 j1 v% y( U
  350.     {
    / |1 N% P, D# R* N! ~: b' J
  351.       file=(*p).second;6 q( s  ]- z# L  A
  352.       free(file);0 \7 N6 \0 X' }1 o9 o  ?, K
  353.     }0 _6 f2 a8 @$ E( A+ A
  354.     UpdateFile2.clear();
    + e: l5 v7 T2 r3 U/ R( h& I
  355.     UpdateList2.clear();1 N' s# {2 V, b! c. f" d1 O+ I0 v
  356.   }: J: h5 I0 n* y9 ~! Y
  357.   if(UpdateFile1.size()): [( p8 O4 P8 D
  358.   {1 C# e7 s. x9 O" a/ U1 f7 V3 V# K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 S  M/ F9 l; Z+ t0 W
  360.     {! b" M% Z2 b% v6 `! Z
  361.       file=(*p).second;
    3 g0 ^4 V1 y3 _8 W# V/ L
  362.       free(file);- D# \' t8 k7 h$ }3 |1 q4 O
  363.     }3 ]( e' ?  q6 g2 Z4 R
  364.     UpdateFile1.clear();
    2 z/ o( t: D, F* _' b/ {) u
  365.     UpdateList1.clear();
    ! t$ a% i: W3 Z
  366.   }
    0 x/ v! z, I2 B0 h2 V/ T
  367. }  2 {' R% j. {* O/ \. `
  368.   6 R8 _: b! B( p/ z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    - y. j9 k' g5 K2 l4 N. n
  370. {, s6 B' \% v6 g  U* ]/ H7 A9 p0 i
  371.   int c;/ n- m" y" i" B( X( l( {! e
  372.   LPUPDATEFILE file1,file2;* g* t9 _( y# t# k. {
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) ^( q0 y8 q- I
  374.   std::list<CString>::iterator l;
    / P0 d3 n1 c3 t2 g0 i5 T
  375. . p/ j- \- S( r* I
  376.   UpdateLocal.clear();/ e( F- P0 E' A' a9 H; [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' {4 J8 I  I( l: F5 G
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& K2 V  S. l# Q" `6 V2 X3 L0 t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 b0 ~; B! z5 T2 y" z$ Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( A/ p1 ^" u+ W" V. e' d
  381.   if(UpdateFile3.size())
    ; O% c" G5 N: g* f- K
  382.   {
    3 b1 e8 \" _, f$ f7 v. D; Z* n
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' q( x( y# U7 B8 P6 l& `, r6 ^
  384.     {
    0 w# T) j9 p6 \- t5 Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( Q( f8 [% n" Q5 v0 }  J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 ~3 A! Z0 _( G( r
  387.       {
    3 B: n& g. M5 b! v$ X4 r& d: L9 i7 U
  388.         file1=(LPUPDATEFILE)(*p).second;
    ; p- S3 i1 b2 J8 \7 c, z/ U8 C
  389.         file1->vers=file2->vers;
    7 U0 F- n( K% z6 G) Z
  390.       }
    8 S5 j) z7 l# _! N  Z
  391.       else
      {& C; x& d/ _0 w! Y8 y5 x/ @" H
  392.       {
    " F" l6 I( p! z  P) _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % |: q0 I& G" b+ T% V: k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - y- o) x1 J& O* {* \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 q; c& H! ~. Q. J
  396.       }
    * g8 ^( W1 ?& r- p) Z1 N! x
  397.     }
    2 q! H6 t2 ^! n" D
  398.   }
    * \. r8 k9 ^; O) P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)9 v, D2 G6 Y5 m( b# ]) l
  400.   {0 B7 y& E5 \& \0 }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : P! L& j; G; ^# k3 W+ h" S8 i! y
  402.     {: L* U. A0 K; y) |6 K2 @
  403.       file2=(LPUPDATEFILE)(*i).second;4 Z1 A# b% L1 E. ?" n1 q2 N0 A
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 V" H% v7 F3 t+ r! q8 [( ~! A
  405.       {
    + Y  I4 @7 }5 k6 C% _- Y! c
  406.         file1=(LPUPDATEFILE)(*p).second;
    , q  G5 B  z/ \; g( J' [' X% E" S
  407.         if(file1->vers!=file2->vers)
    7 E* Q6 m) V* H0 h+ n0 ]
  408.         {
    # n5 j! V6 M( h) j+ p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - {  V& e  ?% r9 Y( u% [, c! g
  410.           c++;
    / h6 ^* c6 y; u8 d- L9 ]/ ]! }' S
  411.         }* ^$ V* T2 O* s& K0 Y- x6 F
  412.       }
    ! q. C( O6 d4 \1 ?3 b5 W
  413.       else
    $ Z3 J# W$ w# @
  414.       {: F! k, [: L( \& Q1 P! ~- W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% K5 I7 h( J. ^. e8 b( K4 n
  416.         c++;; Z+ S* ^4 ~2 u  p
  417.       }( m2 F/ G% x% E& I" C" N' o  q
  418.     }6 w. S- j- x6 x. p" y
  419.   }
    ( v$ i* `+ G% M6 K, B; U& F
  420.   unlink(".\\DownLoad\\update.txt");
    ) q, m; |. ^; V
  421.   if(UpdateLocal.size()) return TRUE;
    ; @6 D2 Z# Q8 s; |, Y% ~
  422.   else                   return FALSE;
    0 m6 X9 g0 w2 Z) {, M
  423. }* d! C, P$ ~' q1 h0 x1 M/ R

  424. 7 [; C- y  O) k( c9 w' |) D/ s
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"6 @+ _  h. t8 E1 s3 R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - z% s7 s$ R( e! j# V0 h3 U. a

  427. 8 `0 J, p  B3 R+ Q( w/ Z

  428. + V  h  k4 Y( p
  429. 5 M) A$ `2 J' P* Y5 N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 l- T- j( O: c
  431. {
    1 ^2 U& M, F6 D, ]# A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" ]8 n, e" |6 ^5 D: s7 k4 k" V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 q3 F& G7 F3 T2 s/ F
  434.   {' ]* Z& c' H& |, V% n- f
  435.     char szLanguage[50];, l* o% b. F( w7 D; [1 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' t! z8 V% ^' t4 b5 u) V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: L+ X/ \/ e8 p; T4 _5 z3 M2 K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 ]; k0 C' z" A7 N- U
  439.     else                                   m_iLanguage=ENGLISH;% ]( o! C/ i+ `+ v
  440.     char szRegister[100];9 Q" B, J( k( {# ]: W; ^; K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% S% R% s2 o$ J8 W7 P* d( o& H
  442.     strRegsName=szRegister;  e3 o  d3 Q3 |6 U; w2 x' N/ g
  443.     char szPatchURL[100];- h0 \+ a% L6 n" l8 V& ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( Y8 n1 u" h7 |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 A% K' }6 M- e5 z" }
  446.   }
    ) O8 n9 c0 l7 H1 |& r& H
  447.   else
    + Z. t. y; r4 E2 L& v1 E
  448.   {" }& N  R2 f, H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 u8 I/ Z0 ]9 R+ E: f6 |
  450.     strRegsName=DEFAULT_REG_URL;
    $ p* j8 u. E; ~: L* }
  451.   }. v/ d( d5 T5 F, {( a8 O3 ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)  U* i+ s) ]9 _. Z. G6 w
  453.   {
    + @  q+ o2 T1 `0 z# \! I) d# J
  454.     char szIP[50];) ]9 C$ y% @( ^8 n
  455.     char szDIR[300];
      C( h% ]- A4 J4 l& Q7 |9 M2 t; r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 X$ T. G) n3 r' P
  457.     {
    2 C7 ]- s% n" |; u2 M; _# L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " t2 W* c1 P# h8 N$ Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / S; `2 P& E( J) l  S& S4 U/ g6 }2 K
  460.       strHostName=szIP;
    $ {+ N* L5 T( S
  461.       strHostPath.Format("/%s",szDIR);: S6 z0 p$ o7 g, \: L( |3 y; B
  462.     }
    # i# E' E6 P, a( g4 p
  463.     else- t! R7 h5 T4 B1 E) m
  464.     {
    , }7 f& Z$ M! F( G6 s# E
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' a- z, @! M2 w9 @2 Q  p+ Q. i
  466.       {
    " J4 H( A8 A; N7 h9 U' G7 w
  467.         char szLanguage[50];
    ; n# P9 K( n7 o; w7 ]6 i' U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ V9 ~7 X8 J7 _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, l5 p) y0 }3 k. ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 `( Z; X  d' y. m
  471.         else                                   m_iLanguage=ENGLISH;
    1 h7 _" @. T9 A( E6 D" B  h0 |( @
  472.         char szRegister[100];
    2 c% w( Q7 D4 B8 c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , R& y- k( }% c
  474.         strRegsName=szRegister;
    # X- d/ g5 N) M9 |
  475.         char szPatchURL[100];
    0 m: V2 W! r6 s6 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 v  Q" R3 `2 {! T  S  e4 z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " j/ x# x( t1 h. K8 u/ J: h
  478.       }# ~  N6 T( M4 j+ B3 y5 u
  479.       else5 O. f2 d% R* `4 y
  480.       {: b0 W% x+ d; @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 @& P6 h" [' N9 A7 u
  482.         strRegsName=DEFAULT_REG_URL;; k$ Z- U! T; U; x1 W/ T
  483.       }
    9 \: p0 j5 a  C3 i! b: g
  484.     }
    1 H. |! L* j# I3 b5 s# x7 l* f+ f* I' s
  485.   }
    % _0 w5 |0 e% [! N
  486.   return true;
    5 ?/ T6 T0 ~5 Y( L2 Y$ j
  487. }. g1 l3 W$ C& n
  488. * C& Y! e% o  E4 N3 z
  489. #include ".\ZLib\unzip.h"
    , K7 g( y$ u' t( Z  v* l, r6 Q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 D3 j, c/ D8 \+ Q- `2 A* s
  491. /////////////////////////////////////////////////////////////////////////////4 _6 i; f7 a% S( \- v# F( G
  492. // CRevAppApp initialization" e. ?4 S2 @0 ^
  493. & N+ S+ }  k3 l! M9 }
  494. BOOL CRevAppApp::InitInstance(), d! z/ Q' I* O% P$ N9 s3 c
  495. {0 Z8 |' X4 ]9 H7 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
      P1 }  r3 V2 |$ n

  497. 9 y3 H6 C6 w, W$ g0 n, X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ i. n5 i# K1 D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 h) r  }7 D6 p" b( `( S# P
  500.   {
    + v1 g& F) m' n: O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 M5 g9 D7 V" u1 C6 l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 v1 h1 N! ~5 b( U- u, h" j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ D- [) g" i! d% o+ z7 u; H
  504.     {
    9 C0 {: y& h3 \5 N
  505.       strcpy(szPath,szPathTarget);; {" H1 e+ g1 f  a
  506.       SetCurrentDirectory(szPath);& E# i7 G) C- i3 g2 K
  507.     }
    ; U) E1 S" i  |
  508.   }
    2 Y1 [9 ^3 u. G' [) h4 ~
  509. #ifdef _DEBUG% l4 Y- L0 A/ }3 G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % Q9 [2 J" T: e4 i4 {- w# V5 {+ Y% E
  511. #else+ K( r. {, x$ R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ ~' X! T* Q$ X8 U( U8 m
  513. #endif
    6 _8 |  i5 m% G5 ?& A& o) O1 K0 Q  H
  514.   {; c7 d& }) O' E% t& A" @0 L
  515.     char tempFileName[MAX_PATH];2 B3 W, J& g7 L& M
  516.     strcpy(tempFileName,szPathSource);
    , G9 D( a0 K; ]8 r$ M
  517.     tempFileName[strlen(szPathSource)-12]=0;; N% k4 K9 g+ R' s+ w! O( f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , t  f- {! z; \4 L) C8 X: C9 C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  F/ i1 V9 y* ]( Q* ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ P1 I6 I1 i5 h6 Q( v5 V
  521.     return TRUE;
    3 ~) \! m7 r' {: Q: F3 P
  522.   }. K4 n' f3 x0 e- _. u
  523.   // Nuke 0118: Delete run.exe2 R7 o5 A+ h! R6 _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' E) M% \' F+ o* z, |0 F( a
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : o. e' h3 m3 r- u6 J2 K
  526.   if(!ReadCfgFile("Config.ini"))
      r; I7 Z' c2 U
  527.   {: z! J5 y0 V5 O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' G5 y" w" l4 u
  529.     return TRUE;
    . E. H/ w4 E* Y& o$ A4 ?$ v0 e
  530.   }
    - R) P2 Z0 _5 j( e0 T- z
  531.   HANDLE mutex;
    8 B5 t& S. k" Z( u! M/ P, T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% Q% [" m- t; Q; [1 Y! i& M
  533.   {& u( j4 S5 P( k% C8 H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! I/ a6 j/ X) c# X( _5 }0 Q& c
  535.     {
    " `7 B1 }3 U, F) x
  536.       CloseHandle(mutex);
    + Z/ y& \" Y# c. E  ?. z8 n; N( Z  Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - }& R; f! U+ I- K" q: K2 ^, A! u
  538.       return TRUE;) Y9 y0 U7 a! B- B- M
  539.     }& c* c4 `) w6 A; N4 H7 v- @
  540.   }  
    : D# w* A8 O# ^. m/ ]5 a# c3 @! m* M
  541.   CloseHandle(mutex);4 z/ ~4 {3 f0 D3 `' }3 h  a
  542. # i: o+ R; D9 ^/ Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  k7 j5 E$ }1 W, E  A

  544. , O# J" m% b$ D) M! X
  545.         AfxEnableControlContainer();6 N4 Z2 u- \# N# B- k. b

  546. 8 _+ }6 G9 o; r& L
  547.   bCanUpdate=FALSE;
    9 A( E! M+ S7 @3 u1 z1 @% g
  548.   dwStartUpSteps=1;- ^( H5 \& G, O% E8 y! H
  549.   dwProgramState=AP_NOTHING;5 e; A9 @: W1 T2 C# I  H) ]
  550. . I4 ^" y: a! F8 i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ O9 L0 s8 [3 s( V! |
  552. 7 T# @6 L, y! x# V" B# Q
  553.         // Standard initialization
    ) D- H+ k) k' I9 l
  554.         // If you are not using these features and wish to reduce the size! [# K9 G* E( e* x4 z5 d( O
  555.         //  of your final executable, you should remove from the following; }' k& z/ V1 g0 V8 C3 e. c
  556.         //  the specific initialization routines you do not need.
    7 R2 C+ N7 c# M* L& w7 N2 D+ i7 W

  557. ! m5 r/ s! T1 ?+ Q# Z
  558. #ifdef _AFXDLL" ~& e! b% T' k0 V  p+ T0 g( ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 |# Z( X! M+ Q* z$ q, g
  560. #else, p  w: I+ V  W+ J* R0 n- }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 K  _( ^5 T5 s, i
  562. #endif, ?# c- G1 y" U/ C7 [/ b
  563. 3 J8 J8 G' z8 K7 Q+ B- l
  564.   dlg=new CRevAppDlg;: f8 ]9 R- e' M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - E0 D2 p, d( v( @+ z) w% v8 R7 @. F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 E7 o( Q& V2 d! l
  567.   m_pMainWnd=dlg;9 e9 N; P( g& ^' F, [
  568. 7 [1 o4 ~2 z0 m5 Z8 u2 w$ l  F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      p3 e* e$ q' |! j- G: l) N
  570. 0 x2 \2 U; T( Z3 L
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # `$ S! \+ w' H) i! L
  572. //  ULONG_PTR gdiplusToken;
    " |3 {8 }; U8 u  J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 y* Y% x: O6 O: Q& b) }
  574. * b) r! Z" X. y2 i
  575. //        CRevAppDlg dlg;' L; u$ Z) ~# m  ^6 m5 R' O* k6 E
  576. //        int nResponse = dlg.DoModal();
    + U  k# i; ?% E( F7 X1 q$ Y* D
  577. //        if (nResponse == IDOK)
    ( P% f4 Z' i6 u1 R$ M: T5 v
  578. //        {0 |5 C8 U4 d0 H, U/ l# m; z
  579. //                // TODO: Place code here to handle when the dialog is
    $ X8 u7 o  x7 B; d5 p' `
  580. //                //  dismissed with OK
    5 d( F+ h% l# X; w6 x1 o
  581. //        }
    # z0 I3 D9 O9 c
  582. //        else if (nResponse == IDCANCEL)8 \; B; A9 t+ Y+ v
  583. //        {  ~  \1 f- e' A/ ~
  584. //                // TODO: Place code here to handle when the dialog is
    " f, A' I" d) \7 z
  585. //                //  dismissed with Cancel8 H2 }* ?* N7 [( u3 S$ \# `  N. f3 K
  586. //        }
    % q, l$ U$ {+ R* u
  587. ; t  x) _- }  N2 @6 z8 ]/ D. M6 t7 a* {5 ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * N  u: |  W! Q. n; ~/ `" `- ~
  589.         //  application, rather than start the application's message pump.5 d  B$ S! X) C3 l0 X! \. _
  590.         return TRUE;7 W) j7 n# n# C
  591. }
    : |5 e: t5 {5 K; A/ `
  592. 7 b: o: w" T. [9 E3 m9 i; [
  593. char *CRevAppApp::strtok3(char *pSource,char *token); o2 p6 [6 L4 J: w& Q2 J
  594. {( h8 s$ \3 K1 W/ j. t) e" U
  595.   int i;  O" V4 W! \9 v4 I
  596.   char *szRet;
    ! \9 n5 z; C; N: j1 O- {3 i

  597. - Y. V, S6 {; ~# R( N) h
  598.   if(pSource) { itoken=0; sztoken=pSource; }; A0 J" G: G% G6 J& G& B6 \3 T
  599.   if(sztoken)5 _  m( c/ r) }0 \1 ?
  600.   {
    $ T: X4 p3 ~: O
  601.     szRet=&sztoken[itoken];8 ]- D4 I! k5 s+ E( m/ m& }5 t
  602.     while(sztoken[itoken])
    5 s: g4 [3 \. q/ Y! P9 p" C% C" R
  603.     {
    $ Y* P) B3 M" u% @  P. A  l' u
  604.       for(i=0;i<(int)strlen(token);i++)
    . ?; P) y' B: e. W# r+ _, T
  605.       {0 L* @( b. q+ h+ `# H9 J" e) {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( \$ c$ M1 O- _
  607.         {
    + d- E. X7 [9 }, T: z
  608.           sztoken[itoken++]=0;
    ! I1 j! e/ P$ l% X
  609.           sztoken[itoken++]=0;( e, M% W2 v5 D6 d1 z; K
  610.           return szRet;2 }  n8 z- h# w6 n* Z
  611.         }/ N2 e8 _4 \9 q. w* M
  612.       }! {% m0 V+ c0 H3 C+ n
  613.       itoken++;3 L+ K2 p% K+ A8 W; Q* b- }
  614.     }
    9 a" h$ e+ ?9 S: R) j1 c
  615.   }/ B- Z# B$ |$ R+ ?! ]9 j
  616.   return NULL;6 ]0 N( n0 ?1 q3 f
  617. }
    0 X: D# x- X* t# v6 _6 n' r
  618. 1 y  l: X$ G  `
  619. void ProcessProc(long Total,long Current)
    7 A* V: b; i4 h
  620. {
    # x8 o5 \& R& M- f2 m
  621.         MSG msg;4 g1 i6 R6 q% `% @" F" I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 n- r! e- `0 R* p; Y3 i2 J. U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ G, R7 x) F$ X& j% h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) v/ ]3 a$ Z. W) H+ |- f7 A1 y
  625.         {
    ( `4 D# U  R; C$ b3 O
  626.                 if(!GetMessage(&msg,NULL,0,0)): Y! S( G; B' m, l' x
  627.                 {
    ) W8 O( S. j4 a# g/ b
  628.                         return;1 G& u1 C* w  D! t
  629.                 }: t# A" \  {/ h: {" A' d! N& O7 ?- w
  630.                 TranslateMessage(&msg);) z5 ^2 |% d! l( k" [
  631.                 DispatchMessage(&msg);1 [0 X! Y5 ^; V
  632.         }        : H$ K( L7 o9 P$ X+ x/ g
  633. }
    ; ^  q% ?. C2 w% ~/ Y% Y
  634. . R& l- J8 B' h9 ?. j
  635. BOOL bFirstChar=TRUE;- B: I7 c- a  s" D5 w& g
  636. - ?' S9 U( u8 x, s1 N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 U5 D: V0 o! S) p7 y5 k1 E
  638. {% T5 M" P# C- z! p8 g2 H+ p! h
  639.         // TODO: Add your specialized code here and/or call the base class3 `. `9 O! L7 b
  640.   switch(dwProgramState)" s" c3 h! f8 u: g* }6 e
  641.   {
    9 M( u$ F# |' Z* k* z( ^
  642.   case AP_NOTHING:; y% U, R* w# S+ f" X5 z2 P
  643.     switch(dwStartUpSteps). ?$ Z7 c6 r& H% _6 g4 I0 X
  644.     {$ g7 Z" u; v0 o  @: F( ]
  645.     case 1:* {5 M/ g9 |7 u
  646.       {
      B0 o2 X3 ^" G6 X* w* w
  647.         int i;& j0 I& y* y8 ?: u. q/ o
  648.         CDC *pCDC=dlg->GetDC();
    2 X4 w4 f3 q" ^/ N9 P- D! H, n
  649.         HDC hdcwnd=pCDC->m_hDC;
    . N" y; @' o) z1 b( S# T, s4 @1 g
  650. //        Graphics graphics(hdcwnd);
    8 t" D5 L$ F& K, k
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      U( p4 ~% l- _
  652. //        INT iWidth=bitmap.GetWidth();( ?4 p1 Q* {4 f! `5 l% W
  653. //        INT iHeight=bitmap.GetHeight();
    % W/ x: D: d3 m8 y. C! S" T  p: o
  654. //        Color color,colorTemp;/ R* V( t4 w8 J8 i* L& T. X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): ]7 |2 x7 V1 W4 Y5 l3 q$ k
  656. //        {
    1 d7 g2 t& d3 c1 i' J  c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & e2 A+ W0 x$ \5 D
  658. //          {
    6 Y; q+ G5 u+ p1 E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ V8 \. f  z6 H* J3 D1 {
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 @1 w3 d+ i! n) y; `
  661. //              (BYTE)(255*iColumn/iWidth),
    ) E% }3 F' U+ ]) `3 S5 S) ~
  662. //              color.GetRed(),
    % j$ Y6 F: e( E8 c8 o
  663. //              color.GetGreen(),0 T- O# h% y9 i) h
  664. //              color.GetBlue()));! O) Z1 y1 H( |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& z; f9 s# ~) P. U
  666. //          }
    ! W5 d( j9 w  N8 ^. V" @$ C
  667. //        }6 g2 ~- x0 }9 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 k* ?9 |/ S; K- A+ z3 w
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# o5 P% D% O. o7 O3 o1 Y. v) i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ }0 y. h$ x" ?  |6 o4 [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % ~5 [# x5 `# e" b
  672.         for(i=0;i<240;i+=8)/ e& {- j* ]( M4 b" r0 F
  673.         {
    0 e5 k; }, h: w3 c7 |( X( m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & E/ m; _  }' l$ O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! s. G1 ?- T, a/ m) U2 _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 x  h& |' b% Z1 J$ R& V8 [
  677.           Sleep(33);7 A' s: \6 A6 H0 J; G" B4 S. A
  678.         }
    9 D& _+ R  C- z$ a
  679.         Sleep(1000);' a" B  r  B" p) K
  680.         for(i=240;i>0;i-=8)' `1 B6 T( ^2 N- S$ `! G1 q; c" p
  681.         {
    # i" E( T1 O; a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - D( N, x( u; t6 q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 I- E& Q7 T  u, d+ S- F: i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 l6 h) _, r/ J- w# j
  685.           Sleep(33);0 @+ g3 B: @* @) Z- I8 g! z
  686.         }/ z6 D& }8 s- q& C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  e5 Z$ y& _6 k( k" Y  [; O: K
  688.         dlg->ReleaseDC(pCDC);! `- v! J1 F2 W: J8 Q7 W* ^# Y
  689.         DeleteDC(hdctar);# Q& B5 M. Z6 [0 K
  690.         DeleteDC(hdcsrc);
      p# [# C) ?/ Y9 e, y$ l; t4 {- I
  691.         DeleteDC(hdcorg);
    + [& s$ B7 Y) J' C( _9 d+ `
  692.       }
    " H3 J, P. p& V! {, b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; f$ I0 ?$ u6 g3 |& B8 H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 E9 L/ A" a( |8 g( V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ z( Y& X/ ?9 F5 }/ O2 O3 _' Y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 @; ~8 F" u% q1 ^% o; C
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . f1 O( K9 K2 ]* Q
  698.       if(!Dn.Connected())
    2 N$ N, l1 m0 {2 o$ k! R- F5 v  g
  699.       {
    6 y& B: i$ c$ m
  700.         dwTotalFiles=1;& w- f8 M% k8 e8 d) k
  701.         dwDownLoaded=0;
    " l. Q; l1 [& y
  702.         bSilentStep=TRUE;
    , U4 z  L3 Z9 d8 Q' `
  703.         bCompressed=FALSE;
    % e& ^) G2 S  u1 T. l
  704.         strExtLocal.Empty();
    : o# {' p+ b9 }6 r, {; ?( m# m
  705.         strFullName="readme.txt";
    + S+ A2 c5 m% \+ k# e# R6 h/ o1 m
  706.         dwProgramState=AP_CONNECT;
    ! S  c$ c1 u$ x7 d0 j- c4 C
  707.       }  m* n5 H3 x% \1 k  \# o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ G  B  H' D! A
  709.       dwStartUpSteps=2;
    ! H) J) A5 I1 l
  710.       break;
    - V7 X: R- B5 k4 P
  711.     case 2:
    ! V# @& l& z" Y5 h6 [$ l
  712.       {
    # l" m4 W/ c) {5 T! D0 E
  713.         int iEOF;2 F: K: j; M# L
  714.         FILE *fp;% A' ~/ n0 s% D+ J+ e4 z6 ]* b
  715.         char szString[512];
    + R4 h2 W" t9 |; R
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ w, H8 Y# d+ o6 [  V9 e
  717.         if(fp)
    & P* x. u! @$ c3 C1 s1 `. v# R# e
  718.         {/ y3 e! f9 U* E
  719.           do
    0 f+ v$ H1 o& K- J
  720.           {+ F+ W. K0 s' L; [5 t# ]3 i5 e
  721.             iEOF=fscanf(fp,"%s",szString);; V; O6 i5 }$ E/ I# K
  722.             if(strlen(szString))
    ) L' n8 f6 `/ S- W% L
  723.             {
    8 x1 }* {/ `* K3 u
  724.               if(bFirstChar)
    ! D* I! f" @/ S
  725.               {
    $ Q" M$ D) M/ [+ g  [3 c& [' {# G& B
  726.                 bFirstChar=FALSE;6 B) m9 p$ Y; Z4 H& O0 n- v$ [
  727.                 bConnectIsBig5=FALSE;6 y5 V$ r5 u+ e7 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 w% a" N- m8 a8 r/ y( S. M4 ]
  729.               }
    8 d5 ], l. M  g, N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! {. B8 F2 \" R1 S6 c# {: z) d9 p' h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));) ]" h3 V+ N' S
  732.               dlg->m_ListText.AddString(szString);+ E, B/ w' D6 p6 h2 |7 F3 T3 p' [, ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ X, q- W$ c! ?& `
  734.               *szString=0;
    1 R" Y7 U! f5 G: E- p
  735.             }4 E8 ^9 H4 @" f( z: Y- Y
  736.           } while(iEOF!=EOF);
    ) [4 F/ e$ ^' U
  737.           fclose(fp);
    7 Y  K* P$ W( c7 N' c
  738.           unlink(".\\DownLoad\\readme.txt");
      k2 {) P* J# z& A; I
  739.           dwStartUpSteps=3;+ D" A' c  Y9 g
  740.         }& U! y9 ]( Q, N
  741.       }# U" A; S# [9 T1 p$ I
  742.       break;
    # \$ Z0 ]9 ?0 X, |
  743.     case 3:6 O: G. o  c) W% P) K
  744.       if(!Dn.Connected())2 U4 w# L. G2 S2 f# K' l. x" F3 i
  745.       {
    . A# g1 [7 J% h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / Q/ T- j0 }5 k& E
  747.         dwTotalFiles=1;; t6 Y% y" G$ C* k  ]
  748.         dwDownLoaded=0;
    / K6 J/ R1 E# }) l5 M. x
  749.         bSilentStep=TRUE;
    : Q2 v4 k* d+ r/ K
  750.         bCompressed=FALSE;% E* @4 ]6 H* K& T& p
  751.         strExtLocal.Empty();* f; n- J" z" V& z
  752.         strFullName="checkversion.txt";( @6 i1 F' q% t5 W
  753.         dwProgramState=AP_CONNECT;, Q% u/ J) j1 _
  754.       }5 N+ C6 Z, |' s+ j! a% B3 d
  755.       dwStartUpSteps=4;* Y7 A$ O* D4 C# G* k# z. ?. o
  756.       break;
    # a' ]7 W' \* K! e. _# x$ G1 B
  757.     case 4:6 ]/ A, {# u9 @6 r1 [
  758.       {  r- o5 @. p) L0 I
  759.         FILE *fp;+ |# b5 O& p: o( ?: V5 A
  760.         char szString1[128];
    9 B! J6 D3 l0 o3 a% \2 {; W
  761.         char szString2[128];( ?+ k% P, V  z3 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 G" f$ m4 v  `( |
  763.         if(fp)
    9 V2 a/ i: N; }9 t9 h1 }1 q
  764.         {
    " z1 O+ u: M$ s- [
  765.           fscanf(fp,"%s",szString1);
    # `8 `1 y+ ~8 R0 a4 ]! |/ c! |' Q, l
  766.           fclose(fp);# p; i% H) o, ]. @. p
  767.           fCheckVersion=atof(szString1);. @, w9 R' G8 b" a1 a
  768.           fp=fopen(".\\checkversion.dat","r");9 @. W& O& p9 r
  769.           if(fp)$ p- @% d3 R5 E: x3 e3 {
  770.           {4 U; M* w9 k9 H' \6 R# X
  771.             fscanf(fp,"%s",szString2);! n. S. A) z1 I9 A5 H# ^4 A6 V* G
  772.             fclose(fp);  Q; a* D7 }' P, i- r
  773.             if(atof(szString1)!=atof(szString2))
    9 D- |8 n) u) h* Q  g* Q# E4 H
  774.             {
    ! q+ L, G. y, f! r
  775.               if(!Dn.Connected()): ~4 }( h$ B9 u
  776.               {& u: r) N. s9 a3 x9 r: \$ S) }
  777.                 bFirstUpdate=TRUE;
    : H" e8 j7 s; {5 B
  778.                 dwTotalFiles=1;
    & R0 D" q( t) t4 b
  779.                 dwDownLoaded=0;* a( x- q+ D7 q  J* r; E) J
  780.                 bSilentStep=FALSE;4 b3 |# D0 o8 Y' e6 k
  781.                 bCompressed=TRUE;/ i/ b! ]9 O% p" u* Z- N* z; N
  782.                 strExtLocal=".\\DownLoad\";
      m! @, i" `" Q. m
  783.                 strFullName="update.txt";
    , d, M) O- P& n0 x7 t8 h
  784.                 dwProgramState=AP_CONNECT;
    0 A1 ]7 ?$ Q: F+ D9 H2 b1 N! o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 ^& n: v5 _' m: N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! x5 q- t$ D5 T* B: w9 S/ w  b3 I/ n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; }3 `* R% \/ [/ M2 w* u
  788. 7 v/ [' e+ A* Y0 |- R6 J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 w  P/ X( R! Q- {  x
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ H8 I) a% p, Q2 v/ X0 a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' y: @  u% w2 U) Q  q4 W
  792.                 {
    7 B* }( a" p! ]4 `/ s7 G- a  Z2 w
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 S/ [# O6 @1 M6 t: U0 `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 j. f# e, J- @3 ^: J1 n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 z% w2 o; m* u4 Y7 Z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 U/ K2 ~& v* d5 H0 G: o( X

  797. . u2 C% D" d2 \" U2 K  G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * c  J$ l* H2 W( f6 U+ R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 c% h: ?' Z) ?. T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / G/ i% r5 O7 u, u9 E2 {# B
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' }% }  E( W  u3 b0 `& h" W, S  u+ o
  802.                 }' N9 k+ f  @8 Q7 Z8 {# X2 A
  803.                 dwStartUpSteps=5;6 ?$ d% K9 e1 B& v  ~6 U
  804.               }
    + m8 v1 R# v+ O3 W3 Y
  805.             }$ i4 @( X$ [" W3 ^  j
  806.             else9 O9 h/ g6 I  ]( b  q! @
  807.             {
    ! m% d6 L' W& g9 ?
  808.               unlink(".\\DownLoad\\checkversion.txt");+ }/ k' ~/ A1 r2 _9 A. J4 Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 }+ v! O# F0 U; ]( E
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 O% x% p* E: M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " E& _) R' l; o

  812. : C1 _& Q" G( U0 Z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # }  q3 _/ e0 J
  814.               dwStartUpSteps=99;
    ( i! r: @: q" D
  815.               bFinishUpdated=TRUE;
    8 S2 y6 A; X1 Y0 f/ F+ o
  816.               bCanUpdate=TRUE;
    # a; M. F+ @: M
  817.             }6 A4 O4 t! Q9 l6 a! @# D
  818.           }: z  e2 I1 S+ k; w$ s* V( g
  819.           else- h; b0 S& r. {, c3 W3 l% \
  820.           {
    8 M9 Z( N$ L* C3 `3 j% K" F1 ?5 Q
  821.             if(!Dn.Connected())8 h$ O1 ~6 \. z
  822.             {
    3 O( v7 |! c7 A# Z9 `
  823.               bFirstUpdate=TRUE;1 ^+ d6 S; x' s3 P0 C. k
  824.               dwTotalFiles=1;$ G$ C  p5 i9 j' ~6 g: }; [; M
  825.               dwDownLoaded=0;
    7 e! @/ j% {5 p& ?$ a& ~, B
  826.               bSilentStep=FALSE;
    , l0 Q0 }  ?( Y4 @: l  e" ^. R
  827.               bCompressed=TRUE;+ W% g' u5 d; `: e2 J( V2 Y4 H4 o
  828.               strExtLocal=".\\DownLoad\";: ]7 J8 i% U  Q( C2 r
  829.               strFullName="update.txt";
    # F- H8 E1 L: \5 G+ c
  830.               dwProgramState=AP_CONNECT;
    ( O/ P" p0 M( Q  z9 `* U( _4 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ O5 k; g3 x$ B, n, d, O) t8 E# h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# Z6 }) N: X5 C/ I& \, J) f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* ]3 ]; S) d& x* j7 I& r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 x  U; W* d3 q, ]: d
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) b: h0 K! A; t& p) r, I$ u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - f7 }6 L7 y4 o' V) C3 n' ?# P
  837.               {
    2 |  z2 ^4 T( l! {
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");0 d+ g7 D% T! X. g3 Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) K1 ~  T& w! i- U9 c+ _5 _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 @2 M3 T6 f* t  D0 }
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* F" z6 U( u) Z: h: Z2 i
  842.                
    " }% u  ?) {: U$ K; l" J' f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & w# }1 H" W) ~7 X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 u& h" x2 Y- ]0 _' Z6 h1 f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 a# {* a; \3 L* `+ I
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 G) d: R3 @- K9 z3 l0 Q
  847.               }9 z( ^1 x# r& y" x1 f3 J
  848.               dwStartUpSteps=5;* Z* @" G% \' H
  849.             }/ j' t, ^1 e1 ^; q( D5 s5 B
  850.           }: m/ L' ?9 g! X% p9 i! B3 [" ?
  851.         }: M+ Q: j# c) a
  852.         else7 v3 V( L5 u6 {9 r2 D+ B/ k, h) M
  853.         {& q7 ?$ `: g5 k/ D$ Z
  854.           dwStartUpSteps=3;, @- I4 Q* @+ k: K  p
  855.         }
    9 T# O" d  w! A6 T+ y3 c
  856.       }6 F! a% x; S. M1 h
  857.       break;
      }3 s7 P% i9 [( G7 {8 Y6 a4 |2 l
  858.     case 5:6 ]* k( I# G; V# x
  859.       {
    & N( l( G9 }) R% B0 C
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 J# ^$ E" X4 I' w' [
  861.         {
    , |/ n7 K9 N9 k! L' l& P
  862.           int opt_overwrite=1;/ C$ w1 o$ ~& A8 G
  863.           int opt_do_extract_withoutpath=0;' y+ }* |* T" C0 X9 T/ I2 h3 ]
  864.           unzFile uf=NULL;- q3 w4 E1 o1 A7 C' ]
  865. ) |# ?9 S. ]" Y, E* C& E* I
  866.           uf=unzOpen("Wsa.zip");
    # b2 a) Q' P' c; D2 n: D9 C
  867.           if(uf)
    . J  o* ^# T4 H. g) u6 H: L, t+ q
  868.           {
    - p7 y  b$ h: V
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    0 L- @' M. D' ]$ V( \7 q# W3 m( Z
  870.             unzClose(uf);' }8 {! Y* S: C* H' W. L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ a5 V$ S+ k' G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 j  {. m2 b9 z. I1 {
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # D0 Z- O, `2 u; k
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - r' A- m9 l: O, E4 P/ z8 N
  875.           }5 Y' Q1 k( V, ?0 [- J8 J
  876.           DeleteFile("Wsa.zip" );# f5 w6 r: f' ~6 r- p2 K1 n
  877.         }' m9 f* G, G8 U) S
  878. - e/ ]" ^. l* I/ V" @* Y4 }; {
  879.         if(CheckLocalVersion())8 _. I$ [' P* a, ]
  880.         {5 X: v, d: W6 ?+ u! k" R
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    2 P% K9 d5 s# W: b# r' |
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");! k6 y( `/ ?. @2 v- h
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ; t) V$ N+ @# \1 ^  m
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) `2 ]: R6 W+ f, K
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 y2 G4 ?; V$ ~- f4 s5 _! `
  886.           dwStartUpSteps=99;0 ^4 N/ k; n9 M9 {* n  a( |
  887.         }- k$ n4 M: E8 l5 `+ O( h( j
  888.         else: k9 j$ F7 A) Y9 l
  889.         {. z. A: C  w! m0 \0 L: m& ?8 b
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! X* D( m. b) W
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- s" e, j* w& {8 t" o
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");# ]4 H" w+ p, V# D+ d

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

評分

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