CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
  \6 m( P3 {& S; x& R  k
  1. / RevApp.cpp : Defines the class behaviors for the application." Y5 F6 p7 w9 p" u0 m  X9 ?
  2. //5 s5 ]# H4 D/ n7 M% v

  3. ! c3 a( A  }& ]. C* ~. M
  4. #include "stdafx.h"$ O( E" S, v! D" k# Q

  5.   g0 O+ V& g9 ?
  6. //#define UNICODE! I& a& t0 d* U/ d/ j
  7. //#include <gdiplus.h>+ Z8 C) n4 z  \+ h  |7 J
  8. //using namespace Gdiplus;
    6 b# b: h/ C# a# u# n4 ~

  9. 6 h0 [: w1 u! W" @" q2 h" n* R: M+ f, s
  10. #include "RevApp.h"
    ' K  p( v) Z5 S3 G6 _0 F
  11. #include "RevAppDlg.h"
    - @& P: ]/ N) b: Y" [
  12. / r0 O- _9 o8 s! I; [. G3 w
  13. #pragma warning(disable:4786)3 R! V! P  s2 T0 j1 }, b/ Q/ @
  14. #include <map>
    % k2 c2 |& _* r" v4 |7 B
  15. #include <list>  e" ?' S9 _! c+ D. Q- z; \
  16. #include <direct.h>
    $ g, [7 I* G, Y0 L

  17. % q' x/ t& y8 r9 ]4 ]. t4 k$ \
  18. #ifdef _DEBUG; a0 Q& s- [3 f4 T: @) l
  19. #define new DEBUG_NEW& z$ k0 {3 x$ N5 [# o8 l
  20. #undef THIS_FILE" s; p5 E8 Q7 s( s5 {
  21. static char THIS_FILE[] = __FILE__;# ]" W. _+ l9 [* y0 z( U
  22. #endif/ o( p9 N! {& w+ p7 G
  23. #include "SkinResDef.h"6 [& D& M1 h) g! R8 H" n3 q
  24. #include "ChangeBG.h"
    , w! k( S) |: i) u. Q% Q  O- h
  25. #include "AFXINET.H"
    . d1 l5 n2 c6 Z# `

  26. - Y$ z* u. r6 s* v2 c$ ^
  27. #define TRADITIONAL_CHINESE 0& a) M, Q( B% q% W
  28. #define SIMPLIFY_CHINESE 1! W6 f+ N+ ^+ ~, n; o; b
  29. #define ENGLISH 2
    9 Y- K' U# B0 p* ^; q' S( F. M
  30. int m_iLanguage = ENGLISH;
    ; g3 N; Q! i# G6 Z
  31. /////////////////////////////////////////////////////////////////////////////
    + u  P( I6 J' T, j
  32. // CRevAppApp
    ' U+ g0 j' u1 L, s, I" Z$ f
  33. 9 v2 M6 R3 ]; F' f/ x! N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& |- r+ W/ j6 }) l$ I
  35.         //{{AFX_MSG_MAP(CRevAppApp)* Y6 r9 P* Q, P, V1 A8 n6 ?* c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' A6 A2 |, |2 W5 Z% g
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( G" N$ @# q$ j- S: R8 B4 W. B7 B
  38.         //}}AFX_MSG
    7 t- H0 n8 t3 C! n% @2 i: {6 M9 Y9 }* u% E
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 g6 g0 l7 c' p9 r
  40. END_MESSAGE_MAP()
    4 q. b  d' n9 H2 E4 K; x

  41. ( R6 }# b# k* K% H' H
  42. /////////////////////////////////////////////////////////////////////////////
    % P+ D8 X- g2 ?7 E$ s9 Z$ J
  43. // CRevAppApp construction
    9 s/ I# j( q9 y" o: \8 ]- A. k( N8 Y+ d

  44. ( ?& P, `7 U  m; x
  45. CRevAppApp::CRevAppApp()
    ' ?) O7 Z1 }& G) s8 F  W
  46. {
    ! v8 @. E( k0 T1 s- I
  47.         // TODO: add construction code here,
    ; M4 ^( E5 a3 H  H: ~
  48.         // Place all significant initialization in InitInstance
    2 X( g+ F/ s4 e! m
  49.   bDisplayIsBig5=FALSE;
    6 \) U( N& d& C
  50.   bRestartUpdater=FALSE;
    ; D& a0 u8 f0 G% x7 R  H; {/ F6 D5 b
  51.   bFinishUpdated=FALSE;
    + x; c# I; Q+ A9 h) u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 {0 m3 ]6 a: Z8 j
  53.   InitChangeDataBig52GBKS();$ `8 A5 i  W: h! Q$ D0 X+ M* v
  54.   InitChangeDataGBKS2Big5();6 f7 Q1 I- B0 w. E
  55.         //
    . x3 B4 r* I+ B& x1 r7 @
  56.         bClickRunExe = FALSE;4 C9 I- Z: k/ w* N- }1 X
  57.         //
    . I0 B; o: D0 R; _, X/ e; g1 B
  58. }& A6 W% w* b. _
  59.   ]0 G6 W% e2 V6 ~+ V  x
  60. CRevAppApp::~CRevAppApp()
    % F% Q0 p- Z* `, s
  61. {
    8 `4 V+ L3 s2 u2 p  O  y2 K
  62.         // TODO: add construction code here,
    ! S: h5 a4 ^' |; m; Q4 A& r
  63.         // Place all significant initialization in InitInstance" {. ?" Y' c* m$ w
  64.   EndChangeData();
    8 E. m3 z- V% C) d$ `
  65. }
    $ J7 S3 ^# [3 v6 S) Y4 o6 X

  66. 7 v. x& ^' W8 G1 e* M
  67. /////////////////////////////////////////////////////////////////////////////6 O, f3 r4 u0 l$ c, T$ N0 j
  68. // The one and only CRevAppApp object
    / d- E" N* W' u: s

  69. * N* {3 i) ~- n0 G5 A
  70. CRevAppApp theApp;
    * M7 a$ V4 ?$ {4 J

  71. : M+ t" H2 K. H7 \/ `; e0 o* n: \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ A9 I1 }" ^1 r: i  `2 m
  73. {
    1 N9 P1 z7 T8 n  S
  74.   int iEOF=0;
    , h+ A& k9 }) V
  75.   char szTempName[MAX_PATH];' P" E1 B0 M- m! v2 }& H* _0 j3 q
  76.   *szFileName=0;
    ' _4 `  a' w' L/ F/ |+ X$ P
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! Q0 c. I4 Y+ t3 g9 F) i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " e2 S  D, p" W* a0 c: n
  79.   {
    1 u9 n  ]5 K* q9 u: n( \7 O
  80.     strcpy(szFileName,&szTempName[1]);
    , X" t( N3 V7 [% z0 `# H# X1 P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% x8 ?  \3 O4 D, s7 d  f
  82.     {/ \) w$ i+ N/ p1 y4 @
  83.       iEOF=fscanf(fp,"%s",szTempName);) v4 Z2 ?3 ^! o- r" X4 S% L
  84.       strcat(szFileName," ");
    ' @- v) o  r! Q9 N9 }% F& @
  85.       strcat(szFileName,szTempName);
    ' [* e: O; |: `4 s) m
  86.     }
    # _% e9 m% W- {6 w+ z, o) E8 \; T) L
  87.     if(strlen(szFileName)>=1)) Z/ ?6 g" K; ]- R& m5 ]( n: L
  88.     {+ @& P% |5 o, X. C! i. \
  89.       szFileName[strlen(szFileName)-1]=0;
    ) v+ l9 `* ?( f
  90.     }
    9 o) T8 {1 ~% e; X7 z. I' C
  91.   }$ w( J8 t* g2 {! F' _
  92.   return szFileName;
    7 ^' ]! Q: U7 T1 `% w4 R
  93. }
    - C" I! c4 z8 l# {. g: J

  94. 4 c, N5 n1 Z% ?/ d! ?. B+ u& J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 o. R5 v% d  r( W( n+ j
  96. {5 c; s8 D5 N+ N( V8 A' z/ n
  97.   FILE *fp;' I, g" f( \& O& ~6 M4 X
  98.   char *key=NULL;- H6 @) t0 x1 R& x" m0 U, [2 w; I
  99.   char version[MAX_PATH];
    4 a8 `- F$ M2 h9 G3 |2 P! S  q
  100.   LPUPDATEFILE file,olds;
    ( K/ x5 x/ J% }/ a* P  f/ E) P; m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / E) E. ?, H& Q+ I+ d7 k

  102. 3 G; t- Z3 M" f% M# z0 R* d
  103.   UpdateList.clear();" n7 A  B) P- R* l4 g& x
  104.   UpdateFile.clear();  m4 J! l* k( ?$ y4 i* ~/ I
  105.   if(GetFileAttributes(filename)==-1) return false;7 |. S/ t# l! ]# }6 w
  106.   if(!(fp=fopen(filename,"r"))) return false;
    9 E8 n. a7 B, ]1 F6 b
  107.   fscanf(fp,"%s",version);& d# o" ~* W. m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & i  |6 \2 h2 B) f, C) }
  109.   while(fscanf(fp,"%s",version)!=EOF)+ i2 O/ Z0 i( r) P: h
  110.   {
    ' h; R* @1 T# e- V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : `/ @, Q/ y; @& r8 h  i$ K1 D  Q
  112.     fscanf(fp,"%s",file->path);
    7 @! s- M  y* \* G; w) @) {4 K
  113.     ReadFileNames(fp,file->file);
    / O5 M2 \% i( O! l# p$ x
  114.     strcpy(file->full,".");
    ' V" C; J8 p1 A, I0 f% g4 C/ u4 W$ X; b
  115.     strcat(file->full,file->path);
    8 e% ]* u: e4 }  @  i6 N5 M- M8 q* M
  116.     strcat(file->full,file->file);! \/ C/ z/ g' p; r+ e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * G3 c- G2 F% _
  118.     {
    3 o9 w. X9 |& m9 Y$ T
  119.       file->vers=(float)atof(version);3 i& r+ B6 N/ }; u, H* @
  120.       UpdateList.push_back(file->full);
    / m2 N) H# q: P4 Z7 {4 }6 l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 G- V3 G& \3 t# R1 |
  122.     }
    ) g, L3 d/ v( D$ _4 Y4 o8 N  V
  123.     else7 T& _- I5 x$ {  _( _3 G- n: [
  124.     {
    ! `( s! o* r" N$ h0 q7 G( g* @
  125.       olds=(*p).second;6 y) f- V+ p9 B0 N
  126.       if(olds->vers<(float)atof(version))2 z7 ~9 Q2 d# C; c
  127.       {
    2 B& z( Y+ {* F3 }( F
  128.         olds->vers=(float)atof(version);; R6 z3 x. F6 @/ I) }
  129.       }
    7 s# k. T& O- h0 h* [. b9 _+ C
  130.       free(file);
    - a# K" i4 h5 D" a
  131.     }# r$ z9 l# ]6 r4 h- q
  132.   }" v/ M" Y/ o( r1 s- g. H6 i
  133.   fclose(fp);
    , P% l9 _5 s2 O
  134.   return true;" H: j" J( |6 ^( C- |7 B
  135. }3 C8 a) M% t6 w0 r
  136. ! z6 ^  f+ V: O
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , d5 T/ W( E5 j
  138. {
    - T5 H+ \) s/ a) ]% H0 U
  139.   TCHAR  szFull[MAX_PATH];
    9 [  f8 a" Y5 e: l" @1 y
  140.   TCHAR *token,*inter;
    9 a3 F$ p9 e5 L3 q8 z( ]
  141.   *szPath=0;
    ' i. n6 X! F6 G' {4 ~6 f
  142.   strcpy(szFull,szFullPath);
    , ]1 |, b8 t/ j1 l( I; ~
  143.   token=strtok(szFull,"\\/");
    ' v9 a/ H! y# E3 I
  144.   inter=token;
    ; |- K5 v0 E) V! g7 q# r' _" a  Q
  145.   while(token=strtok(NULL,"\\/"))* B: _' ]% H8 n# k' E+ b
  146.   {
    9 M/ C3 K* ?) X9 f
  147.     strcat(szPath,inter);- d8 X% X! a2 I8 U2 O" b) n
  148.     strcat(szPath,"\");, }# @( d, w/ C; ]
  149.     inter=token;# y' _% L# y" X3 F0 \8 ~$ @& m
  150.   }
    5 v5 D, @4 w( y0 E( d1 m
  151.   return strlen(szPath);) F6 G1 k7 _( b, w! O* }8 M9 @' U0 |4 Z
  152. }
    , H) {" {! O, H/ `

  153. ( U& V$ l! D. j4 d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 ?2 ]: v. S6 Z$ o
  155. {
    1 I9 n5 Y$ }" G
  156.   DWORD attrib=GetFileAttributes(Target);
    : ]8 }% C% w/ t* i% u& o. n; @) g
  157.   if(attrib!=-1)* n. ]' R1 I! g, Y  o+ ~" I
  158.   {0 X  Q' u3 g) C  o, \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 C# _" Q' O3 `) l
  160.     {2 A* D7 ]: w- J8 u  x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# ?; y) v6 V' K& w8 [, ]4 [" K" i
  162.       SetFileAttributes(Target,attrib);
    5 }& Y  o# ?+ O, j/ [! T
  163.     }/ N( z8 {  L) z! c/ @
  164.   }
    ) P+ ~! E3 n5 F) d' U
  165.   CopyFile(Source,Target,Erase);" Y( ~! y' q; ~6 }6 u
  166. }% L0 z% Q! _3 |/ f8 U

  167. ; b& I1 p4 ?" ~
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 E9 I: u7 P/ @6 E! O3 V& c0 l
  169. {2 I$ D' {  ?( @8 Z) |) a' b+ c
  170.      FILE *fp;5 ?3 x7 d" ?  @, P" k- {9 P3 z
  171.      char  szBuffer[8192];
    2 I4 B1 M3 }3 t" q! C
  172.   va_list  argptr;
    & ^. d: Y- K" B+ ~

  173. ' s, \) {; T3 O) ^
  174.         va_start(argptr,message);
    9 {# l' W) `0 d+ i$ J0 g# T
  175.         vsprintf(szBuffer,message,argptr);
    , |/ [& n# J3 L
  176.         va_end(argptr);* N  `$ R+ c* U- q  s1 ]  {
  177.   fp=fopen(FileName,"a");- |8 U" z; m: t7 a( o- g1 J
  178.   if(fp)
    ' X+ s6 J* r4 f1 x
  179.   {
    ) |1 S8 l) }4 f7 u) u  X
  180.     fprintf(fp,szBuffer);1 E& f; T' R% i) c
  181.     fclose(fp);. ]! `7 k, v$ F- s
  182.           _flushall();9 i% M. [7 n& h; I+ F1 H$ {3 g  v: Y
  183.   }1 z) Z4 m. a- I/ g
  184. }- Z, K0 X( v6 V6 t  K7 [

  185. 0 q7 [" N+ R1 L8 L( h) h5 y. y; o
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ g5 L8 i/ M) B, ?4 a& q$ U
  187. {" H$ |/ Z% Q' ?1 u1 K
  188.      FILE *fp;* R- E8 Y; y# q: B
  189.     DWORD  attrib;, W& y  ^1 `! Z5 Q8 l
  190.   attrib=GetFileAttributes(FileName);2 f7 a7 _% k/ N
  191.   if(attrib!=-1)
    . ~7 `+ }" q- j- w
  192.   {) B3 a: v4 m8 A, V8 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" Z* C0 ^: B* @& s4 }6 f( N% T' Q
  194.     if(!SetFileAttributes(FileName,attrib))
    - E- n3 |. E- l9 K; @( x- u; f
  195.     {
    , V, ]5 [4 q- `; j
  196.       return FALSE;
    * [$ w1 P: i- g' ^3 o$ W: W
  197.     }
    & q1 s  b, g/ B" f* ~$ \
  198.   }, K: s6 z% u: w/ M; L% g# g# l& m
  199.   fp=fopen(FileName,"wb");0 C8 W  C; R% {( q0 ?5 _; D
  200.   if(fp)
    0 R6 Y* q5 s0 a, L8 L4 m
  201.   {
    2 s% [* k; l$ ^- `% W' |( y# g0 u
  202.     fclose(fp);
    6 q* G( O& v) f8 q  ~5 P
  203.   }
    : w0 x# B) g! i5 e' @
  204.   return TRUE;
    # l1 Y. T: R) Q  I. X
  205. }
    * K) t0 y3 B4 ~, S
  206. * L8 m9 S: ?6 H/ K3 I' q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# K% {( ^+ [+ ?$ c. A
  208. {7 S5 d  U- q) d2 r2 t3 c2 r6 x" J2 M
  209.   char filename[MAX_PATH];
    - C; V& |7 @# g; Q" x2 ^
  210.   LPUPDATEFILE file,olds;
    + u7 m3 S, ^7 j; d. g# y9 T' l# d6 ?
  211.   std::map<int,CString>::iterator i;
    " @0 f) i1 w6 L1 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * z6 @( B0 ^9 m4 S. Q
  213.   std::list<CString>::iterator l;
    ) r* C, J" \; s' \7 X, F$ C$ D& J
  214. ' V  P7 }# l' U- G: [6 D5 ^" e7 Q# t
  215.   if(bFirstUpdate)" T' K9 V$ g/ V# e" C+ G- \6 u
  216.   {
    8 Z+ W+ L/ v' E* s/ w" P
  217.     dwCurrFile=0;
    $ O/ Y" b6 ~+ o, R7 e! V+ K
  218.     bFirstUpdate=FALSE;% m+ K7 m! Z5 z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 L- ^) d5 k. n& o7 m) G2 L
  220.     {
    & r* c5 C/ x9 \7 w, A# T7 @
  221.       dwTotalFiles=UpdateLocal.size();! G3 l: \; t0 ]9 Z8 l  t: z
  222.       dwDownLoaded=0;; ^* w; i! g9 v) g, I4 c3 l
  223.       bSilentStep=FALSE;, |2 J) S! D5 _  H2 }. _
  224.       bCompressed=TRUE;5 L* ^- [1 i- m* Q" O% @
  225.       strExtLocal.Empty();
    2 {* p. w" v# B" F" q! Z
  226.       strFullName=(*i).second;0 y, e8 D4 z. Z
  227.       dwProgramState=AP_CONNECT;
    ( a) }1 L! p9 q' G+ j( ~4 ^
  228.       return TRUE;  M+ u* B+ w/ a! K# v2 c, F4 V
  229.     }
    ' f5 a$ O& D' P- X
  230.   }4 H3 U/ D% |' O( H, H
  231.   else if(bRestartUpdater==FALSE)( t$ I/ |2 z* I- r( m
  232.   {1 [: K  S. W% J+ A' ?5 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& o; O( b. e4 x5 [9 \( b
  234.     {( U) E4 {! ]$ W7 L" q0 E
  235.       file=(*p).second;9 x8 N) i2 o  S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# K) a3 z1 x! ?* |4 F0 s' Y
  237.       {. i* J" X, [4 e4 J
  238.         olds=(*p).second;, Y; P' a: @! r: i
  239.         olds->vers=file->vers;
    1 }7 i7 ^/ A% A! ~
  240.       }
      L' @  H, W& P( b
  241.       else. D% Y' [" L. M5 r7 {/ |# l& g
  242.       {
    / E$ _& ]; E4 n: I: H1 l! u! p* V4 _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 D; f- m% L/ ~2 K: ^' F1 B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# ?" i' z" [3 ~  r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) q5 A% [! t! P+ X1 o8 U& S! j: Z
  246.       }
    : d( y0 d0 S5 C0 T+ f2 f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * O3 [: r, @9 j9 z$ J8 [5 L
  248.       sprintf(filename,"(%s)",file->file);
    % n: _1 X+ o' b" a  e) J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 R' E% _! h, k: c, G! S
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# s! g% R6 i: M4 u) d  R
  251.     }9 W  h: W  X5 {% W% Z+ V
  252.     dwCurrFile++;
    & Y+ q. a  i( ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 f% E6 y7 g3 I: ^, c
  254.     {% {" a: |+ }' u* n' Z/ @" w% r
  255.       bSilentStep=FALSE;6 F* d) D! d9 q# G2 o& e, F
  256.       bCompressed=TRUE;
    - t4 j* ?- _: ]1 l
  257.       strExtLocal.Empty();5 G1 t- W6 f3 {. M
  258.       strFullName=(*i).second;
    2 A4 q8 o9 }) g
  259.       dwProgramState=AP_CONNECT;* j, ^! f" W3 \- A
  260.       return TRUE;% J0 i. p& H  |. I/ K
  261.     }
    ; X; i. S+ q/ W7 p8 }, a
  262.     if(!bRestartUpdater)
    ; L7 V; r2 S: L/ e
  263.     {9 n& q$ T$ \! w& \2 |( L9 [
  264.       int iCurrSize,iFileSize;
    " ?9 L0 G4 g, U! j' I( K
  265.       iCurrSize=0;
    ) B/ K8 B( Z0 h9 j
  266.       iFileSize=UpdateList2.size();
    0 ^0 C9 o8 s& E; A' ?: r: Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 h( r( W, }( g& |* X' E+ \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % ]# l+ ^% }) n/ U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : R: o" S4 t' X: Y- f6 ?- g7 U: W# \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 _8 L( L- [8 K4 H5 n' u9 ]1 W) A
  271.       Fclearf(".\\update.dat");/ e8 Y' G4 w+ T" B
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 r& D$ H4 J, A9 b
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + e4 c# ~. z7 p3 z3 `
  274.       {* y7 w8 O3 @1 C! R, V
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! f" X/ ]0 }3 P# c  s2 ~" W
  276.         {# m& [0 M+ G$ P% @* l' \% s
  277.           file=(*p).second;0 l: ]8 _% V9 c+ I
  278.           sprintf(filename,"(%s)",file->file);
    + y  x0 V* V% k7 B, j/ A7 ~
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; `% ?" f; R# A" Z3 R% t
  280.           iCurrSize++;
    4 N' H6 X& d& K; J4 K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' }8 n7 L0 h! I0 f$ M
  282.         }
    & m8 _3 ?6 e. N. V, x
  283.       }) g  A5 ?. g, o# X# }
  284.       unlink(".\\update.txt");
    + A( }5 d9 F* H. j% r
  285.       unlink(".\\update.tmp");
    % i/ s: o2 {5 M& _0 T0 R
  286.       Fclearf(".\\checkversion.dat");
    " C4 {7 v: @+ [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' ^7 d# r, L! M& r1 X
  288.       if(UpdateLocal.size())
    # d; F0 m" O% ?# k* D
  289.       {/ x9 G: B* K- Z
  290.         UpdateLocal.clear();' C- j1 C9 c+ ^4 _  Y+ s2 c+ l
  291.       }3 k9 B7 z, z+ ]3 O' m
  292.       if(UpdateFile3.size())
    ) x; p" D! c8 r9 i5 N
  293.       {1 k, @+ D2 U7 r9 u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      C, e) v0 ?) q, Q8 D. t; W
  295.         {% S) @# |3 i. u7 f4 O7 g4 g3 c7 _8 a
  296.           file=(*p).second;
    9 ^3 @4 x* `; N
  297.           free(file);6 i1 Q9 t. P( H
  298.         }
    & K, g, K4 z- B. F" j+ X2 }
  299.         UpdateFile3.clear();+ T+ S, E% n1 t$ F( C. B! X
  300.         UpdateList3.clear();
    ) p; R% }, c9 W! o/ F+ W
  301.       }
    $ ?& \8 @' P+ q7 w" x; b0 I) S
  302.       if(UpdateFile2.size())
    9 r* k2 Q3 E' h; i$ B. F. O4 }
  303.       {3 k( W5 P1 q7 j! b. v, c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - \  H# L, t3 r; y/ [. [& F5 r
  305.         {
      Z; b& u9 b3 k" B" F9 O# u
  306.           file=(*p).second;
    * Q0 {0 M/ a# M. t5 e( U; O& N
  307.           free(file);
    4 \0 G5 b/ b: J+ G( V5 ~
  308.         }6 Z7 k0 _6 J; j9 z
  309.         UpdateFile2.clear();7 I. _, U! c4 l: M
  310.         UpdateList2.clear();
    9 S. p+ ?+ |$ B- F
  311.       }+ _' i& ]6 F; }8 P% {6 O$ X- X
  312.       if(UpdateFile1.size())
    ! M3 @7 c. X$ F! G
  313.       {
    + ?' c6 }# {& b+ y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : \* H* `! N! T1 O1 I7 o% |* C
  315.         {
    . m, E# `$ K: C1 _
  316.           file=(*p).second;
    / F3 Q' O  u2 ~. Q/ X0 y1 Q
  317.           free(file);
    , b4 z2 `# p0 }* r" H+ ]
  318.         }
      E3 N2 _  U/ Q% ?3 X& j
  319.         UpdateFile1.clear();5 V. ]1 W+ W" @6 R* H- a0 w
  320.         UpdateList1.clear();. @6 o/ T' I& r3 s8 s0 r
  321.       }
    ( D" l5 e7 F, b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( @+ U4 c* p- M4 X: G  S
  323.     }* j8 L. F6 s) E: |+ K  e" {+ z
  324.   }$ ?. j  D. O7 q) E6 O, n& b: U$ ?3 V
  325.   return FALSE;
    # f7 _! d; O5 B2 T$ v
  326. }
    9 q. ~! v- ^  S4 @3 |- J& r- ?

  327. % s" F0 k1 o0 t& ~! B
  328. void CRevAppApp::ClearAll(void)
    ( Z3 N( x0 _( f$ l1 w. X
  329. {
    4 R9 ^9 N& j7 N4 i; v# X
  330.   LPUPDATEFILE file;
    " R- b6 f& u$ P. X: o/ A! T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      g6 ]2 t1 R* o4 ?& w9 [
  332. / E& o$ k: ^6 k4 v
  333.   if(UpdateLocal.size())
    3 E4 D4 f7 @# f/ Q* N% F$ f
  334.   {9 Z0 M7 M/ y- w: t% T2 y  c
  335.     UpdateLocal.clear();0 o+ p2 v, `. Q( d
  336.   }
    $ u" [9 n( v) S: i
  337.   if(UpdateFile3.size()); t" p5 m& s* p9 }( ?  h
  338.   {
    0 E1 O! F% o& b, p9 K! a3 a. W& V/ c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  T7 m" F" }/ v$ s3 `) a
  340.     {
    ; J& E7 _8 h4 k3 Y, x9 M, T
  341.       file=(*p).second;' F! S5 w0 g5 y
  342.       free(file);0 l, ?9 S% ^: p# ?- i
  343.     }
    + i# |# U8 f3 P" ~/ V! w/ s( D2 i
  344.     UpdateFile3.clear();
    + S3 e; M& [: f$ z( k
  345.     UpdateList3.clear();' w4 M+ q6 T5 E. H
  346.   }5 k/ t( X7 q. R7 \
  347.   if(UpdateFile2.size())' M$ Y" r; q" `
  348.   {! \& y4 _0 U; z+ W( z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 A- Y; l( ]# ~7 `( Y* y6 N- Y# g
  350.     {: a1 p+ K& T; `( g3 V
  351.       file=(*p).second;6 d9 S% R5 O7 D. v: E
  352.       free(file);, a4 E1 @5 r/ S8 ~. o/ E
  353.     }$ N* S6 q6 L/ p( e
  354.     UpdateFile2.clear();& b6 `' E. a0 b1 J# ^5 l0 F
  355.     UpdateList2.clear();  ], T) N1 R, _9 @1 t/ S+ i
  356.   }
    $ |7 J3 Y8 D5 v( z9 e& g1 E, d
  357.   if(UpdateFile1.size())
    1 L! w/ o8 V2 t; c& k% |9 ?9 j
  358.   {! m' c( W, X1 |$ M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 z5 A" _) z7 [+ I
  360.     {
    ! ?- b6 d- V# H
  361.       file=(*p).second;& [: S5 D7 s. X! w& @
  362.       free(file);
    : `3 L" h' N% w5 z8 e$ L6 M
  363.     }
    # d2 ]; j- H1 ~. }
  364.     UpdateFile1.clear();$ Z( d0 J# l* M; T) G
  365.     UpdateList1.clear();: K, v6 g) Z6 V/ A( O; }, p
  366.   }
    0 T3 \0 R7 h/ N3 d! D
  367. }  
    / }; O$ n* g6 A% ^* F1 o& ?
  368.     c; z% u" b4 w) G" C
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 k& j' T% E" X! o; }8 E
  370. {
    ( g  V1 Y0 `. k- @& E  G0 G
  371.   int c;
    ; ?$ e, u3 ^8 P: y) K5 H0 N0 ^
  372.   LPUPDATEFILE file1,file2;* ^' W: a: x5 w( p! @: C  \
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 z" J9 S* F; w
  374.   std::list<CString>::iterator l;
      v( H* }0 W# q  l6 b; R+ T( `

  375. / M. X2 E0 y8 [0 X
  376.   UpdateLocal.clear();
    0 J1 v: Z+ @% Z3 G( w2 h
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 N2 u/ M3 R. v, x+ C  f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) n2 N: m$ j( \* }. l# p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - W1 J. F% u* ]8 C) N$ Y0 g5 g# U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 b5 |) Q- F7 v7 t( @3 T5 |" a
  381.   if(UpdateFile3.size())- v" c0 Y+ b$ d" ?' D" ]
  382.   {/ {% M! w8 m# g
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; D6 i/ |/ [3 R! `0 }* [
  384.     {( ]( q4 B  N8 f) v
  385.       file2=(LPUPDATEFILE)(*i).second;
    . e3 }, `* n9 ]1 H9 P1 ?% f. X  m% h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& o# k) ^& M/ w7 M- ?1 P' D
  387.       {- p* K) P4 _% p/ M  v8 Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    / p/ N" P0 f- g' j7 O% d/ _
  389.         file1->vers=file2->vers;
    ' t1 x: g  V+ J" p
  390.       }
    4 _7 |' ]2 j" Y5 Z
  391.       else
    $ y" o4 {5 Y7 ]% ?
  392.       {
    ( J9 L9 Y, }$ c  W) D( I" T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : |. ], R8 \; t) Z4 x% b/ h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* c7 H/ `: S7 X/ m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 o' M, t$ s: K
  396.       }, i3 B; [; Z5 Q5 O
  397.     }% J8 G) s7 a! ]8 J
  398.   }" ~. K: V* b& a: @# X" S% ?4 c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 R/ B- ~. f# C9 a- a- k
  400.   {1 L% o" F8 v1 V' d; O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 ]$ e$ I; e( S: d0 I
  402.     {( r4 O) G% e, D- ^4 R% _
  403.       file2=(LPUPDATEFILE)(*i).second;4 Q3 X2 O4 f6 D3 U$ o2 k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 p4 C+ `2 J! E: U% X5 }, ]
  405.       {. m8 b% [2 J$ V; F
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 l7 ?, A, z+ }% B9 n, T
  407.         if(file1->vers!=file2->vers). o) ^- D- D+ @7 v- N& L: h( M
  408.         {
    $ s% `, w0 d) R! d$ V* T; D. x2 ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 D  t/ F! t: G% {! L7 g2 L
  410.           c++;
    + p4 o/ H4 \- q! f: o4 I
  411.         }
    9 V7 r1 p/ U* D# ^: T
  412.       }% T4 N5 c" c  D( @+ a+ [1 x& W
  413.       else1 w0 J1 [5 L( ?7 I1 \
  414.       {0 h& B. n. @# y1 n" @+ _/ v) v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 D% X. w0 }/ Z
  416.         c++;0 {4 M. n' F. r0 E
  417.       }
    " ^% A$ b" k' c- I% P6 Y1 w
  418.     }
    ; N2 I6 V( s, d+ H6 }
  419.   }
    7 b6 r- C) I* d
  420.   unlink(".\\DownLoad\\update.txt");
    + e, C: r* G# h) X  r
  421.   if(UpdateLocal.size()) return TRUE;. i8 Y7 K1 T; U/ }/ a! H' `3 \
  422.   else                   return FALSE;
    1 x, J/ C4 o$ o; Z
  423. }
    ; D/ i& D* ?4 G, y, I

  424. 4 L/ w% J2 n; r6 l$ `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 H- J1 O( j. D" z5 @' P1 }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") c1 Q% K+ b- W/ S8 f
  427. * [7 j  T- A1 {/ ?( n8 T2 U
  428. ' L& Y; a$ P5 U6 P3 q+ v+ h

  429. $ [! t. K; c# O. m, j4 L% M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 C8 i9 y2 u0 J4 D
  431. {
    9 v. q  }/ B$ Y% c' F, n% `
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    - h1 z9 V% [7 x) Y7 o
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 q+ m% Z1 C- \' A
  434.   {6 G! w6 k' Z  ]& d8 _/ Z/ G1 u5 q
  435.     char szLanguage[50];
    7 L, E9 B$ d( U# @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " C2 C1 k% D; v' Z, r+ B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ G. k0 D; W! x5 ^: B2 B# K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) k* B0 e% }2 @
  439.     else                                   m_iLanguage=ENGLISH;
    9 q" f6 f/ [  ]7 S! z
  440.     char szRegister[100];
    . ~$ v" v5 ^0 Q" i: l7 h3 [" `( _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - ]1 z, O9 s2 Z7 u( B2 N
  442.     strRegsName=szRegister;
    3 \' s( T: S: u0 T
  443.     char szPatchURL[100];+ p: p7 r4 p8 E% I9 z" z  t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 ^3 g  m) q2 a# R/ V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& i, ^" t# B2 c3 p8 F7 V: E) s
  446.   }
    + a% g" ^4 n- G, F( c' e
  447.   else" r1 P* Y& W6 s4 E
  448.   {
    % i% i2 p8 H/ F4 U1 s/ y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( {" B% u; o. `( k% d9 b+ G
  450.     strRegsName=DEFAULT_REG_URL;
      z" T, ~+ x4 T4 n$ t
  451.   }, M# a3 c2 J9 H9 c( W
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 V# t/ a0 Z) z$ f0 J
  453.   {
    ; V2 q' F! ?2 R
  454.     char szIP[50];1 ~% p* _' [% e5 C, }$ v
  455.     char szDIR[300];
    , o$ M. B+ y2 P4 {9 a) z  l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* q/ c4 X5 J. o: b4 C# z
  457.     {  Y; w. a8 S8 ?. U3 T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: S* G. l# W6 H  ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; @% }4 Y% u5 W/ F4 F  Z  l
  460.       strHostName=szIP;
    1 B$ |: g* a$ H7 `; H4 ]
  461.       strHostPath.Format("/%s",szDIR);7 |" Q, ?" k9 G2 \6 G* M5 X( j: \
  462.     }
    % z" m7 u) h, O3 o8 P2 v
  463.     else
    6 j0 x: _+ y) P: t
  464.     {( ]1 d  n4 l, n9 y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 f" T2 ?( P7 h) v
  466.       {
    ( E) H  }" S. V( g; O: B# l
  467.         char szLanguage[50];
    4 _0 ~/ h% w: Y0 g8 L$ L/ m6 G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: C1 W0 L; V/ o7 |/ l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. N7 x6 ?2 X. H! d0 i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 _/ |2 Y/ r( y
  471.         else                                   m_iLanguage=ENGLISH;* M6 K) l% e( w# a. i
  472.         char szRegister[100];
    * Y3 ?, C  C, l0 g3 q6 N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ g3 V, |* g6 e* Q; l6 T# U
  474.         strRegsName=szRegister;3 t5 L# k# d6 U3 |& n5 Q
  475.         char szPatchURL[100];
    - C; D" c; |: B" q: t1 @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' E. i3 K- g9 ]+ F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 n8 F; e  u1 m1 \5 |% {  `9 _: }
  478.       }) Z9 @6 B" m0 k& C* q
  479.       else
    & r8 C& v% x0 c" M" [" J0 D; ^) V
  480.       {
    2 }+ e+ ]% n4 C- N) L1 k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( `5 O/ C% k! Q- i+ F
  482.         strRegsName=DEFAULT_REG_URL;4 z; Z6 o( d9 u! R( g" @  K2 p! v
  483.       }
    ( ]! l; a/ }- n# X. v- X
  484.     }
    ' n& x8 P/ l! Y" P( n1 `
  485.   }
    ( Y" K" U% Y. E8 f
  486.   return true;* g0 k& X# c& A  P9 `" Z
  487. }7 T5 j2 m( X; ]. w

  488. # c) B2 S) [# J
  489. #include ".\ZLib\unzip.h"6 H: }* ?; ^" c6 @0 q! I0 e1 f
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 J% H2 ^8 o2 ^3 G" V& |: @
  491. /////////////////////////////////////////////////////////////////////////////2 Z5 `0 A8 K3 }9 o: d1 L7 d$ }$ x
  492. // CRevAppApp initialization
    + y% J* r  V) H; x; e/ v" d5 ^
  493. 6 J# v  @' T* T* t# w0 d: t! [
  494. BOOL CRevAppApp::InitInstance()8 M) K2 p% ~2 d! \% U
  495. {
    & X4 R$ ~0 o' v9 n8 _- z4 d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];- n* q% A* r' u$ Y
  497. 5 R- H- b, ?" g7 X9 u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - E& a! C& t5 b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    3 b$ G8 c/ F8 t; n6 }4 V  N7 [% t2 F
  500.   {  T  M) I# G; p2 a8 R, _9 ^' M2 l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 f) U+ i2 x  n0 J' \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      H) M& ~# L: R) ]
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + O2 Q; l1 E. \
  504.     {: ?# d1 ~. q5 r3 R4 b+ [
  505.       strcpy(szPath,szPathTarget);! x! }- I( t" v1 o
  506.       SetCurrentDirectory(szPath);
    9 n6 H; ?, d2 H& m5 a7 i' V/ Z
  507.     }
    5 z4 s1 ?; d1 o- S' v1 E
  508.   }
    " |* G7 ?0 u: J& u
  509. #ifdef _DEBUG
    ! f; k, P: k" m: G9 H8 ^2 k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) x, _/ M% H8 P2 ?. B% ?6 G- g
  511. #else
    ' h# {3 w# v" ~& a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( k7 ?5 ^& n4 e
  513. #endif' E( u- x! S: s& G) I) m6 _
  514.   {3 J% L& v( j5 J2 ^: U
  515.     char tempFileName[MAX_PATH];
      q; o; H& L" y. J) B
  516.     strcpy(tempFileName,szPathSource);
    0 x3 T1 j6 u  L2 _3 f) b+ e
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 L3 n, N) Q8 c. L- I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % a8 X) i' C& c+ |  x, t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  `6 J$ P) T  ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  h# z( E. n: a* }7 u
  521.     return TRUE;) l3 [' N; U5 ^9 q
  522.   }+ G; ~1 a  k6 i' s
  523.   // Nuke 0118: Delete run.exe
    * u+ R  ?7 l, S5 x9 g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' O- b% ?( ^0 U8 \; H4 F7 s. K
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! _$ i- E1 d; S/ C
  526.   if(!ReadCfgFile("Config.ini"))5 l+ \" c9 d, X
  527.   {
    ! M, {4 `5 a" \. V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 m8 B8 |% E4 w. V) O  L" K& N
  529.     return TRUE;
    8 ]0 a7 V# [) t. l3 W& ?
  530.   }
    6 l: C5 \8 h$ ?' T% I7 I- H
  531.   HANDLE mutex;
    $ M  `8 l; b7 G) k+ b% F/ L
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 S9 v9 u, ~; {: X% m& J( T
  533.   {% c* ?+ Z( Q9 c6 Q" ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) p3 h: J- q' V  O
  535.     {
    9 J) V5 G7 }' G8 R
  536.       CloseHandle(mutex);; K2 i/ F  d" }+ b: [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! W2 M% ^- N1 ]( k
  538.       return TRUE;
    " k& K! V- Q4 }
  539.     }0 I' C2 b( n; }
  540.   }  7 l+ }; [: O! F! c7 D: v, E+ L  f
  541.   CloseHandle(mutex);& y" D8 t' O0 `( N' k
  542. " `$ }. k2 J9 I1 L1 w6 `
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + i0 @  E1 N* O; C
  544. & d8 D1 q( W. u0 n5 I7 V
  545.         AfxEnableControlContainer();, _$ o  Y: Y3 _

  546. ( C. F% t! T! \7 Z% ^2 r7 n* j
  547.   bCanUpdate=FALSE;' Z3 b4 G' s8 m$ }
  548.   dwStartUpSteps=1;
    - q  x3 L8 A; i& p) F7 ]( F0 E
  549.   dwProgramState=AP_NOTHING;3 i$ D  Y6 y( Z& e( G  T

  550. , L, N# s' Y, [3 S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 X* d8 `% @, p& K" d6 M) h
  552. * |/ ^% z: _: d. L) t
  553.         // Standard initialization; B1 t9 S# l) Y' L5 U. o
  554.         // If you are not using these features and wish to reduce the size5 i) u. N% J0 O, N
  555.         //  of your final executable, you should remove from the following- ]7 @2 L! L) g$ X, f/ j% A& I
  556.         //  the specific initialization routines you do not need.1 e1 N) ]- W: v* N( X2 I! D
  557. 8 O9 C* h& [- n. b& g2 O
  558. #ifdef _AFXDLL# L1 K* E( j9 p
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 |2 [: j$ A9 C* [8 g- n
  560. #else4 H  T, r- u, C; V9 M' ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 U" G  T# p; u" f
  562. #endif
    3 n* \" z  ^; P1 S

  563. . t' s6 k  \) m: F
  564.   dlg=new CRevAppDlg;5 P' y; m  s' p
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      D2 U' ^- C, G) j  @% w9 Y7 r! ^, P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 L8 J+ k! }6 N8 i3 j, R
  567.   m_pMainWnd=dlg;
    $ @5 A. V: F/ M# s" f
  568. , a6 o3 \% Y% U6 h- `7 t3 V  J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 H# o4 [1 c3 c! h7 [/ }  [
  570. 6 r  d/ s2 F" W  H0 h5 S7 x) N
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + [7 M6 t4 c0 g8 B
  572. //  ULONG_PTR gdiplusToken;" C& ~) ]+ |+ v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& e& p* h6 g9 p; p. R! e1 j" L
  574. ; q+ t2 {) M- u6 n* Y
  575. //        CRevAppDlg dlg;9 O6 B; ?# i: B, r9 z  V
  576. //        int nResponse = dlg.DoModal();
    % C) J, [" `% `. X
  577. //        if (nResponse == IDOK), d' S3 h5 c! p& Z" C+ D; T. u; D
  578. //        {
    8 ^* |" B6 \/ E* F6 ?9 x+ Y
  579. //                // TODO: Place code here to handle when the dialog is
    ( M, G2 [- a0 _( f% ?6 m6 Y7 {
  580. //                //  dismissed with OK
    . w& C3 v- I( p7 o) O" t7 a# q, m% D
  581. //        }
    6 n6 w3 r- p; e" z: h
  582. //        else if (nResponse == IDCANCEL)& a  v" P2 B  r" |! C, k: ^
  583. //        {
    3 s5 |+ |) K* r' r; r- d7 J2 U
  584. //                // TODO: Place code here to handle when the dialog is/ A, ]# x; T+ n7 C, m6 ?
  585. //                //  dismissed with Cancel. M; D3 b9 P. g& i) S
  586. //        }3 b' s6 D( L6 T( C; }& v+ H! I# R: _
  587. # F4 N; J( w( W5 X5 Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ }7 B' R: R0 w3 N
  589.         //  application, rather than start the application's message pump.
    $ ~% @& ~$ Q1 R6 U. j; }
  590.         return TRUE;3 z8 }! P+ \. W3 w8 J* q
  591. }
    4 Y6 k, B' w! i8 t5 B4 `: A! d

  592. 6 V; O9 N2 a% F8 D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 _+ X0 W, U  ?7 B! \9 I. _1 Z
  594. {7 f0 o' a9 p6 y0 l
  595.   int i;9 J1 @4 R3 R" T2 D
  596.   char *szRet;
    ' v% I: \* _; a, u9 U: O$ R4 [
  597. . C7 j. {' [- p+ K# ~0 U* {+ s
  598.   if(pSource) { itoken=0; sztoken=pSource; }. r* q$ {4 Z9 S" Z: m; ^1 B4 I
  599.   if(sztoken)6 f! s' R4 C6 Z! A: t5 O
  600.   {
    " A+ u) l& z: k2 @/ D
  601.     szRet=&sztoken[itoken];
    0 Z* I+ B- i8 |+ b
  602.     while(sztoken[itoken])
    % w0 l. z6 B" N8 I& b
  603.     {  y+ L- |8 x' [! j
  604.       for(i=0;i<(int)strlen(token);i++)5 Q. j- U; \/ M! [# Z% T
  605.       {( I" S8 q) ]& ~: T9 K/ Y5 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % O/ M& A- r6 s. n6 }- N# t% t
  607.         {
    # F  }/ X! P  u# K
  608.           sztoken[itoken++]=0;* h7 J- \3 J/ h. L* {) H8 D
  609.           sztoken[itoken++]=0;
    1 s9 X2 O; n! \& Y
  610.           return szRet;: [! O, H7 g" u2 N  G* K
  611.         }
    , f$ {9 {- ^& N! Y3 {, G1 T0 l
  612.       }
    # }; s2 d6 G* v! |
  613.       itoken++;1 R8 w( t2 \( R
  614.     }5 _( E3 W* f) C9 b
  615.   }6 @& l# z+ c" l! e
  616.   return NULL;
    " D5 P% B5 x( H! v
  617. }6 V  S! J7 d& F  |8 D3 Q: T7 x
  618. + u1 j4 ]* ?, f6 X% f
  619. void ProcessProc(long Total,long Current)
    : Z" O- ~) S. P- }
  620. {
    1 @% ^/ n$ {7 ?! s" e9 x/ I
  621.         MSG msg;4 v0 A0 c/ Y  f4 Y; `' U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, X# s* K" C; {* c  o1 N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 s" z& M2 v- Z$ e* ~0 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 _+ d" I5 j. H5 W
  625.         {
    $ ^# w8 N# g/ m/ u# q1 m' u
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # R7 f- _+ }& M7 u5 P$ }5 g0 a- F
  627.                 {* S2 |( c  Y. p
  628.                         return;
    " a$ v8 n# Y( {" x
  629.                 }9 V# P' I) n% J1 }/ N+ D" j+ s
  630.                 TranslateMessage(&msg);
    , ?& l: p& ?! l( t9 P) x
  631.                 DispatchMessage(&msg);! {6 d. ], m( W, ?& F$ M
  632.         }        ) T" o* D4 Y4 R" Y! L5 ?& s6 A% Y
  633. }' |% K3 `  O( f3 T& Y

  634. ( I7 H: k" V8 [4 o
  635. BOOL bFirstChar=TRUE;' r" k& K9 p" X# J

  636. ! I* x+ E! I4 p" R  G  U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
      q3 C8 |3 I5 R- W! P& g
  638. {! r# Y$ \9 i0 F! Q& g
  639.         // TODO: Add your specialized code here and/or call the base class$ ^: I3 O+ v, X8 Q) {+ L3 i
  640.   switch(dwProgramState)
    3 @9 K' j+ A* K% d, `) k
  641.   {
    ! Y1 e/ c  S* f0 I% g) A
  642.   case AP_NOTHING:- d2 O# A, d2 X( v8 B: [2 j9 v
  643.     switch(dwStartUpSteps)9 ~8 i- k2 Y5 U- `' ^# m
  644.     {  F/ g8 t: ^( o' ?! Q
  645.     case 1:
    4 |" K; ]5 a: D3 u5 R8 |
  646.       {) q0 U# z: r+ c" u& B
  647.         int i;
    ! s$ r) Y! A3 ~: y' U5 R! ?: ?( n
  648.         CDC *pCDC=dlg->GetDC();, u( J7 |  I8 |7 [  A0 B
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! z* R6 |) C6 d  L: j5 R( v
  650. //        Graphics graphics(hdcwnd);! a# l; z; M. h" C. ?4 X2 O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ @* O6 D, t3 F# E  S8 s
  652. //        INT iWidth=bitmap.GetWidth();
    $ m6 V3 U8 y' K1 w/ D  X
  653. //        INT iHeight=bitmap.GetHeight();- w: C* h/ ~$ u! S$ G) [
  654. //        Color color,colorTemp;4 b) }3 O7 L7 `; A% w( X4 C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 l$ v2 D( l! {- T0 P" _( E
  656. //        {
    4 @( R. f; U9 [: a( V& U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 p! x& X( C# ~% K3 y  Q; z; I
  658. //          {7 s1 w0 ?2 Y: W; j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 D& R2 m) }( ~3 Q4 t9 A
  660. //            colorTemp.SetValue(color.MakeARGB(
    - E" U) e5 _  b: k( V# m
  661. //              (BYTE)(255*iColumn/iWidth),! Q8 `" Q1 E, y5 b3 u' `
  662. //              color.GetRed(),0 e. z/ G- z- b2 |7 ?3 E7 y
  663. //              color.GetGreen(),
    ! b3 e' H  _; A
  664. //              color.GetBlue()));* R, V! u# C% U) u3 \3 ^2 O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . P% a. d- v) {. O+ N+ @: N9 q# h
  666. //          }
    3 }  Y9 n1 D. N
  667. //        }3 [) @3 s8 m. f& X0 F; M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    % V/ C* q# h1 ], \3 I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! s) r% S+ }; x  d6 g! ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( x0 m$ d# ?& z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* s; _( }+ H% {: q1 b4 a# Z
  672.         for(i=0;i<240;i+=8)
    ! b1 F5 R' X4 [. Y% k
  673.         {
    / S* B( Q3 p, n) Y8 H: [+ I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 v* C8 ]) t- U" o% D% z7 h$ f1 P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 o, e7 [  d) r" |5 `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # E. i$ Y; i7 J+ h( `' a* V+ r; }
  677.           Sleep(33);
    + a+ O; B4 H$ Y& ?$ M
  678.         }8 b: s* C# d) m$ g4 o: f
  679.         Sleep(1000);
    7 y- F0 J0 {4 N# S3 c7 b5 e1 i1 q
  680.         for(i=240;i>0;i-=8)
    7 K! j( A1 C- k% Q: q2 Z4 v
  681.         {
    ! Z4 q! N5 L- F" Q* ?% p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * f* f! I1 r  Y! \! v) F% j7 P
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' W) n% {; e: V/ d7 X4 P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # s* _& [+ s9 k' V
  685.           Sleep(33);0 j/ e! i# A! t3 q# U/ l& t. O5 n5 r
  686.         }! m$ l0 n# w% U$ i+ q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . d; x3 f, a. Q$ g7 c7 C
  688.         dlg->ReleaseDC(pCDC);
    1 v& B, ?4 Z, c& ]! _; |# r
  689.         DeleteDC(hdctar);
    $ @+ ~" q2 n$ V. I2 s" t
  690.         DeleteDC(hdcsrc);3 [3 S, m( |8 l
  691.         DeleteDC(hdcorg);
    , v% q6 |6 Y3 h! s$ r1 ^
  692.       }! s$ a' b2 d  b1 _" {. A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' ?; P+ `) L' N% j5 o) V: z2 N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ z+ ^+ Y2 I6 X2 }( F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! h2 S( z- C( R! N* u5 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: t% Y8 `! W# H2 i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, Z/ }$ r! b) i2 F  g2 p) j  |
  698.       if(!Dn.Connected())
    6 `# m0 o7 T" p- A
  699.       {
    . G" S7 |2 D9 c2 s+ F7 ?9 ]9 j6 q  c
  700.         dwTotalFiles=1;
    5 X( b1 A- h; n' q: k3 g- h
  701.         dwDownLoaded=0;+ K: \8 U. e9 L4 P0 h( Q4 @8 {
  702.         bSilentStep=TRUE;  Q- z5 e/ Z) a' t
  703.         bCompressed=FALSE;
    4 C& J1 p% K* H$ @$ V4 e! @/ {; s
  704.         strExtLocal.Empty();# ^) G- U$ N& f  t
  705.         strFullName="readme.txt";3 J9 i$ g/ b( S) Y4 s
  706.         dwProgramState=AP_CONNECT;+ @3 F4 c' U9 I4 C7 j
  707.       }: Q3 ]7 h2 s9 R; r7 q( F9 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# {; D( v8 @. n- z6 F6 v
  709.       dwStartUpSteps=2;
    " G8 t4 @  L4 O
  710.       break;& f- |: }; G# r$ h' q
  711.     case 2:  ?. x, [% B: F; F
  712.       {( N  V8 x0 V$ p4 s
  713.         int iEOF;$ O  J' Z3 w" U/ U, z6 v9 V9 }: h5 }
  714.         FILE *fp;
    + ^, V' O( w& b( }/ I5 y, U
  715.         char szString[512];
    0 g" f0 k; [" n' S8 {* M4 Q" O% D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ ~: c/ _5 k, i$ Q. J* ]
  717.         if(fp)
    ) m0 m6 Q0 X! g6 V3 O- `
  718.         {( J$ s  W9 ^$ _+ `/ w
  719.           do
    , l1 o9 B/ m4 s
  720.           {! W: P" J- c( p6 R
  721.             iEOF=fscanf(fp,"%s",szString);4 B$ y) T# L, N: O: H, ]- A9 V
  722.             if(strlen(szString))# i4 b& M. D# n- k
  723.             {" e( G) ]9 }' i2 `9 }9 V
  724.               if(bFirstChar)2 R8 @1 D% P! E6 W2 h2 w- d4 O
  725.               {- z+ F4 p) D$ c( _9 g
  726.                 bFirstChar=FALSE;
    4 V4 x, N% U3 B/ J8 }
  727.                 bConnectIsBig5=FALSE;$ m" ~' g6 |! u/ t3 A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, y! |" J; m: I, q! @
  729.               }
    / G3 Z8 Q6 l+ }+ M* ]2 k' ^
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, ~  {, I1 z( X# e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      z0 i9 r3 i% ~- q1 B
  732.               dlg->m_ListText.AddString(szString);
    - W. Y- C* `' k" R) ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R4 X- {+ b3 {3 g) u
  734.               *szString=0;
    ' o4 ^( q( t& p
  735.             }5 @) d) _, a. x$ `; J9 F' T
  736.           } while(iEOF!=EOF);
    6 B9 I4 {* S( j$ l( b
  737.           fclose(fp);  L/ c4 J- W" _* p! W( O
  738.           unlink(".\\DownLoad\\readme.txt");
    8 d( ~4 S' r' J4 O: Z
  739.           dwStartUpSteps=3;6 k2 q0 y% n- z6 M
  740.         }
    4 S! x' o8 ]  D, p
  741.       }( p" }- o$ Z. j' x
  742.       break;, C7 y% R- I2 p/ k: a$ U  E# @
  743.     case 3:
    ' j( G2 l1 G- i+ C3 o7 m+ f/ o( f
  744.       if(!Dn.Connected())# U" s5 f8 o. V8 S- S( y
  745.       {" t3 {  V- |% ], ~* V# D/ y3 y/ l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  N9 a9 s* e5 o" k: p( R1 A
  747.         dwTotalFiles=1;9 ^0 V' A6 ]% a" f
  748.         dwDownLoaded=0;( F0 V7 R6 P- O" a  [
  749.         bSilentStep=TRUE;
    ) R% [. a; {5 R/ r/ f! X
  750.         bCompressed=FALSE;% y. w1 I2 j% N
  751.         strExtLocal.Empty();
    * y. m: f. I6 l4 z( N9 D
  752.         strFullName="checkversion.txt";: N+ d* F# k& l
  753.         dwProgramState=AP_CONNECT;. o3 O& w# u0 x9 D% B
  754.       }% A+ [' x6 v1 n+ ]
  755.       dwStartUpSteps=4;9 j, j& Q1 F6 ]) g7 H$ d4 L
  756.       break;
    : |' `: _  e2 d+ A
  757.     case 4:2 {* a8 m8 Q! }/ \: J3 w: y* g
  758.       {( p2 C; B% _4 R8 R; R+ \9 C
  759.         FILE *fp;
    - c& m0 G$ p& t: ~) }8 m
  760.         char szString1[128];2 v2 W" c* [  p. @3 g3 q7 u7 w
  761.         char szString2[128];/ @; g* S5 M# I& b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & ^8 f; V1 c: E# o( \& w
  763.         if(fp)9 @: f9 s& c5 ?; N) a- [& D
  764.         {. g+ n, e, j) C+ I5 t
  765.           fscanf(fp,"%s",szString1);
    ( U# ]) q  d' X/ x
  766.           fclose(fp);
    ! K. q7 c/ }& @- d
  767.           fCheckVersion=atof(szString1);6 _6 h* i% Z; G5 p% c7 G2 o$ Y
  768.           fp=fopen(".\\checkversion.dat","r");
    # h3 r9 H% q  O. e% Z/ ~; v8 _3 q
  769.           if(fp)
    $ E* d+ |( [! k2 d* x3 Z! m
  770.           {( M  c8 \0 M, a1 r% [6 K& o( Z
  771.             fscanf(fp,"%s",szString2);
    # p& D. Y& n) |
  772.             fclose(fp);' g2 [& ?1 u; b9 j; ^; T. H# L
  773.             if(atof(szString1)!=atof(szString2))) j5 D$ q1 r+ m% b8 M2 j. T
  774.             {. t  O$ v2 I5 Q% l6 Q: y; f' n6 R
  775.               if(!Dn.Connected())3 M1 ], x1 V) i' O. y6 l# X
  776.               {! Z1 F( m( p8 v$ I' `, ^
  777.                 bFirstUpdate=TRUE;$ H  a' K3 S/ T! ^* O0 Z) Y
  778.                 dwTotalFiles=1;. Y6 q. d; l  }0 Z. z# N2 _& d
  779.                 dwDownLoaded=0;
    - P$ H4 ?2 o. c, q
  780.                 bSilentStep=FALSE;. n9 Y+ d# g3 ]+ j* G, m/ [
  781.                 bCompressed=TRUE;5 t$ G* n, t$ b
  782.                 strExtLocal=".\\DownLoad\";9 k1 F; t  U' U+ X
  783.                 strFullName="update.txt";+ C' r/ S9 F9 B( |0 r( T2 ]! k
  784.                 dwProgramState=AP_CONNECT;
    9 H: `  S+ l( E% G8 J- y- T, B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 _3 M# g6 w8 \1 E
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 ]8 z! q# f! G: F, l, d% h2 e8 V
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( K! b6 O% ?% Z" H2 r! V
  788. 3 ?# O- x4 C; c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 n# ]! z* o* l; i, e0 N) W9 v
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 K8 G7 N! R9 R$ ~5 d" L& G- u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). S4 P" V" |/ g+ ~+ d
  792.                 {
    - z0 `1 G2 R# M$ N0 H/ F; u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & J" c0 l$ ^; e* Q- P; G( i" v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- t3 R: x; z7 v: w) m5 @+ a+ R1 _2 p
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ R0 P& V9 e0 Z3 r1 P: f$ @$ x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 p& v; U. {4 j, g( R4 A* N4 L2 z8 h

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

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回覆

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回覆

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回覆

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部