找回密碼
 立即注册

CSUpdate.exe源代码

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

! G# Q7 h9 Z" k5 t3 n  A& e, o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & W8 D3 l& R& K8 k
  2. //) F" o) @, q& I7 Z( T
  3. & x. a- ~  ?* M3 N; U- @( Y
  4. #include "stdafx.h"& M; a" i6 ?/ I2 v! l
  5. ! G  R7 ~" ^! F+ A
  6. //#define UNICODE% Q/ S, c$ Z& a$ U) X
  7. //#include <gdiplus.h>8 X0 J: I" ], q. N5 _
  8. //using namespace Gdiplus;0 M: P( g$ O3 {" z
  9. $ s* e5 z" K9 w- X6 ?  I( _! c  c
  10. #include "RevApp.h"% o) s& Z1 C; L2 A* Z
  11. #include "RevAppDlg.h". x. p8 @( o, K% o$ U1 F

  12. 4 n6 }2 n/ }2 Y! j8 `
  13. #pragma warning(disable:4786)% ~' e5 t9 P& i5 `' E
  14. #include <map>
    . @% n0 G+ L1 x* P1 k8 ]
  15. #include <list>2 [1 ^& y) |+ z) M1 y
  16. #include <direct.h>* p; Q  I9 Q( Q: z# b, F
  17. 8 E3 b$ X) K: @4 p; O6 o. g
  18. #ifdef _DEBUG
    3 g+ v! e8 M( \
  19. #define new DEBUG_NEW
    9 |9 O& ~/ c9 ^, ]9 o6 j/ g
  20. #undef THIS_FILE
    7 S/ ?1 X0 }8 ~; w8 m
  21. static char THIS_FILE[] = __FILE__;
    * h0 A: E$ F$ O' a
  22. #endif) s, S* _6 a2 w' G
  23. #include "SkinResDef.h"
    1 S5 h; s$ g4 b2 M# `% s; T
  24. #include "ChangeBG.h". y0 U: w2 k: r
  25. #include "AFXINET.H"
    - Y& a, ?; N8 m  t
  26. 6 J4 c& g  c% |& p' y. j9 G
  27. #define TRADITIONAL_CHINESE 0
    9 P  x9 K- A& i: E2 u# o4 a  b# g
  28. #define SIMPLIFY_CHINESE 1
    2 ~/ }' H8 G: T1 v# |
  29. #define ENGLISH 2
    ' M5 l+ d% w3 ^( f9 w
  30. int m_iLanguage = ENGLISH;% b% h: |+ z3 X3 b& d+ O) B
  31. /////////////////////////////////////////////////////////////////////////////
    4 ?) v) w: [- t) @0 M# l; o& b! Z6 `
  32. // CRevAppApp
    1 I( d1 Y& K5 a+ ^
  33. % j& B% l: k+ \' ?3 F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 R0 M  @' f1 U; V7 ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) A$ K3 N' U$ c8 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( E1 x; _9 X, |; z9 y2 `3 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ p4 T. N) I. B3 m; v9 E4 z
  38.         //}}AFX_MSG4 M) h) P! g) V0 r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% |+ z. L5 C: `3 n% [5 A/ K" {
  40. END_MESSAGE_MAP()
      V# O3 }# L' D: i
  41. & D  S  m) b5 \3 \
  42. /////////////////////////////////////////////////////////////////////////////
    6 U+ j- H$ c" |. W
  43. // CRevAppApp construction
    . U' Y( u2 d0 w: ?% p

  44. 7 W* _' z6 s8 M8 D
  45. CRevAppApp::CRevAppApp()
    . J% U8 u2 r# n4 O
  46. {
    ; K8 H9 _" T; Y2 U! K/ f: x8 V
  47.         // TODO: add construction code here,
    8 _9 C! m; s; V& k
  48.         // Place all significant initialization in InitInstance
    9 J5 J: v0 L* n7 u
  49.   bDisplayIsBig5=FALSE;& N3 n2 v# D9 T  E2 f. q! T2 ?( v8 V% i6 u
  50.   bRestartUpdater=FALSE;
    * ?  i! T& p6 y: }
  51.   bFinishUpdated=FALSE;- g$ H9 i- o) m; w3 ?. _8 B( O" q  v. C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. G6 |/ J% I" G  R. m7 r
  53.   InitChangeDataBig52GBKS();2 ?& _5 G/ q6 W3 S% S
  54.   InitChangeDataGBKS2Big5();- L6 Y* G* W+ u4 J+ p
  55.         //& \# S/ e$ i4 o, d' A$ a
  56.         bClickRunExe = FALSE;9 e. t) t* [/ E. u) ?$ W
  57.         //
    # @0 c7 y( k, J
  58. }" I4 O' d# q9 \- _

  59. 3 n+ ?7 ~$ H% B- Q9 D% j
  60. CRevAppApp::~CRevAppApp()( g8 x9 f1 X/ T+ j, C, [
  61. {
    : I. B7 t) U+ s0 X% w) z8 E
  62.         // TODO: add construction code here,2 h1 y1 y1 w# |4 D
  63.         // Place all significant initialization in InitInstance% n1 [- e  t9 M
  64.   EndChangeData();
    " A" [5 X6 K% p  h' E" {
  65. }
    / I7 x# F3 R2 }$ y  t0 ?& P

  66. ( k8 B5 S/ J$ i9 I% O# |6 O/ v* D
  67. /////////////////////////////////////////////////////////////////////////////
    ' d% J' O% f5 T# T% y1 ]
  68. // The one and only CRevAppApp object
    2 o$ F4 O' J6 h# }
  69. 5 p+ s* c% u, b* i; U' J) O+ |
  70. CRevAppApp theApp;( I$ L! ~/ [" I* j

  71. 5 u; L8 n! ^# \; T6 B* Q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * e9 n9 z' r! ?8 |$ l
  73. {
    : T" g- I& t- K
  74.   int iEOF=0;2 m  b' U6 K5 V+ F
  75.   char szTempName[MAX_PATH];1 x. a" E7 Z) e2 ^* \
  76.   *szFileName=0;
    & a, W  M# N9 o/ p1 g
  77.   iEOF=fscanf(fp,"%s",szTempName);- `7 r* I6 b) o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 E( V1 A9 j$ y; s/ |* x: }
  79.   {
    2 [0 w9 \9 f9 h, f2 z
  80.     strcpy(szFileName,&szTempName[1]);8 o* D6 B6 O0 A1 M# w7 H. a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' `7 f* T# P' T9 N/ M$ p
  82.     {6 V1 s; ~; ]: C) n/ Y- z$ c
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " a, B$ f2 o# d9 w* O
  84.       strcat(szFileName," ");; x# k/ D0 F7 T8 T* n
  85.       strcat(szFileName,szTempName);
    / h/ \4 X! n; Z& O
  86.     }6 i, e  T5 {5 o& @) A
  87.     if(strlen(szFileName)>=1)
    8 g2 B) E$ C% J9 M! r8 C
  88.     {
    : {: `: g0 B  K6 r* n) z# ^7 B  ]& c0 v
  89.       szFileName[strlen(szFileName)-1]=0;* X% H0 y2 M8 ?* w) E7 Y, b
  90.     }
    . {$ i& A$ ?5 H! c
  91.   }0 t' d$ L- S+ o" I% n  c
  92.   return szFileName;# o& s5 T0 C3 x' y3 P! `/ U( J
  93. }
    5 U. K; q7 \6 _
  94. $ L1 v; b5 W+ R) {7 G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) R0 p; X+ D5 Y
  96. {
    # N- J) f) z+ `/ Z) M7 p+ E1 [0 T
  97.   FILE *fp;
      c! g% E# b# \- I6 m* S$ y6 l
  98.   char *key=NULL;+ q+ V2 b  W( K3 b) k) l+ @; k4 V
  99.   char version[MAX_PATH];7 H( T+ t# m# b/ M5 ~0 e) _
  100.   LPUPDATEFILE file,olds;8 F+ k5 }+ j6 {6 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' {1 a" Z3 T) V" @! f

  102. & L. o% R! a7 {, z
  103.   UpdateList.clear();( l' S; B% n7 [2 I* E! D# |  h3 d
  104.   UpdateFile.clear();
    6 v" N: {1 J+ J2 p4 [7 j6 f
  105.   if(GetFileAttributes(filename)==-1) return false;2 Z& m4 \8 \) G$ W
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 {) N7 X9 O* W) t7 |9 B5 f9 I
  107.   fscanf(fp,"%s",version);
    8 ^" o* ]9 H) y2 X4 G* E- v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & M; \4 _: u% W+ f2 q8 o
  109.   while(fscanf(fp,"%s",version)!=EOF)5 k# f. F  m$ i
  110.   {
    % x' H3 B+ y* Z; B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " B0 X' r0 S/ }) G: a( e% Z
  112.     fscanf(fp,"%s",file->path);5 t6 o# q) u" V% y
  113.     ReadFileNames(fp,file->file);" h: J) H3 z- @& e) X+ z6 Q9 O9 g
  114.     strcpy(file->full,".");0 ]0 p; C' R; E
  115.     strcat(file->full,file->path);0 Q7 l* Z% h- s0 F( n9 U% U0 W5 p
  116.     strcat(file->full,file->file);  b4 U; O$ Z/ m* M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 ]; ~0 B3 L' c0 q3 Y9 W$ u
  118.     {0 y8 {& _  o0 q0 B+ X1 ^
  119.       file->vers=(float)atof(version);
    / W4 }% y# o! `* I; S, M' k
  120.       UpdateList.push_back(file->full);2 z5 Q) D) L+ _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    % s/ I1 q3 f" e$ K5 b
  122.     }
    4 b: c7 R, e/ T: a7 p+ ?
  123.     else
    8 j2 }, p6 h0 b% i& f
  124.     {
    ' k+ ^7 N% A7 \
  125.       olds=(*p).second;0 ~* Z, c, g2 ^* k. ]! b
  126.       if(olds->vers<(float)atof(version))) u) v2 v6 f3 Q& `3 `1 {
  127.       {
    4 V; z4 T: w7 P& f- [" J
  128.         olds->vers=(float)atof(version);8 k3 f3 \; L) D0 A# O) h
  129.       }" x' ~) y8 K9 W2 }7 s
  130.       free(file);
    , P8 T7 M2 H5 q# W$ S
  131.     }% D4 z2 Z0 O: S  B7 y( m
  132.   }
    4 A- a# S6 ~+ ~7 O; E1 U
  133.   fclose(fp);) Q. W7 E! x! F' B
  134.   return true;
    ) A! }9 O: L: B8 y0 N+ o* I% T  ?
  135. }# U; Q. j9 `1 Y! Q3 ?( p8 v. V
  136. 3 X9 `/ S: p& ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), c: T+ k5 n+ ~; i1 a! i2 r
  138. {9 f4 S6 `. \" y8 ]8 n0 a
  139.   TCHAR  szFull[MAX_PATH];
    3 s* \" z& s9 W: y6 U
  140.   TCHAR *token,*inter;( N2 N+ p) X8 y5 Q! L) f
  141.   *szPath=0;; ~! u1 B% G' A5 H2 n% ^# X; [
  142.   strcpy(szFull,szFullPath);- K# D4 }$ r9 U8 W
  143.   token=strtok(szFull,"\\/");
    ( n/ G, ], `; p7 c
  144.   inter=token;( g9 Y4 J" U  |4 v7 B
  145.   while(token=strtok(NULL,"\\/"))
    - S/ I+ t7 _2 |: ^9 K
  146.   {+ [9 E( W0 \3 A' {# ?& l4 b- I: B
  147.     strcat(szPath,inter);; ?+ l3 i- N; }2 {& S( g
  148.     strcat(szPath,"\");" K: V9 Z3 B% m: n/ o
  149.     inter=token;. G, N8 l* F7 t4 z6 ^& B" x' Y5 ^
  150.   }
    2 S2 D3 f' J* x# q! s
  151.   return strlen(szPath);1 t; a; K4 Z( K* ~
  152. }
    ( i) _, t0 Y! L4 E5 d7 x5 ~  r

  153. - F6 [$ F% G: o6 e" }: B
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( C7 q( u% l0 Z3 w' i1 W; P* K
  155. {4 b# t3 g* d4 B% w
  156.   DWORD attrib=GetFileAttributes(Target);
    0 m% s$ n9 L  z. \. P, |9 P8 r0 M1 w
  157.   if(attrib!=-1)
    , n/ d0 e0 N4 H' m8 x) z1 E
  158.   {5 V. J) G# _4 w$ K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / f. k2 o  f0 ]: [0 Y( f% T# Y
  160.     {! W/ F5 x7 |- ]6 w; q- i% x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 q' ]& e. L9 A6 m
  162.       SetFileAttributes(Target,attrib);3 x/ P# d$ F, _' m  ^# m) e# }
  163.     }2 a8 H; a3 z0 O& c3 N0 T$ e. B
  164.   }3 B1 p- ]6 q! A2 e# {% k  a+ D0 l* i1 C
  165.   CopyFile(Source,Target,Erase);
      Q9 y8 ]! j/ E9 f- g0 ]
  166. }5 s3 a1 B% J. z$ S  u7 H3 {

  167. 6 q* D( ?9 q3 S& a3 Y" K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : P+ T& o( i2 f0 N; z& A' h9 h& N
  169. {
    8 f4 _: D- d" Z6 u7 c
  170.      FILE *fp;* B6 c3 n: R6 h+ m5 Y" l4 x+ U6 v  \
  171.      char  szBuffer[8192];
    $ E$ |% T2 ~1 f7 k2 B
  172.   va_list  argptr;1 s" U  F+ V! K% j* W

  173. 2 h$ J% i% o- B9 u( Z
  174.         va_start(argptr,message);
      f6 ~2 m2 Y. H# o2 ]' ]
  175.         vsprintf(szBuffer,message,argptr);
    3 V0 P) p  ~! ^4 @1 d
  176.         va_end(argptr);; L  s, _: M$ i5 d- A
  177.   fp=fopen(FileName,"a");: Q5 k5 ~4 H7 T- h8 d; U2 D8 i' k
  178.   if(fp)8 [, }2 d: [  ^5 i! _
  179.   {4 r: s7 E1 ?4 F5 \8 q/ f5 ]
  180.     fprintf(fp,szBuffer);$ k- M. P" l3 n" G
  181.     fclose(fp);: L. o0 ~) K, r
  182.           _flushall();- R( [; \& |; p( j% X0 H
  183.   }
    7 h8 @2 f( E# f
  184. }/ D" j! Z( J, x  f8 X3 J
  185. & N! W& z1 F2 \# e
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 j& t! Z9 K2 H  r# I: E$ y+ A
  187. {
    7 z: N5 K$ h, H5 `5 G% z, m
  188.      FILE *fp;
    ( G8 G7 j, |+ X0 t  N. G+ a1 y1 P( X) O3 z
  189.     DWORD  attrib;, x# w0 l) z0 J& _
  190.   attrib=GetFileAttributes(FileName);5 U! D$ {4 P$ _
  191.   if(attrib!=-1)
    0 H' G# U1 }; E9 w) C
  192.   {
    8 Z- z# Z+ H4 C& K3 s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 B& Z8 g! |3 B+ }. m
  194.     if(!SetFileAttributes(FileName,attrib))" [/ d8 U0 h7 W1 s
  195.     {
    7 ?2 I0 G: c% q) h3 O' i  ^4 P
  196.       return FALSE;
    * U! b6 }9 g# t& e6 S0 l
  197.     }
    8 `+ ]5 j3 @; P) u* j2 V/ o
  198.   }+ x: A: ?% I) k2 o2 Q
  199.   fp=fopen(FileName,"wb");
    : O0 ]* g; K* v2 ?( e- z
  200.   if(fp)
    # D$ n0 I- A$ R, o% J& M$ N
  201.   {
    * o) H8 L. ]+ v
  202.     fclose(fp);
    $ O- ^% [% O6 F
  203.   }4 G/ J. d0 C! J0 k: s, q8 p
  204.   return TRUE;( q2 i  B  _" E; S5 P
  205. }
    ' S+ t+ d& Y# D" P0 S

  206. 6 P4 L) z; N9 u! B9 h
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# J" x0 \- S! Q. ]
  208. {
    * ]1 N! a: s+ h8 \
  209.   char filename[MAX_PATH];+ F9 V5 y% J, h4 S, M
  210.   LPUPDATEFILE file,olds;, `$ E) G$ S& b, U3 Z/ H
  211.   std::map<int,CString>::iterator i;
    8 Y# T; f$ B4 v. G  T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / f0 x; _% A5 g8 a. ^
  213.   std::list<CString>::iterator l;
    & ~$ G% ~, d6 x' w+ J+ ?4 U
  214. 9 i3 o! ]% A: }  T+ a7 J
  215.   if(bFirstUpdate)3 o: p; Y0 Q; i' R0 |6 w
  216.   {
    / ?7 q+ k) Q, w
  217.     dwCurrFile=0;
    - _" b$ ]& E! ?8 R7 k- {9 x) k$ K
  218.     bFirstUpdate=FALSE;3 E; s, Y! ]- ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' G" {1 F6 }% ^
  220.     {: G9 M# o- e3 C% x& j+ k
  221.       dwTotalFiles=UpdateLocal.size();- O; ^' Q5 Q4 a- x9 e
  222.       dwDownLoaded=0;
    5 h/ u6 l% t+ J. _! m  b. E4 t5 L
  223.       bSilentStep=FALSE;' y, _. H' V* ]: `) C6 e  G
  224.       bCompressed=TRUE;: g) A& H5 W1 v1 Y) k
  225.       strExtLocal.Empty();
    & O$ Q) J5 q* X4 [
  226.       strFullName=(*i).second;
    / C6 s) U3 j" M* x7 x: @( g, E: q
  227.       dwProgramState=AP_CONNECT;( y0 O  b  M& V$ e) m- e& o1 h
  228.       return TRUE;
    + q4 L5 d  O( n  J; ~
  229.     }
    " q$ I/ N. n) P: h! q4 M
  230.   }
    , e2 f+ {" [2 y. O9 A
  231.   else if(bRestartUpdater==FALSE)
    - E/ h( [7 p7 x- }
  232.   {
    ( I# E9 F# F! n0 b8 ~1 b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& A9 h& `( l: m4 Y
  234.     {. h2 x. q" W% S$ U: m0 Z5 `! k
  235.       file=(*p).second;
    6 U# G: K# y; B
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* R1 F, D9 e( `2 f
  237.       {
    * @& M0 f' E! {( P% ~
  238.         olds=(*p).second;: L' ~( n, b4 x5 U' s
  239.         olds->vers=file->vers;
    . [! ]! M+ O8 R+ [' S* J5 r0 w4 {
  240.       }, I$ a- A. M( z0 s% x
  241.       else
      c! W% }) o# b/ p
  242.       {/ h. a5 t0 r; M8 V% }8 @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 `: q- [5 M" F8 d$ M0 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ B+ S1 |: `; H% O5 \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 q' e- s) e3 ^: S
  246.       }9 p* S6 `7 d6 Z& h. ]9 z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- ?5 B. H- O: F2 Q( L7 I0 S
  248.       sprintf(filename,"(%s)",file->file);- t" t( i3 X2 @/ p' M/ n
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 F7 |; n5 c4 J: f+ ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  \  B/ c" e* d: ?7 ~. q
  251.     }3 j& |( ^) t% I' u7 G  K* F+ P7 {
  252.     dwCurrFile++;* m8 X3 q% k' y1 q. e' l' W) N' l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  h3 h6 V6 R2 z2 v- j
  254.     {
    $ ?- r; |; {) g/ x
  255.       bSilentStep=FALSE;
    : B- M5 K5 g* e0 P
  256.       bCompressed=TRUE;
    / V8 J* a* ~8 x3 z2 i9 d+ s
  257.       strExtLocal.Empty();
    / T5 b8 K8 f4 C: W( p, m
  258.       strFullName=(*i).second;
    7 j: {$ m) M% N. v# ]
  259.       dwProgramState=AP_CONNECT;
    + U6 S5 W0 l- C0 n4 i
  260.       return TRUE;
    . i0 G: Z8 E% |2 Q
  261.     }
    ' N/ z1 }$ G! z9 i. T
  262.     if(!bRestartUpdater)3 R. r& m& i; m0 Y
  263.     {
    4 @+ E2 l6 N0 J. b( B5 \
  264.       int iCurrSize,iFileSize;
    / s' E$ f0 c" I2 I: B  @- D
  265.       iCurrSize=0;
    4 X6 G: o, S, c! L
  266.       iFileSize=UpdateList2.size();
    % o4 y& o& a- ~' ^6 j' F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " j, |" y) S" q) y5 [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 b0 ^+ }* q# G5 [) n0 c0 Z6 G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ c& h0 X5 {0 ?. W: U. }* p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& L# i( @  l1 h
  271.       Fclearf(".\\update.dat");. j) q" M6 {* G% Q! H4 B$ \
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 q0 o0 q3 w, A$ }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & n, I3 c' R5 {* C, q, ^2 q" \
  274.       {9 [* c' M+ A  r9 y4 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 A. Y- h. t+ j5 H
  276.         {
    5 G& X0 i" M2 k
  277.           file=(*p).second;# n/ E" Z' [! M/ P: ]# k3 ~
  278.           sprintf(filename,"(%s)",file->file);
    6 [: J' D. m8 R4 T: i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - w" L' ]  c# ]2 {' g- O' y) p
  280.           iCurrSize++;
    % m4 Y+ ]; @6 a! S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; c" r2 `+ [1 U7 Z
  282.         }
    6 l2 S$ O+ F) P
  283.       }
    ! ~3 H0 d0 @1 C/ ?3 x  O4 q- M) l, C/ S
  284.       unlink(".\\update.txt");
    ! ~5 r& f  {5 j( z; H
  285.       unlink(".\\update.tmp");
    . ?2 J6 q# K6 q
  286.       Fclearf(".\\checkversion.dat");
    - j( @! c. G$ \( g0 `  S5 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 ?9 \7 m/ B- z. w( M1 \/ o
  288.       if(UpdateLocal.size())
    3 S( ?9 Z* A( {
  289.       {
    - Q+ L, v, P8 k2 v& k
  290.         UpdateLocal.clear();) D, \$ h& }$ p0 e/ \
  291.       }
    / \* y7 G. F" q0 f, W8 M! F- P( d
  292.       if(UpdateFile3.size())
    5 }3 E2 p6 k7 s' b4 e( o
  293.       {3 X% _6 \* r. Y" F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 |: I7 |. G! U( a5 k) J
  295.         {2 L* |5 y7 I3 O3 o2 I7 ~
  296.           file=(*p).second;! Y% i3 A3 M/ L: E) _: m
  297.           free(file);
    $ l7 `! G3 F0 i1 T
  298.         }
    * t5 S  b' J; T( p1 Z/ n6 {; x
  299.         UpdateFile3.clear();
    . J" x. b- e3 U5 m" ^; y
  300.         UpdateList3.clear();
    8 C6 ^9 {3 i* [8 X7 ^% f; T
  301.       }' w. M6 ?" i* ?; l
  302.       if(UpdateFile2.size())
    ! s( p- s8 o1 F; F* v
  303.       {
    8 |/ a& j  Y0 x' r! j0 t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 {6 {1 a( I, @5 y# I, v. D
  305.         {1 L& [3 A; V" R& }" w7 z
  306.           file=(*p).second;
    4 W: g$ P7 E; |0 j- K" Y( k# \
  307.           free(file);
    ! g# O: I( U- Y) L3 f6 b- V7 O
  308.         }8 }2 t7 ]9 h- i9 u- M0 j
  309.         UpdateFile2.clear();9 c! R. v; ~  ?/ p  \5 ?
  310.         UpdateList2.clear();
    0 N( L$ |& D$ s$ }) R
  311.       }
    % u! [/ v6 l  e  T- T6 W) T
  312.       if(UpdateFile1.size())8 |: Z- H9 a0 D+ V3 s
  313.       {* h! @5 S% }' R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 d( b& ^8 X# N
  315.         {% C/ |9 M* i/ b  x, ]: U- b
  316.           file=(*p).second;
    3 A4 A# t, f* X! |4 Y
  317.           free(file);
    6 F% {' G) \2 u. o) D
  318.         }! Y- w9 S1 q  V" Z; ?  X! [$ v
  319.         UpdateFile1.clear();! m6 \3 A" B/ \  G
  320.         UpdateList1.clear();: S. z* C( F, u& W
  321.       }3 |/ J* `  l$ f  p+ _( L$ U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 p. g9 H8 w& r- V
  323.     }
    5 e9 j, O6 C; v  R
  324.   }
    6 h% L* U) _& ]
  325.   return FALSE;
    5 b1 X8 T* _% r3 B
  326. }
    4 U4 m" O/ `# x
  327. ' `" x9 @( s( ^% Y/ b3 E
  328. void CRevAppApp::ClearAll(void)
    5 ]% ~: [: C" g+ b
  329. {; k& V; H7 {- V6 ~
  330.   LPUPDATEFILE file;
    & G0 r2 u0 G  m, d9 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 l; z( e+ b# p7 Q, E

  332. 7 [1 y; Y: P% w7 a% M
  333.   if(UpdateLocal.size())
    $ b, y! R% x2 A% Z5 y
  334.   {1 \. J- s5 j. b. Z- P! a
  335.     UpdateLocal.clear();
    * y& J) G% Z. c1 n$ @8 M
  336.   }: X, c* p- D0 R2 P8 G
  337.   if(UpdateFile3.size())
    + U. x. S% X# U7 S( |2 c
  338.   {2 o9 c2 H! p1 b+ t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 k1 S0 H1 A6 z. t  {2 ^; P
  340.     {
    & H9 V% }1 W. {7 u' z4 c8 w' {
  341.       file=(*p).second;3 c! X) y9 x3 F+ w/ z( i
  342.       free(file);& P( J, q2 u/ s# k0 g% r
  343.     }# J! g5 D/ e) p7 ?" P
  344.     UpdateFile3.clear();
    , x* _5 \' t8 q/ }! j0 l
  345.     UpdateList3.clear();6 X: ~# h4 x3 F3 G, G. D$ ^
  346.   }
    4 x! j6 ?1 f; q& o
  347.   if(UpdateFile2.size())) c" o* O2 k+ ]9 a( s9 f* [
  348.   {
    " g) R5 X/ d$ ?. U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 h. r( y* e) M9 o# Y
  350.     {" U, q+ r7 \0 f7 Y" @& l4 n
  351.       file=(*p).second;2 H4 _& H" p2 Y0 X; V( J5 c) h2 J
  352.       free(file);! v# z) J2 S/ T7 m3 w4 \
  353.     }* o$ |, h3 F: E& j* h
  354.     UpdateFile2.clear();* c' Y( |- s2 m7 f* K) ~) b
  355.     UpdateList2.clear();4 l, Q0 g9 ~5 Y6 b  ?( Y
  356.   }/ H. p2 m1 k9 i. G) q& \
  357.   if(UpdateFile1.size())
    - Y0 q' P5 ]8 l* R6 |
  358.   {* u( o. x5 W+ q& Z" Q3 h$ i; o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 n0 T0 r7 r! s
  360.     {: O: {6 J2 `. V! U  @7 H; v
  361.       file=(*p).second;
    + w. T5 Z7 f1 T0 S4 l& X  J! w9 x1 k. q5 ]
  362.       free(file);
    ) w; r. x) w( a# l
  363.     }8 t+ j6 q+ [) I/ A
  364.     UpdateFile1.clear();2 M, Z( k+ ]; K
  365.     UpdateList1.clear();
      w0 C/ H9 S; q5 ?" Q
  366.   }1 U& ~" C% I. R  S! J
  367. }  
    ! {; f' K- ]3 R8 D6 P
  368.   
    6 Y! r$ V# _' C9 g8 O
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 v( y& W: N2 Y+ D
  370. {2 d% Z  Q- v& j
  371.   int c;
    1 `+ R( r8 N" V) w  @8 a
  372.   LPUPDATEFILE file1,file2;
    . {0 D1 b) c4 M' C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 f+ z" i7 ~9 k
  374.   std::list<CString>::iterator l;
    . ?  M* S. }4 V( H" [
  375. + T& ~+ b* j( h, J- c' W/ w
  376.   UpdateLocal.clear();
    4 P9 `" i; t4 ^8 `: A, p  F$ @, @4 M
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. p0 w4 W- R- {2 X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . e4 V; ~- q# P' `$ j5 z7 t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 V/ |, B, H' z; O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' f3 E: h+ X: ~; F6 `
  381.   if(UpdateFile3.size())9 B2 ^( K$ L. t2 g' j: Y' W
  382.   {
    ( z$ i* |$ P2 p5 R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++): q2 a' E& d$ F+ q. |
  384.     {% ~. u9 E, d" ]: ~7 ?8 n5 O6 `6 W- l# B
  385.       file2=(LPUPDATEFILE)(*i).second;
    # s/ u  Y! N- F1 E0 l* |, C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( V5 ]+ @% f, `: `2 `# a
  387.       {  W* `- g+ h, d8 R$ `5 X' T6 @3 b
  388.         file1=(LPUPDATEFILE)(*p).second;
    " K4 z: M. |' R8 O/ \: e3 `+ a
  389.         file1->vers=file2->vers;$ j# }8 m! l5 s4 p) \
  390.       }" F) h, X$ ~, [  z7 W* x5 W0 i
  391.       else# ]* V6 Q& v, e& p7 x
  392.       {
    0 s1 S/ w0 k% {* O+ s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# W7 ], X- b  ^# h9 B: E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * l  a+ s2 q' U, ^' G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 N" t1 l% ^7 q# z8 r
  396.       }
    - P! L3 ?$ x- I% z; D- u
  397.     }
    9 n5 f  f! e% w9 `
  398.   }) B2 S- s1 s# i& A! i' p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 ]+ G7 W2 W$ i- w; R( A. L
  400.   {
      e3 S, v" f6 B& i: }: V! k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( \  Q( g6 J9 a. N$ v
  402.     {0 @5 c1 C7 C% \( \+ \
  403.       file2=(LPUPDATEFILE)(*i).second;+ r1 w8 x- @( Z  }- M9 I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # G$ I" Y( _/ Y  r: `3 f
  405.       {3 Z$ J* J9 g# q0 D+ {% v
  406.         file1=(LPUPDATEFILE)(*p).second;
    - Y" b+ m3 G- i8 u" ~6 h
  407.         if(file1->vers!=file2->vers): {& W* P' P6 K
  408.         {
    3 p# a- M: |$ k) x
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' `' G4 n; G% m1 h
  410.           c++;, K6 U1 J9 m: b( p
  411.         }8 o6 g& a. z9 U5 g& V$ k5 p0 b
  412.       }
    ; S3 ]2 W0 L8 p+ S4 E
  413.       else, M$ w! z6 n0 b& Q7 n% w. ], I
  414.       {2 g% u" J- F# }4 n; K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 H8 C+ |4 ]9 @& V- R6 [
  416.         c++;6 Q% y! P" z  v/ z8 @  D3 ?2 B
  417.       }
    # K- c* i+ T  \( l+ F
  418.     }4 E) F' m! V+ o, f6 z5 g7 \4 R' k
  419.   }
    : @7 o+ f- @' P4 T
  420.   unlink(".\\DownLoad\\update.txt");
    7 F, y" H6 L/ c3 a
  421.   if(UpdateLocal.size()) return TRUE;0 H! V$ Y. v& ^( I% h. k5 e: z3 ~( @; w
  422.   else                   return FALSE;) J# U# p! \5 p8 x! k
  423. }
      f$ w: S* t, B7 q/ w

  424. $ _0 |" v- A* L8 a  P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 y5 t1 Y: w6 I6 Z7 A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- W6 [0 A6 z: G, X  r
  427.   n# t2 @3 y1 M7 ~3 a7 h0 u

  428. 0 ~, i7 [2 ^" [$ I& l

  429. : q5 K8 Q! q) K
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile); l1 M' _: q/ [9 o: @
  431. {; U4 B0 D% s9 d9 P0 b  U
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 t% U4 x% w9 [7 v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 t0 m, G) {3 l; D: n' K1 |9 x
  434.   {
    ! H$ Q% u% g5 N0 ]! h" w
  435.     char szLanguage[50];
    5 Q6 D2 f* }8 }% e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! E! L. y- t; }3 A* V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 t4 _6 o$ I2 y3 ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - S4 H1 `0 |- B: E; E  X7 v! }
  439.     else                                   m_iLanguage=ENGLISH;
    0 J& i2 J* g" z* W  q5 d
  440.     char szRegister[100];! W; E- C( L4 o
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 I& R! D6 Q5 x5 d, u8 v/ |% x! z$ R
  442.     strRegsName=szRegister;+ i" [9 E# G/ }, ]' \* ^
  443.     char szPatchURL[100];1 ?0 q& D& T' [5 P; G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% v2 z* J6 y' a! p1 _5 I& S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 ]' l/ R- T4 d5 d
  446.   }
    ) [6 U- p3 j; X! ~
  447.   else  ]8 N0 S8 c$ Q2 U" w
  448.   {/ x5 I  z$ @3 D; M2 H# R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 G7 k0 N5 \- [, S
  450.     strRegsName=DEFAULT_REG_URL;
    . K+ Q) A+ q( A! C' T5 u" P( K
  451.   }
    5 c0 z3 }% G& {+ ~( |! ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    # l7 ]2 `2 K8 X9 ?( ]; w9 z
  453.   {
    : }' r( h5 W% ~4 |1 s
  454.     char szIP[50];
    , o9 u2 v3 a% c: T
  455.     char szDIR[300];
    + P3 d; J) w6 S* o' X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      ^& y) m" x+ o# V% X+ D
  457.     {
    % f% ?7 g! `, _) b) O, v6 T1 X% l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( w- k- O: ?# p0 |, y: J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" P# d) i, F7 H4 h% E
  460.       strHostName=szIP;
    ) E/ ]6 X9 f( c4 H1 Z
  461.       strHostPath.Format("/%s",szDIR);7 }2 q$ _: P( v0 l# a6 s4 Z& H
  462.     }
    7 w- c! A9 [- O; n% \0 \8 n" b
  463.     else1 K+ Z: K7 Y: r1 T& R+ t5 G& D
  464.     {8 p3 y' b) w  [9 b. Y7 H2 {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 X9 J: R9 c% ?
  466.       {
    % V3 k1 c6 S- x2 H. {) y$ ?& N
  467.         char szLanguage[50];+ @8 a! j: e7 V. r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: [6 g+ W, h& G9 s& v# t  F
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( _* w+ H/ a# \# y* Y9 U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 W! E$ T6 r5 }6 ~9 M
  471.         else                                   m_iLanguage=ENGLISH;$ }/ D) h! P, ]3 C! E: r
  472.         char szRegister[100];+ K0 Q' y* W( H7 {- |1 Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; l/ q2 D5 z/ M8 F- d" y
  474.         strRegsName=szRegister;9 \) X2 a; g/ \; M9 Y3 m, c
  475.         char szPatchURL[100];
    5 Q+ j( O. A6 z# t8 a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( \! z1 M& c% i) ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + O7 }, j8 A3 K' ?# O. y5 t; Q
  478.       }
    6 @# `8 T, R. C# @6 u
  479.       else
    4 e- e. q; t' a" ?% E3 x
  480.       {
    $ {$ k' L+ r7 p% j. F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * P! y; I- D9 ?1 B$ a$ P, {
  482.         strRegsName=DEFAULT_REG_URL;
    ) h# f9 F* v1 ]0 \4 t9 h- s
  483.       }; c) B* o9 J1 d& O* @! t8 ^
  484.     }
    2 @# }; W0 H! T- U
  485.   }# M2 g2 B3 S/ r
  486.   return true;; R& o. Q0 W2 j2 G; _3 o
  487. }1 N+ \( i: P" D" f! v6 v
  488. 1 M  x. @3 L8 W+ y3 E+ y% L
  489. #include ".\ZLib\unzip.h"8 s/ m; R2 f# c, A) r& h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) e- H- P* M- i9 G
  491. /////////////////////////////////////////////////////////////////////////////
    0 M$ a2 @6 x, p7 K+ b5 _, H
  492. // CRevAppApp initialization
    6 r! Z0 ^2 P2 N+ A1 n
  493. $ k/ q- O3 k/ K" x" o2 C
  494. BOOL CRevAppApp::InitInstance()3 i0 a) C7 A; k
  495. {
    8 H* q% y9 H! P1 f4 H
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 ^! T% T+ `6 }: A
  497. ) p: w2 V" m* J0 r+ C" `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 b5 g0 q# m2 Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 ~7 O9 W7 k5 ^! ?% N) t
  500.   {6 s0 h/ {9 W) e- p
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 w4 D# p+ ?% \  d% p- v2 ]. i" \( I
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* Q3 c5 m# y- Q8 R7 Z6 B7 K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" j0 b) k+ P* p# j
  504.     {
    8 [8 |5 i2 i6 H2 S  }
  505.       strcpy(szPath,szPathTarget);
    # X$ K% P+ @# ^9 K1 {/ @5 {6 n# e
  506.       SetCurrentDirectory(szPath);
    ) o# z( I: M) b& ~, T
  507.     }6 I. ?5 x0 k$ L+ K' T
  508.   }
    " I. T% w. z4 J4 `8 j3 p
  509. #ifdef _DEBUG
    0 {; {4 W! \9 w( H0 d. C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) C, q5 g0 W/ O7 N* p
  511. #else' A- V5 T4 O( A( i* {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 g3 h& U  r7 k" H3 f
  513. #endif5 q4 @( G! i, [) [0 ^1 J
  514.   {
    1 N$ Z; G+ ^  I) R- s5 S7 c) |/ A
  515.     char tempFileName[MAX_PATH];8 Q/ E% y0 a5 m1 p) S! O2 @
  516.     strcpy(tempFileName,szPathSource);) i, K$ E+ O: u# e
  517.     tempFileName[strlen(szPathSource)-12]=0;/ H3 K1 W- p1 f: x8 t5 i* \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 ^  {+ @$ A6 g( U7 w
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);8 ~7 J. S: T/ {1 ^' w- N# p2 r
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 a: D' s2 j9 ~8 t' ^6 b, H% ?$ _
  521.     return TRUE;
    # F! ~, I. O$ h
  522.   }/ {7 Y1 g* _; J: Y+ }# Q+ u* Q
  523.   // Nuke 0118: Delete run.exe4 ?8 g$ {* g# [
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 ]' e) ^# S& {! c! l/ x' n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 j# u8 e7 B- E9 A1 Z# X
  526.   if(!ReadCfgFile("Config.ini"))
    4 v; X9 y7 }9 N2 Q
  527.   {: C7 v' i' Q0 e8 O6 Q1 B8 c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ( ]. {+ R3 v/ B! |3 `; \  p
  529.     return TRUE;2 R  B: n' S  X
  530.   }# l. [) |7 e3 ~1 _9 U1 i. V
  531.   HANDLE mutex;# e- {. V: F' j; J# s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 j- [' l/ i. [! p
  533.   {
      N) z: ~0 d( p6 f/ m" u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # [; }# \2 Y5 J$ Q
  535.     {
    # t8 }2 R, ^# K' S5 f5 W" H& M
  536.       CloseHandle(mutex);
    . M8 k; q; o' D2 G! Q! J, z3 j; k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 u/ N% H4 `* p5 K2 x% M
  538.       return TRUE;7 G- V5 H& i9 s! Q* [. m$ W
  539.     }/ c' `  {  h( m3 a) S/ K
  540.   }  
    5 H3 w5 A7 C0 k1 }) l* e
  541.   CloseHandle(mutex);6 q: S# X$ ~7 t: R

  542. 3 i, V+ @: E6 y, n8 R. ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 p% x( n. M" D3 w0 ~+ Q
  544. * u/ g2 i' I& O0 l0 d2 o
  545.         AfxEnableControlContainer();+ p7 B% S8 k8 V0 A' b6 [) D7 h8 _

  546. & i$ [8 z1 M& l
  547.   bCanUpdate=FALSE;* ^- X# Y6 d2 X9 h* H. r: B5 \
  548.   dwStartUpSteps=1;
    9 K3 {$ F; g" Q7 h
  549.   dwProgramState=AP_NOTHING;( Q- d$ }' H7 Y2 H; L6 ?  G

  550. ; Y) O* v/ m' e$ [# Q( b6 O9 M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 s1 ~3 F- n5 U. m8 T, D2 W

  552. 2 j1 x1 j: `5 F" e9 d) Q4 f' T
  553.         // Standard initialization
    * q: \) T2 ^+ `# R/ K
  554.         // If you are not using these features and wish to reduce the size  [2 n% z) j/ E, i" F, s6 v% y
  555.         //  of your final executable, you should remove from the following
    . F" Z4 ^5 x9 F8 u2 `1 K2 ?: A
  556.         //  the specific initialization routines you do not need.& H- X- p2 l& j3 a
  557. # n! F# C* [- g
  558. #ifdef _AFXDLL  c/ k7 J& h. [$ n* d' i3 {" v  Z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! M2 R9 L( e1 F& h& d8 s
  560. #else. d" ?' v5 o" y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 q) k$ A7 J9 ?5 o" [# F
  562. #endif; K8 g8 z* K7 p7 E3 u4 F- r
  563. ; t6 k3 }( r+ `5 `7 ]
  564.   dlg=new CRevAppDlg;
    ) Y& J- Q5 Z& U4 w% C5 h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 o* ~* G+ _% Z6 ?0 t) ]# A! T  R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : H6 q& S. k8 O, N  d# a" f* K, e9 N6 m
  567.   m_pMainWnd=dlg;, L2 G, _( D* P4 m8 m
  568. / r- x$ G5 z/ `8 c9 i  E' |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. T7 s/ E2 l4 K2 ^- D7 i- a
  570. 4 R: k" g. Y# |  [. `9 I; j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / x0 Z/ T  l1 h% o
  572. //  ULONG_PTR gdiplusToken;
    4 H. p. n$ s# L5 K- }$ I! D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( Q, W. z$ M, h& u

  574. 8 K, {* R3 s  s( t* s
  575. //        CRevAppDlg dlg;
      j& G3 Z0 q, ]$ _4 V
  576. //        int nResponse = dlg.DoModal();  m* M- w7 l$ V+ \
  577. //        if (nResponse == IDOK)
    7 V' J# ~6 }$ U5 Z8 W
  578. //        {
    - B. y  B3 T- T+ J  G
  579. //                // TODO: Place code here to handle when the dialog is
      b; N' s. m# e' \9 T; e! b- ]4 G
  580. //                //  dismissed with OK
    2 V5 R; A) o3 Q; b3 m$ L
  581. //        }
    . P8 x8 p" F+ s
  582. //        else if (nResponse == IDCANCEL)
    ! H/ V% p6 G9 n0 {( F
  583. //        {- f( D' r  a6 P: e9 r+ G) Z: }1 \
  584. //                // TODO: Place code here to handle when the dialog is. w/ a8 Y. r( `3 e  r
  585. //                //  dismissed with Cancel& t# m! K' k8 S6 a: ]! d
  586. //        }0 }5 T7 @4 m- q3 Q
  587. , g/ b+ t% A! g! Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the: E7 B7 E$ y6 j; @# d. B  Z9 \8 y' N
  589.         //  application, rather than start the application's message pump.$ {, L! i' ?& R# ~6 i
  590.         return TRUE;
    . X, J& Z1 b# Z$ F
  591. }
      v& H; u1 {& q

  592. / K# b+ ~, K5 P0 x, z, |
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* R3 f0 M7 Z% {
  594. {
    : [, K* g. p; G% o
  595.   int i;+ V0 }5 a& `8 ]% ~" R" q. b* ^
  596.   char *szRet;3 F' d) x  Q/ p& {" _
  597. ! l  A  E% V, T
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 W6 z3 e- B% A! i
  599.   if(sztoken)
    , R8 d" \- G. o) X- G2 g
  600.   {
    . v6 W& W+ M' e. y( U
  601.     szRet=&sztoken[itoken];2 B. H& c$ S7 N' C9 d6 ?" t
  602.     while(sztoken[itoken])* n* V" D# a2 i( P9 Q2 _; u
  603.     {- y, v4 D" r6 Z
  604.       for(i=0;i<(int)strlen(token);i++): B8 e% \0 m' p) |
  605.       {/ W& S+ Z- Z" e; Q  Q; j1 E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% M& Z. M# _, y4 R/ _
  607.         {6 ^) O3 L) \1 D& _, v; b" s1 J2 U2 U
  608.           sztoken[itoken++]=0;
    9 i% f, t) J/ S, m9 W1 U1 c" \+ y. S
  609.           sztoken[itoken++]=0;
    " {+ H9 \- S/ s& ?2 v
  610.           return szRet;
    ) w* _2 M' e  l/ B$ I
  611.         }8 v+ l! J% [" f5 ^" I% [- y  `. ]
  612.       }% K2 y& `/ A, i! z
  613.       itoken++;3 L% l* \9 z' [5 {) a; D
  614.     }  g% R) S# j3 E+ p5 X% c% g% ~- V
  615.   }
    - d5 X6 `5 Y' M+ S: R
  616.   return NULL;5 Q8 {- a) `3 Z; D0 [# A/ K# K7 f
  617. }
    % O* W# [9 H4 n; O
  618. ; e5 l, f: Y$ p+ E. C1 A
  619. void ProcessProc(long Total,long Current)+ g* C5 K1 q' i  t  c& T& A- B
  620. {
    + f; a0 g! U% i- K: Q/ n
  621.         MSG msg;
    " P2 ~: R* |; d" v1 T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 M: a* L1 Z$ o9 W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " X6 g+ m( }* R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! t& F1 H7 u, x  \; ?( _
  625.         {
    / J) Q7 K( |& `. t& j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : O8 }1 m$ R3 H* Y! n1 g
  627.                 {
    * O5 f  a6 O  I8 `$ E
  628.                         return;. L: h7 b- j7 S4 m
  629.                 }8 w8 s' x0 a  R+ o& }1 _4 L
  630.                 TranslateMessage(&msg);* `+ k# x' j  _/ ?% Y( X
  631.                 DispatchMessage(&msg);
    1 s' N1 ?; m  S
  632.         }        ; G) Q) F: W0 v3 U$ U! h; Z
  633. }- _, ~: p% C9 x8 _9 ^7 x+ F
  634. 5 S8 L, N( r5 m* S; h
  635. BOOL bFirstChar=TRUE;& ^# c( G! _- Y
  636. ; F% h6 k5 j; C. N2 q5 ~
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 O" k- a# s" j9 V
  638. {) }3 r$ ]: _  t' ]8 K, T6 r
  639.         // TODO: Add your specialized code here and/or call the base class
    ; A9 E, M( n, e) z' E
  640.   switch(dwProgramState)
    2 ~8 D( {2 G- ]& q2 Q( p
  641.   {
    2 p# y7 C5 \* y8 W7 J
  642.   case AP_NOTHING:
    . ], F4 Z  B* l- l' D0 U# Z4 E
  643.     switch(dwStartUpSteps)
    * I+ D: A; S2 p! n& d" t$ j8 `
  644.     {- x& ]5 _7 S# M: [, D
  645.     case 1:
    8 n! l2 ^; I# L! I8 y% ~2 }
  646.       {
    9 H7 q8 S- ^& E) q
  647.         int i;
    + l1 N% {8 `7 [1 \1 a9 Q, P
  648.         CDC *pCDC=dlg->GetDC();
    , G0 z9 v! A" \2 p
  649.         HDC hdcwnd=pCDC->m_hDC;
    % |+ P5 ]# L8 w. ~& l
  650. //        Graphics graphics(hdcwnd);% G8 P' T( F" o& o9 _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; w/ P, I+ g; q) ~1 m8 I
  652. //        INT iWidth=bitmap.GetWidth();; X3 _$ Y0 {- D* R8 v4 ~6 Q' `" w
  653. //        INT iHeight=bitmap.GetHeight();# N9 i% n! T5 F+ K
  654. //        Color color,colorTemp;
    . ~8 _/ D5 Y# ^" n) i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) D7 {5 b: a8 X  ?6 s
  656. //        {; S/ H* w2 P: F$ T! \6 F& B' [. Q0 R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ ]  ^! Z9 [, r) V. a( p" x) l; l0 f
  658. //          {+ V1 h* ?  N1 X: ~6 ~) Q7 }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 g  r! m' Z: {
  660. //            colorTemp.SetValue(color.MakeARGB(( {- ~& D% V& E: @2 Z
  661. //              (BYTE)(255*iColumn/iWidth),4 h7 a1 d. g5 x- q8 |) s$ e9 T
  662. //              color.GetRed(),' `, S$ K  Y$ K# r( Z
  663. //              color.GetGreen(),6 h3 X6 t8 d1 b$ Y  c
  664. //              color.GetBlue()));
    ; |# j5 n/ P; P$ k5 x9 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& _7 x7 s0 M- ]5 |, P, m, s/ {
  666. //          }
    4 a, u8 f* h0 t, ]5 H$ j+ e
  667. //        }
    " o0 K, i* r& Q+ `2 n/ v* W# k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" Q2 P) T" v- g5 A' l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 p+ ~- s4 |: M& k
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 F: |% K, v2 J7 g7 ^# O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ B# n0 k$ y; G/ [
  672.         for(i=0;i<240;i+=8)
    $ f% s, _% N# N) J  ^+ T* b2 _$ e
  673.         {1 D/ g) k' u# S3 j& @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- D( t. M5 p3 {; M6 Q  s! K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 `6 h3 M; V9 L, h1 m, \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 y" P! l8 E* ~& B5 N0 u! ~
  677.           Sleep(33);. F! ]3 V5 W4 k3 A
  678.         }* m# B: X; C5 b1 s# e1 i& F3 ?: X
  679.         Sleep(1000);
    4 C! Z) c& w. J' s1 a3 V% w. @, {" H
  680.         for(i=240;i>0;i-=8)1 N8 Z/ i$ h7 R. J( A
  681.         {
    ) r" l3 d' ?- L3 |, `/ d5 a( D3 [" n
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " V% v/ q% n; G- |9 h$ c5 I6 [) G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# U$ T! J& _7 e9 f* e$ e; r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % n) v, z, s' g- f% y5 _+ f6 x
  685.           Sleep(33);6 V. \; S, @, v
  686.         }$ n% B" @' @1 R4 P' Y2 I( u8 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  k( o2 G$ w: Y( X: i5 v) N9 R
  688.         dlg->ReleaseDC(pCDC);+ _2 I! j9 L1 w! x; X/ {& Y
  689.         DeleteDC(hdctar);" r7 R" N) i9 [+ G
  690.         DeleteDC(hdcsrc);
      _6 X; ?; M8 [2 a: _8 I2 X$ \
  691.         DeleteDC(hdcorg);, a+ C: G6 k- j& k, X+ q0 b
  692.       }
    ; s2 N& T3 E4 U/ d3 I
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - ?, ]; B. Q5 J- M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: q+ s# d& l: P7 u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 S. H3 E! c' Q; \3 O) _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . v, n2 `% B6 k9 O7 X, K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( n! Y+ f" P' F+ c9 E' ?
  698.       if(!Dn.Connected())
    . L5 l, @! O. E% {3 Q5 R4 H7 w, o
  699.       {
    8 z$ Z" G0 Y) h  W; B& r. D
  700.         dwTotalFiles=1;
    1 t0 U$ G$ Y9 s$ c& D7 j
  701.         dwDownLoaded=0;6 o& V) P9 v. N' m
  702.         bSilentStep=TRUE;
    % b' j& H/ h- B
  703.         bCompressed=FALSE;5 @+ g; h0 @& b# I/ ~7 i
  704.         strExtLocal.Empty();3 l' Z6 E6 r% F6 F' l9 V( X) C
  705.         strFullName="readme.txt";
    6 P( K" o3 S9 d
  706.         dwProgramState=AP_CONNECT;8 T+ U0 [: k$ k. d5 p) I# n  @
  707.       }
    2 Z9 u$ D: a5 L" `% i% i6 ]; y3 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( }8 c  L. J3 e# C1 q% o5 u6 Z/ X
  709.       dwStartUpSteps=2;
    & H7 j  @, s5 t/ ^1 e; e( u
  710.       break;
    ; j/ Z& [8 L5 g7 ^3 u7 {' j" M, A
  711.     case 2:
    ' }$ ]7 Z. m4 H, ?# A1 y
  712.       {7 v0 |0 h; T; v6 n! T, o" x- k
  713.         int iEOF;1 \# F" e3 p2 W5 V
  714.         FILE *fp;  l8 Z' t, t" R/ ~8 G
  715.         char szString[512];6 ?4 d" }1 L7 o# D: p' [9 w# H
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & n7 N" H. ^; E' P+ v9 c4 d
  717.         if(fp)1 X6 T% x$ B9 q" i7 c' L) l) |
  718.         {5 w- N! R) D1 M, Z6 A; \
  719.           do
    * W: z' c- n% n3 m  f/ b
  720.           {' W' G/ Z0 g# y8 ^$ ?
  721.             iEOF=fscanf(fp,"%s",szString);+ v$ H$ Y5 d1 ?8 ~# ^' D
  722.             if(strlen(szString))0 P% e6 Y$ ~& y( c- K+ C, B
  723.             {6 X" l8 g4 S% H  [, v- \/ S8 x7 e
  724.               if(bFirstChar)
    . d' M0 S4 D8 F
  725.               {$ ^3 z5 G& j8 `3 ]8 D" U$ o
  726.                 bFirstChar=FALSE;
    + o4 ~/ l3 r: a! T8 i& {
  727.                 bConnectIsBig5=FALSE;' r2 B9 _% q$ x4 H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " e7 x9 ?8 Q: f+ }7 G0 i8 J
  729.               }( e3 I8 m- H! W1 c/ \5 |0 }/ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; j. L  D5 ^3 w1 y' h  D5 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    4 k) ^8 w2 J8 Y2 b. V& Z
  732.               dlg->m_ListText.AddString(szString);4 ?. w9 ^3 \( V4 J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. P8 T7 C8 E: D. J
  734.               *szString=0;
    % {! o$ w  E0 c! o: ^2 w, c
  735.             }
    ( F$ N! @' N3 y' z6 ^
  736.           } while(iEOF!=EOF);/ I7 J+ k, l$ Z) I4 }
  737.           fclose(fp);
    5 j5 \$ H2 ~* x, T" H7 R" k
  738.           unlink(".\\DownLoad\\readme.txt");
    # |& }* t$ B8 q& g3 m8 d" u+ D
  739.           dwStartUpSteps=3;( G- A2 k4 C+ ^5 Q
  740.         }
    ' y; X( Y! ^2 Z" @# c3 `
  741.       }0 _  ^. t: d! K" V7 ~. A
  742.       break;, E8 J1 S9 ?, h/ h( E/ ~
  743.     case 3:
    - O& E0 s2 A# L7 P7 G0 `+ O
  744.       if(!Dn.Connected())" i# [6 ^/ R5 A& Z* m6 @
  745.       {
    2 I! D( y  S, \$ N: }- ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ' e; V9 {  U; ]9 \
  747.         dwTotalFiles=1;
    4 |! P( t% q* F& K- J
  748.         dwDownLoaded=0;
    % r; D- w7 ]* e7 y' Z
  749.         bSilentStep=TRUE;5 F* W2 f, ^  L. a! U" Z
  750.         bCompressed=FALSE;
    6 |# m. k0 ^( Y  h
  751.         strExtLocal.Empty();* Y; J. Y: `9 q) d! G
  752.         strFullName="checkversion.txt";" b" X: m# p1 s: q- P
  753.         dwProgramState=AP_CONNECT;
    : v1 m, H% A" f- [
  754.       }
    0 F+ p% O1 C2 p# ]
  755.       dwStartUpSteps=4;
    & _& a, C# g# I8 U" v! H# r5 t
  756.       break;
    - I! v3 Q3 X( v
  757.     case 4:
    8 d! t* ^5 L% w  l- Z7 @
  758.       {+ h' u. G- _4 s
  759.         FILE *fp;1 r- y4 @7 R* Y- H; }% N
  760.         char szString1[128];. S( o/ K* k' ?3 \. l( f
  761.         char szString2[128];0 n4 n+ {+ z" o2 Y' q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 A# g$ ]6 c% j4 Z9 [& q# v- K  z
  763.         if(fp)
    ) [6 G' @& G! t5 u7 J1 w
  764.         {
    0 x; V; ]+ P  L7 a# Z
  765.           fscanf(fp,"%s",szString1);1 `# g1 ^9 Z* I: D0 w0 @
  766.           fclose(fp);1 u9 T8 l# g$ P# T! Z
  767.           fCheckVersion=atof(szString1);' O9 O7 |3 `8 w9 p+ i# h. W
  768.           fp=fopen(".\\checkversion.dat","r");
    # }* R' P# D8 I6 B' t# Z( G
  769.           if(fp)
    $ Y% N( q* A3 B# j6 N; r1 x5 ~
  770.           {
    5 B8 F3 A, `- k7 ^
  771.             fscanf(fp,"%s",szString2);
    / Q6 b4 K8 }  A( z' g
  772.             fclose(fp);
    $ t& ?1 Q. I/ `" s
  773.             if(atof(szString1)!=atof(szString2))8 O8 ~- l' z2 d; |2 f
  774.             {
    6 I0 ?: t' ?; S1 b" ^: k: I5 |/ H
  775.               if(!Dn.Connected())7 V. t4 p2 P$ n  Q, x4 _9 L
  776.               {3 U8 c: P! d6 Y  F
  777.                 bFirstUpdate=TRUE;
    " a! g9 ~$ z) t! C9 z1 R0 _
  778.                 dwTotalFiles=1;% a& ]" v) ~& E* `% Z7 z2 i; L
  779.                 dwDownLoaded=0;
    9 {5 z/ @( H" ^
  780.                 bSilentStep=FALSE;
    $ N# ]" D- f% I  C& D; S% W  L
  781.                 bCompressed=TRUE;! G. q* Z; z- ~' x
  782.                 strExtLocal=".\\DownLoad\";8 U- A3 P) V: r$ k' A+ \0 N
  783.                 strFullName="update.txt";
    0 {: f: {/ q+ R7 q4 K4 T) y
  784.                 dwProgramState=AP_CONNECT;
    / {+ S1 A1 Q: i" A9 r* a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 S2 Z+ F) s$ q6 u. [. g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  c6 k" I  T- I+ @8 x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) V9 W' ~: D7 M. T! m& `/ ]1 w* x% V. ~
  788. 1 P4 x1 V( D' m" D4 l6 W8 ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 ]6 p# m8 `* V
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) w8 j+ R  L6 T9 N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 n  P" l" h* U6 L6 W) [- P2 s
  792.                 {! d3 L4 `7 M0 f1 g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( _1 E( O" T9 [; O+ p5 ]0 _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ N# S* ?8 c: d' b& J0 B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % c8 H0 c& K5 |% N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " {" M! k- |# L

  797. & w2 ^1 I+ e: i4 a% `8 ^5 |( t+ h5 V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      c# n8 s" g, r) _9 q+ T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; E: G1 S/ \% {1 K: @! `/ F7 @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 R/ [: s9 ^3 V0 w7 o0 V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- i7 D& {/ N3 y
  802.                 }2 q$ L& R* [, Z; g  w& ~
  803.                 dwStartUpSteps=5;6 Z5 r& W/ K  b1 ]/ x: \
  804.               }0 v3 S& B9 t. @! E  Q  J* a
  805.             }% R( O1 k( u5 s5 Y
  806.             else
    + Z/ Y; {; E3 T5 B6 T+ ^
  807.             {
    # R" t( p/ n# w1 {: E
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - D& `& H/ v$ [5 O) s& w* n
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : x% o3 M, G! r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& U; K9 D2 d- l% P3 t) X9 ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# ?1 i# \9 V8 \4 J2 b7 m. g* f5 \; j

  812. 4 Z6 y. V/ x' P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 L2 o. M4 k4 H0 W2 K6 z5 q- {
  814.               dwStartUpSteps=99;
    3 H3 n& S) @$ w' T; y+ h& V
  815.               bFinishUpdated=TRUE;* K& `& V( S; Z$ p6 d/ h0 G
  816.               bCanUpdate=TRUE;
    , u) j+ [& h. u/ V5 E2 m9 L2 D4 D
  817.             }
    % \& _# C9 a# X  |. k; E
  818.           }- w  X$ V9 N8 E) _6 U
  819.           else
    + P0 F7 P2 h; M, d8 y! p' j
  820.           {
    ) _: J  Y( j: [) D2 \/ V/ x
  821.             if(!Dn.Connected())
    / R8 h' q4 r/ _2 ~1 S& P* x
  822.             {
    ! {! H" X) d7 H# @& e) N
  823.               bFirstUpdate=TRUE;; Z% ?0 [, w( J) _
  824.               dwTotalFiles=1;
    # \8 \4 E! x# N4 f( b
  825.               dwDownLoaded=0;
    # |4 `' r0 W$ m4 r
  826.               bSilentStep=FALSE;! R+ l$ h) f+ M5 O# {0 N5 j
  827.               bCompressed=TRUE;
    ; R' k3 V  j8 G5 U9 J+ Y+ j1 V
  828.               strExtLocal=".\\DownLoad\";
    $ {; ?( L$ U1 g6 ~3 m% {  _2 S% Y5 }
  829.               strFullName="update.txt";) k' O( v6 j7 d* j$ X0 w# A
  830.               dwProgramState=AP_CONNECT;, s1 s% m8 z; Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 W2 l+ h: j' S1 e* i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 ~4 Y8 {9 V/ d/ a8 z& Z5 y; {3 [
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ n# }+ p) t  H" G/ ^; o6 o
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 i& I9 n/ h6 w. Y5 y
  835.               unlink(".\\DownLoad\\checkversion.txt");8 q% h  ]* J" N( B$ @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( h/ ^% `  o% t' M
  837.               {
    2 L5 N) y) f$ c% J
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, U: ~! f# b9 q. k( \( s! X1 J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % S" g1 d( w% n: p- |+ M& e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- [: R. p. ~. @+ ~
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 H* U. t  j/ q! \$ R% n# S7 R! u4 K
  842.                
    ' k! ^7 f. J) P& P9 k' Q: H/ B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) T* b& Q7 @- K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' Q3 r3 k# E" W0 Q" ]8 T: b/ \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - c' j) F- |. M3 y) f" s' d
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 G( E& x  c  T2 ?: m
  847.               }
    8 u: [% @2 r4 r. @
  848.               dwStartUpSteps=5;2 V* O9 n# f* q$ N! N
  849.             }
    9 k2 H% Y0 F+ P6 \- \
  850.           }1 B7 b8 `) b6 j) `3 e6 _$ j  A
  851.         }; M# j$ I: F7 H8 o$ M. y
  852.         else
      j3 y( s. b5 w
  853.         {2 [/ ~) H4 Q$ ^( z% ^$ U
  854.           dwStartUpSteps=3;# D  R( T( d" L$ I6 w: [" n
  855.         }3 f3 N. L6 S7 s9 P$ M
  856.       }. A, a! h/ e& b5 C" M" j  J# C
  857.       break;' L# A  _* A9 U
  858.     case 5:3 l/ u' G* c$ B- [- W6 `0 x- r; b
  859.       {7 A- T4 r% w" s4 J, I2 Y. Y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). N. P" V. @' |* `- M
  861.         {2 S- e. F. i0 q4 ?+ `, i& l
  862.           int opt_overwrite=1;
    , u/ K7 h% h6 i
  863.           int opt_do_extract_withoutpath=0;% \1 O; `5 @# ?  V: ?( q2 V
  864.           unzFile uf=NULL;
    ) M7 H& F7 D# n( G% h4 O: q" A, H
  865. 9 P$ ?! r, ]# V: ]# J7 |% L
  866.           uf=unzOpen("Wsa.zip");
    5 v/ L5 y! {; }+ i0 y- W4 A0 s
  867.           if(uf)4 a# g+ m# W) Q( m8 V
  868.           {7 T) N+ H. @3 R9 B; U7 R, \
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 `- a1 ~: q& c9 X0 q
  870.             unzClose(uf);
    3 L! K% ^4 q  A3 x" O5 Y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");( b5 w1 L6 d$ ~/ t/ V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");/ K) `& N8 `0 z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ m, r$ S: W  g7 F! L8 P( E0 G) n! D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ U9 y5 v9 {0 ?3 f5 k, j7 H
  875.           }  _7 l5 w6 h- `5 Q6 g
  876.           DeleteFile("Wsa.zip" );' n& b9 a, U3 Y: U" Z! X
  877.         }5 ?, u$ q1 A9 i/ J
  878. 5 c+ x3 i. V8 A) m
  879.         if(CheckLocalVersion())# `3 }7 {2 ?7 V( o  @/ T
  880.         {
    0 m) G) q* _( l3 b' i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! u* k% A% a0 y2 }
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");& Q, S, y5 v" Z8 f
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");& [' ]" F. Q' J' \1 \# d& z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % d5 a, Z# H; _& M" [/ y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    $ s( G$ G$ q$ k" ^: L1 Y- m4 r  y) b
  886.           dwStartUpSteps=99;: b+ K0 l* g( j  g2 F& O8 ?0 Z
  887.         }
    2 I& l0 O: H8 e6 G# H. l0 F) v; l% V7 i
  888.         else2 b; [  d6 A! q+ C: R
  889.         {
    ' K1 l; j) N3 c# T2 [
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + f+ U, ]: A  a# h' f2 Y/ Y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 _8 ?, h3 k7 y4 `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + V( G$ ~: K1 s; O- C! g  h+ J0 b( C

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

' k3 L5 c% U1 ]/ {# k  ~

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2025-12-19 10:09

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表