找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 e6 b1 x, w" h" |8 v. Y
  1. / RevApp.cpp : Defines the class behaviors for the application.3 T& C7 F8 N6 F1 i$ O1 p' x
  2. //, j$ ~) k; e6 e, z9 p
  3. 9 |+ D) Q; u8 C6 d: g7 r8 P. x$ p9 G
  4. #include "stdafx.h"
    - d+ s4 T- t9 [% ~7 Y# Z' [

  5. + x" i6 u# o0 K9 w& T  B7 V
  6. //#define UNICODE
    4 D6 D* ?7 x0 `2 @5 v' n
  7. //#include <gdiplus.h>
    5 v1 g. P* S. q2 l% h; q: ^
  8. //using namespace Gdiplus;3 ~' I+ z! X3 S9 n2 C) s( p

  9. . u7 [; z3 ^9 P* P
  10. #include "RevApp.h"( k( c6 ~( r9 ~- e
  11. #include "RevAppDlg.h", h0 H; k+ e3 c3 H3 k9 ~5 M- X% Y
  12. ' F, d/ t3 h! @' n: q4 J
  13. #pragma warning(disable:4786)
    6 O& c5 I/ @; d  O
  14. #include <map>* K( @+ g  N) ~8 C, C
  15. #include <list>) Q3 M/ R! h! {; }
  16. #include <direct.h>$ J( Y1 n. H" g9 Y

  17. ! ~5 l( A, h2 R
  18. #ifdef _DEBUG) ^) P1 u- [7 R& R
  19. #define new DEBUG_NEW
    ( ?* y; c7 m- Z$ K
  20. #undef THIS_FILE
    6 ~' `; ]/ Y0 g5 D8 v) M
  21. static char THIS_FILE[] = __FILE__;8 x+ J/ ~! Z7 C) |& e6 W
  22. #endif
      ^. ~8 I/ Z* [9 r
  23. #include "SkinResDef.h"
    ! ?5 ^( Z/ s8 ]% L0 t! L. y
  24. #include "ChangeBG.h". Z* E6 b/ y: a) ~
  25. #include "AFXINET.H"" |; M1 b% w! |$ T9 x7 R
  26. 7 B% y3 v4 X3 _* b2 \, J
  27. #define TRADITIONAL_CHINESE 0$ }- V' i( r  V6 I
  28. #define SIMPLIFY_CHINESE 1
    ! E$ T- p6 v; z" ~1 n; m/ B
  29. #define ENGLISH 2
    " J" i2 o  y; f4 z5 U# g# A3 s
  30. int m_iLanguage = ENGLISH;3 h8 @1 k' G) b) [
  31. /////////////////////////////////////////////////////////////////////////////
    1 F& j$ ], [6 @4 B
  32. // CRevAppApp
    2 J3 L8 [8 G6 s! u$ Y! i

  33. 4 L& O" m5 ~$ i4 f) n, ~0 z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), V" w* x5 u3 @: b+ ]. Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & M2 w3 F8 `, K* g! u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* @3 S6 N# k9 ?+ k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 ^2 b( l& s0 h# t+ y
  38.         //}}AFX_MSG
    , `9 I0 X8 n* |# c! \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * M( t* ~6 X* N9 v, I
  40. END_MESSAGE_MAP()
    ( M$ `: H% n2 \
  41. ' \3 @& U/ R+ K5 _; o! ]
  42. /////////////////////////////////////////////////////////////////////////////
    9 L1 C6 ]3 }" m
  43. // CRevAppApp construction& M" E& `% k" F* K/ U

  44. 5 Q) }) o/ ~) q" c9 X
  45. CRevAppApp::CRevAppApp(). `$ |2 D. L4 W2 i
  46. {3 u  e" j* \3 c9 I. W, [
  47.         // TODO: add construction code here,
    + ]( J0 U7 \! c0 X( f. u
  48.         // Place all significant initialization in InitInstance1 `( M& U% F5 A2 ]4 p! b, m
  49.   bDisplayIsBig5=FALSE;
    2 o, I4 K7 W7 ^! \, E8 i$ {
  50.   bRestartUpdater=FALSE;
    , H8 m6 J7 ?; }; O' R8 Y
  51.   bFinishUpdated=FALSE;/ j) F8 @- \- g- e! _0 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 W1 N2 {8 ?" L7 {- D- w
  53.   InitChangeDataBig52GBKS();% _2 M) R, n8 v+ ]% `: m3 H
  54.   InitChangeDataGBKS2Big5();( R3 m3 ]0 x/ h
  55.         //" }* m; G3 f) O
  56.         bClickRunExe = FALSE;
    + ]1 l6 V/ W! ^; e
  57.         //
    6 C/ P% m* R# B/ C, U: P
  58. }8 }" H, L( N9 ?" U( x
  59. * _" y+ }$ A/ Y& R- J: _
  60. CRevAppApp::~CRevAppApp()
    1 P3 b# d# S- `( M
  61. {: ~8 @; M2 t2 B$ p: k$ _; @  K1 P! g2 b: B
  62.         // TODO: add construction code here,8 _9 v: ^/ J- @8 a# N/ J. F
  63.         // Place all significant initialization in InitInstance8 V5 o" e9 q3 ^6 C: K
  64.   EndChangeData();! x4 M) l5 Z9 D4 W% T3 C8 u
  65. }. }" }9 q1 f9 X$ f

  66. , R7 e; \0 ?( n4 V
  67. /////////////////////////////////////////////////////////////////////////////
    ; J& Z& B, k# x3 Y0 v5 u7 q
  68. // The one and only CRevAppApp object
    5 g! K9 j9 W% d; t0 i# R) f# G
  69. $ s. ?' G5 _7 K" g/ ^9 {- z: c
  70. CRevAppApp theApp;
    : {! n3 t) w7 R* M$ B' z

  71. / u" w! L0 ^3 ?" j. y( m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 Q( w+ @: x9 R1 ^/ ^( r
  73. {5 {3 p2 J% R+ V5 a# W& N
  74.   int iEOF=0;& ?  I% w9 t$ R: A& t" w3 k* r
  75.   char szTempName[MAX_PATH];
    + x2 P  W7 l. L& p9 Z9 e
  76.   *szFileName=0;4 n5 t" z5 B. G9 y8 x" F
  77.   iEOF=fscanf(fp,"%s",szTempName);$ x7 ?- t% V  V: j: H1 D) A# C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * ?  Y: O8 Q- T" q4 W+ @
  79.   {
    5 T  g4 m/ Q' k& ^
  80.     strcpy(szFileName,&szTempName[1]);
    " o: U( J! g" b$ Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 n( Z5 }4 B3 g% I+ ~( X! q$ \
  82.     {
    # i1 ~- F9 v0 x0 A
  83.       iEOF=fscanf(fp,"%s",szTempName);' G. e- C/ W) ^
  84.       strcat(szFileName," ");/ W$ B2 M6 G( w  o' Z4 @
  85.       strcat(szFileName,szTempName);
    ! h9 B7 N7 ^" c1 x* X* A
  86.     }
    0 Z- B; [+ G6 V0 y. d4 w
  87.     if(strlen(szFileName)>=1)
    9 {7 p4 I: K1 ~7 |  L2 v1 h: Y
  88.     {
    6 Z. k3 d0 ~6 g8 o5 A2 O- b5 r% s
  89.       szFileName[strlen(szFileName)-1]=0;
    1 B3 k& l8 j8 f% O8 B
  90.     }
    # w: Z' P; V$ y  }% R' A
  91.   }
    % k- a9 e% Y" w5 G
  92.   return szFileName;
    ( ?/ R* Z/ n  o( @0 j" j6 o
  93. }
    . B9 D$ f1 h) R/ r: h8 C
  94. 6 d$ u6 i" {) m0 O- c8 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). Z( k3 F. t  T
  96. {
    2 G4 {1 D7 p" X7 f; z$ r
  97.   FILE *fp;
    / {+ m) ]5 ]& u; q! ^
  98.   char *key=NULL;8 M. A3 n4 w: W0 o4 f( A& P1 i. V5 |
  99.   char version[MAX_PATH];
    6 `0 a: c/ q5 y6 w4 ^- ~, ^) `
  100.   LPUPDATEFILE file,olds;
    ' F$ T: _0 E3 I7 B. I2 h7 k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" ^2 E1 t6 _& N% u# \* e
  102. & r8 p7 g# S; R* b1 k1 n
  103.   UpdateList.clear();
    # i- c8 I; U+ B; G
  104.   UpdateFile.clear();# K/ {3 [5 i9 i, V
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 m5 \# n' ^: f5 R) r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % Y7 f" g0 r) }
  107.   fscanf(fp,"%s",version);
    + A4 s% ~2 p% S1 M9 i
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 Q& X9 \: i. s( t% `  ?0 N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 X, [) P. x6 x0 b5 w
  110.   {
    " h. `; Q8 h5 i& k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ d" \2 L: U# u3 n
  112.     fscanf(fp,"%s",file->path);
    . c+ D+ h& ^/ Q1 m
  113.     ReadFileNames(fp,file->file);3 t+ m+ [* E* F4 @+ G! y' e4 I
  114.     strcpy(file->full,".");
    9 g' Q2 g% t% U* [6 w
  115.     strcat(file->full,file->path);
    ) [! P! o" B/ v! O4 ^* S
  116.     strcat(file->full,file->file);% E" c5 V- S* C) b" p5 |! S; f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( H( f, i" a( I: l; ?( Q
  118.     {
    . |& D: ~/ z1 J& ]8 [& }! r2 N. H
  119.       file->vers=(float)atof(version);5 w( }; h) _4 M) L& g3 F
  120.       UpdateList.push_back(file->full);  ]% x/ N# {* r2 [( \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 \& s; j0 K* _9 f- s) N
  122.     }
    ; _) n2 M1 t* f; n
  123.     else4 Q8 I+ Z: g/ o( a5 s5 A4 P& W
  124.     {- B5 Q- F! v, J, j, `
  125.       olds=(*p).second;/ ^6 a) `, r/ |! S$ b; {, j, m
  126.       if(olds->vers<(float)atof(version))5 f0 c' `" Q& W( C
  127.       {9 ]0 j% B& W  g7 X0 E" H
  128.         olds->vers=(float)atof(version);- d% O, }5 o9 _- ~: f6 V
  129.       }6 d* |0 D+ ]5 D9 H9 c
  130.       free(file);
    4 Z" [( @( f/ q* N& |0 K
  131.     }( y4 Z7 @# [: @0 F
  132.   }
    , M! ?# C  A0 e3 S; A% `& {
  133.   fclose(fp);3 Z. u; U4 Y# r
  134.   return true;
    # \' ]' [( S2 l: M+ k; _  F" J% A
  135. }$ o: _3 p7 s3 ^4 ?/ q8 A  p$ a

  136. ' a9 g: r8 \: x, G! W- l5 \' f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 L* N7 t. O2 L& a# c6 ?. I
  138. {
    / n  ?* y% R- U# ^# R
  139.   TCHAR  szFull[MAX_PATH];( T/ ^, G. w/ Y& Y0 S0 X3 ?% B
  140.   TCHAR *token,*inter;
    $ {9 o1 H8 m4 p3 f0 x2 S& ~
  141.   *szPath=0;
    ' y3 q& M1 E5 e% h$ |& B
  142.   strcpy(szFull,szFullPath);
    ( w0 }! {2 v5 n
  143.   token=strtok(szFull,"\\/");- ?7 B! i% e& D) d
  144.   inter=token;
    ; g. v& M1 i) `# o! s5 }
  145.   while(token=strtok(NULL,"\\/"))
    ) H% y4 K: Y6 J0 g
  146.   {1 \0 @0 C! J! J/ Q+ t
  147.     strcat(szPath,inter);; O; K: r0 Q% E. p2 e
  148.     strcat(szPath,"\");) A. G- ^/ }  q3 Y
  149.     inter=token;
    / K8 S* e, R' b, y7 y" g) S
  150.   }' L- e- C1 h. m* X
  151.   return strlen(szPath);+ i& ]; X& @+ b$ \% J
  152. }2 ]9 B# D  J5 N" i+ q5 D

  153. 0 o: H. F8 D' `  q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    5 j5 N) H+ |* J+ _9 f; ]1 q
  155. {
    7 v& h6 z7 v! b! T4 Y
  156.   DWORD attrib=GetFileAttributes(Target);6 M8 m( ]3 e9 r% ?
  157.   if(attrib!=-1)
    / s; |; X# H1 M+ p3 k
  158.   {
    * R# g& L% n0 v$ W$ q" D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 j) w) m0 U! b, g6 _
  160.     {
    ) ~# b/ I! R% N' f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( D& s2 M. r# X/ k/ a1 G7 ^. y
  162.       SetFileAttributes(Target,attrib);
    9 T2 |- @( ~! r/ a0 b- v7 p
  163.     }/ J0 b9 a+ a! A) x5 P6 `$ T2 h
  164.   }1 F4 [& F( t& N. h; z
  165.   CopyFile(Source,Target,Erase);
    4 _. ?7 }# L0 X
  166. }. y' Q1 b# Y6 J  w
  167. # G/ [, J, Y+ A! k4 V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 }9 l7 k6 N8 V4 m0 T4 D
  169. {/ e. D# V' b$ z; ^
  170.      FILE *fp;
    0 e8 m! R4 t" h. `) _
  171.      char  szBuffer[8192];
    / P8 e1 k/ w7 P6 P
  172.   va_list  argptr;& ?* w6 o7 S& `% S' t4 m' _
  173. 4 f/ q( b4 M; z; t4 V0 f4 H
  174.         va_start(argptr,message);
      L. E* A3 R" S- X: C5 q
  175.         vsprintf(szBuffer,message,argptr);
    % f( i( k9 |! Y& u+ U: n
  176.         va_end(argptr);4 V* f: {4 w4 j8 w! J% F
  177.   fp=fopen(FileName,"a");1 |+ {* J! g( `% h+ O
  178.   if(fp)
    9 P0 g) C# s. Y% _5 v, S4 |
  179.   {1 `$ ^! K* a5 b9 S
  180.     fprintf(fp,szBuffer);5 v1 Q5 T0 B3 L0 M1 \
  181.     fclose(fp);. w- A  \; P4 D: \7 X! z1 f
  182.           _flushall();
    6 W$ Q7 K6 q/ e/ i, h% ]
  183.   }
      h+ j* w) Z7 z/ m( d# r
  184. }5 S; S' f9 f6 d. W8 ]
  185. ; W/ J6 t. n- h: Q: d6 N8 C
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - l5 L& }) L, w, o/ }
  187. {
    ( N+ X) y' J4 h! G) \  X
  188.      FILE *fp;
    8 |0 `' u$ P9 I8 N3 o1 a
  189.     DWORD  attrib;
    ) c1 q4 `& V3 O8 L' a
  190.   attrib=GetFileAttributes(FileName);2 t7 [# @5 |) P) g
  191.   if(attrib!=-1)  c' G& S3 G- T  \1 |  K: U
  192.   {
    * }! V2 `4 X/ N- ~$ k$ k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ @+ L: Z' d) S: v
  194.     if(!SetFileAttributes(FileName,attrib))
    2 e0 y5 |, Q, a/ A! L  [# T7 m
  195.     {
      C2 g& U& D1 k9 O+ D" ^
  196.       return FALSE;5 {  g3 G  Z5 f0 J* B& D% K
  197.     }, c4 ?( I3 y8 z/ U; n
  198.   }( e3 C7 R! p7 i( [. n
  199.   fp=fopen(FileName,"wb");
      X  h3 @6 C. R3 ^( g' `- v
  200.   if(fp)
    ) k$ e: T5 l4 D6 @! ^) J0 j; u0 E
  201.   {
    & [5 f. b8 ?! R$ `) u3 o
  202.     fclose(fp);
    ( a' b9 e# e0 P$ b5 O; \* j2 Z
  203.   }
    + @9 i& g3 K' J1 P
  204.   return TRUE;
    5 Z! v3 n0 B: k4 x
  205. }
    8 o+ U1 E8 M4 J; r' c; ~

  206. 1 _6 C7 K" x5 O$ L1 h
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 w; J/ A# e6 q( S) @# m6 D
  208. {
    9 Z( {/ |3 P  c9 C! R7 [. @+ b: l
  209.   char filename[MAX_PATH];
    . A/ B1 |$ ~2 I$ O( P
  210.   LPUPDATEFILE file,olds;9 O. j2 h8 I$ W$ s3 \* |; W! g# s
  211.   std::map<int,CString>::iterator i;7 t+ O/ r  ~% f: {; p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: H$ U1 B7 K% S6 |* ?
  213.   std::list<CString>::iterator l;
    0 F) P( z# H3 A2 o: q7 f4 n# x

  214. 8 _. |* ]9 U% G; j$ s
  215.   if(bFirstUpdate)  N9 d$ j. @7 w6 I5 D' G# k6 t9 k7 G9 i
  216.   {. k' e' z9 f4 d" G+ N7 D* ]/ r
  217.     dwCurrFile=0;
    . F4 }4 t) G/ J8 d7 {# f
  218.     bFirstUpdate=FALSE;
    0 ?7 r' E" N9 y4 T+ L7 [2 h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 _7 F5 S3 v, E3 r( e2 e# H% O
  220.     {- _+ L& f0 D" p, X1 D1 S* _/ e
  221.       dwTotalFiles=UpdateLocal.size();
    3 w: r  H1 o0 X# l& p9 e: T9 S
  222.       dwDownLoaded=0;. m/ |3 E0 q. R( r
  223.       bSilentStep=FALSE;
    . I5 `  J6 ?  N: x& K
  224.       bCompressed=TRUE;
    2 M) R1 y! J8 m$ M  w" j
  225.       strExtLocal.Empty();8 E' w5 H; V/ I
  226.       strFullName=(*i).second;5 Z% n& H$ ]# |1 W+ y
  227.       dwProgramState=AP_CONNECT;  ^/ M, g: `/ O6 m0 i
  228.       return TRUE;, G" K4 O  E; J: e" J, }! r' E
  229.     }
    - x4 p' ]( p- L9 s  z* ?
  230.   }
    9 \7 F6 l9 V% o9 n6 m
  231.   else if(bRestartUpdater==FALSE)* @& m; r3 H, \( M) w
  232.   {2 }* Y6 z- ?' [& T% m2 e( i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & Y  t' a4 R4 q1 j* ?5 ~3 W* ?
  234.     {
    ! f0 B1 n$ R" h  n# q1 a& f
  235.       file=(*p).second;
    5 S% N; G9 M2 L+ u: E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). k! L/ s' O" t5 Y# G2 N6 P6 z2 m
  237.       {
    ! T: e) |2 r+ ~! X5 }
  238.         olds=(*p).second;
    3 C0 o) v/ a$ N9 d# X% g
  239.         olds->vers=file->vers;* r+ i: n: ], X0 N
  240.       }
    " K+ z0 p4 r1 p2 i! u8 ?( \: I& J
  241.       else
    8 x3 t9 X/ Z5 z' w1 p4 P
  242.       {& N/ e8 Q. h4 _  z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 F: [8 X5 C. g; K
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      X' H3 z7 g2 }% X( b- B, p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ n2 s5 y) e8 L: i+ X( q: [, X+ K
  246.       }! X$ t+ s! S+ i" L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ ~$ W$ |9 f7 ^, u
  248.       sprintf(filename,"(%s)",file->file);1 {5 C- e& t0 h; J" w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % q2 F+ P- W" |- X8 n6 _$ n2 |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: c# M; C# e1 y* ^1 Q5 ]
  251.     }- ^1 {$ @, |7 M2 \  G3 P# o% h5 z3 u1 k
  252.     dwCurrFile++;: k- {6 V: a# _2 R$ f; A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# u- K. t" K* l) Q. T
  254.     {
    . U% U- A2 S- h9 T# H8 a1 W4 B/ k
  255.       bSilentStep=FALSE;% x8 V5 C( c9 B/ b- W( B& X
  256.       bCompressed=TRUE;# K, s2 p( r! ^& C+ @. @6 C, r0 {; O
  257.       strExtLocal.Empty();' f0 B" q* I- t$ b
  258.       strFullName=(*i).second;
    " O+ ?0 ]& Z7 E% p3 l. J: O
  259.       dwProgramState=AP_CONNECT;& h  {; x9 S$ q; J& r" N
  260.       return TRUE;( s& C/ W0 e7 c) K2 E
  261.     }
    $ s+ C- R0 D- r& K$ A9 \0 {
  262.     if(!bRestartUpdater)
    $ ?  P- n2 q& `5 y) S" [
  263.     {
    7 |7 Y6 V' q' Y. W  ~8 w8 a
  264.       int iCurrSize,iFileSize;
    * `& B5 u6 v+ B" g* v
  265.       iCurrSize=0;
    * y! a# Q0 O+ c1 F( M
  266.       iFileSize=UpdateList2.size();! {8 @6 Y; R7 M2 _# a. Z  a; q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: D# [& |3 A. e1 U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' q8 w* X* _7 F  F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 U3 U/ v% @9 \' C+ o/ R$ p, F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 ?2 j0 T  f) p- D5 J( U
  271.       Fclearf(".\\update.dat");. D% `+ H; [: d0 [
  272.       Fprintf(".\\update.dat","Bloodyf\n");# d+ x9 a8 V+ X; y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 D9 k/ w" z$ Q' F7 c  s  `/ X
  274.       {- e' n) v$ B; K5 r, Z% h# h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). l& l5 P! U2 j' o# w4 x3 t
  276.         {1 z* i- U0 H' H3 |+ P# z- ?
  277.           file=(*p).second;( e. g$ A2 y1 x" {: G
  278.           sprintf(filename,"(%s)",file->file);, D0 r2 A; F* P7 a9 ~8 n3 i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 v2 R5 V0 ]" k9 H9 z& @( m
  280.           iCurrSize++;# ]* z: K) n6 o7 {' {4 q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 I) O: R/ C+ x4 a
  282.         }
    " f0 K# j2 F, o) J# i+ ^# J
  283.       }" @8 w& x. \1 u$ N) P" q  ^5 Z$ p
  284.       unlink(".\\update.txt");# I* ^' w4 b! V$ v. n8 p# i
  285.       unlink(".\\update.tmp");$ s. d. J7 n8 ?6 x
  286.       Fclearf(".\\checkversion.dat");
    4 z- W7 S9 q& M3 N0 r- X+ g  j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 o7 U) f  U% p
  288.       if(UpdateLocal.size())
    1 T$ v3 x. P' M( v1 w- |4 N
  289.       {
    % T8 p( C* C6 A' v/ d7 `
  290.         UpdateLocal.clear();7 b7 R. T6 y- u7 r
  291.       }
    6 r1 y0 f6 ~, t9 s: t
  292.       if(UpdateFile3.size())% q9 c+ Q( y# w
  293.       {% C1 p  `+ ?3 G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 ^2 h) @5 R0 u7 N
  295.         {
    3 g( s% l. U/ x, Y3 q) P1 ]8 q
  296.           file=(*p).second;
    , S$ U% l4 a, }, e" o3 u) L0 S+ I8 ]' f( X
  297.           free(file);
    % g/ O2 W. u/ X3 c( F5 T, b
  298.         }1 c" n4 K" k, S" ^5 Q3 P
  299.         UpdateFile3.clear();
    4 O' F; z4 t+ o$ |
  300.         UpdateList3.clear();) v! Z, j) L/ \: }6 F; l
  301.       }' u8 y* l% b4 X* L( u7 Z7 T
  302.       if(UpdateFile2.size())/ U" g$ @6 @" |# k: s$ X; N
  303.       {1 I- v0 c; ^4 I5 k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 R7 {3 K0 s) a9 p6 e1 v8 o
  305.         {
    : K8 w8 O9 p( F/ n# }
  306.           file=(*p).second;4 A* {) C9 h' ^; \# j$ F. M1 `
  307.           free(file);
      P% Y/ a8 U2 c$ d5 ]
  308.         }. K: `4 X& |( z  {0 n+ _" }
  309.         UpdateFile2.clear();- V" R& M! G4 h8 \: Q) g8 J# I
  310.         UpdateList2.clear();
    7 Z5 N3 L) f8 r3 E6 W8 Z+ c  |
  311.       }( c8 n4 ^: o6 P8 l, u: J# p  A
  312.       if(UpdateFile1.size())/ Y% b9 M: i1 X. o. A5 L
  313.       {
    6 y5 j! Q5 w& \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , o6 d8 L# \7 }  @# v: ]! z" O5 X
  315.         {
    , r: L8 l5 C" p) T
  316.           file=(*p).second;
    1 D, A, a: K# o6 |' X; T& h3 R8 P8 g
  317.           free(file);+ V  s% R8 F: b' J5 S) E9 ~
  318.         }- X" U" n9 z. X9 y
  319.         UpdateFile1.clear();/ \& e% g( D/ y& ^4 m& I8 H( O/ N
  320.         UpdateList1.clear();
    * {+ |$ z- A3 Z) o. I
  321.       }
    / O' s; m) |' V: \' g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- {. G8 E) f! D; a3 s/ G
  323.     }) M, R% [& I$ ?  f8 \+ E* e$ N/ ^
  324.   }
    ! ]1 W6 i' [& O3 ]0 r
  325.   return FALSE;
    ! u) r% i6 x5 q) A; G  {
  326. }* x( V  @3 i) O- t
  327. ! C" ?2 f# a0 s: z
  328. void CRevAppApp::ClearAll(void)
    2 W' u$ I1 E2 N& q  Q9 p
  329. {
    # E9 G4 J9 h- m* i# e4 h
  330.   LPUPDATEFILE file;
    ' X; Z& |1 H. }! B  h3 c1 \# |
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) Y/ t& E8 d( f! ^
  332. / T( H) T( n3 x
  333.   if(UpdateLocal.size())
    6 r* J, F' @+ C$ |9 b! o
  334.   {% `& G- Y, K2 t  Z: V. I$ N
  335.     UpdateLocal.clear();
    - m! v) m- j: Q- P) T
  336.   }8 C; U( E1 R: o& [
  337.   if(UpdateFile3.size())9 L4 \; l& @. z
  338.   {
    - k4 A7 g' t* Y! ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 Z  l: [% g3 l) @) G
  340.     {1 F4 o1 t+ M/ U0 P+ u
  341.       file=(*p).second;7 `) D0 f) n! t+ `7 }3 X# C$ X
  342.       free(file);
    5 [( b5 x4 D$ ]4 T
  343.     }7 f3 N: @7 i1 [3 N0 M+ X
  344.     UpdateFile3.clear();$ i- h; i+ T2 b  A0 }( t) l
  345.     UpdateList3.clear();
    6 h; H: L/ ?8 p9 y
  346.   }
    + a" C; j# `! y" s3 o
  347.   if(UpdateFile2.size())
    0 L; l. {: ]' F1 V0 N4 [
  348.   {
    2 F5 W: Z8 ?* s; W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " s& [+ I# w  o
  350.     {. C/ s( l' Z4 B7 k
  351.       file=(*p).second;
    ; @& @( P! E) [' J+ ~8 o
  352.       free(file);
    7 F5 }! U, C8 t: L4 Z
  353.     }/ E2 d2 b& g  |& Y9 P
  354.     UpdateFile2.clear();
    ! l$ @/ ~3 [# I1 r1 n9 B0 {
  355.     UpdateList2.clear();% g* R% V& c7 c, C. o! x
  356.   }; O1 W% `3 C. J: Q0 h
  357.   if(UpdateFile1.size())0 [9 p8 Y% S: O
  358.   {* y* Y2 _/ i2 z  M' K1 X2 O2 n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( k  U! l7 d. a
  360.     {, ~2 L# m+ i1 P. d2 I- z
  361.       file=(*p).second;4 T7 w& |; H6 s
  362.       free(file);2 D3 `4 Q# y$ G- x
  363.     }: c' H+ U6 H# L4 ~' [8 ]3 Z
  364.     UpdateFile1.clear();
    , Q+ w. U0 F% W# e. `& p
  365.     UpdateList1.clear();
    6 v: g/ n" S) w# U
  366.   }
    ' v. b( `7 s# Z
  367. }  
    $ i4 P! }% G; _0 l2 O' z. @
  368.   
    * q5 l5 W; o' C* _& O! q* i: N
  369. BOOL CRevAppApp::CheckLocalVersion(void)' b6 z$ j& H6 H% z
  370. {
    8 m! f! N% @( w; E$ j+ [" t: q( a
  371.   int c;  w5 p+ l  S7 ?) r4 u' l
  372.   LPUPDATEFILE file1,file2;) G- q" v4 Y/ S  B6 U' Z0 a& ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* I( A6 n5 H5 g, e3 A7 t  i; Z+ _
  374.   std::list<CString>::iterator l;% C$ u0 R5 D  O$ m% l1 |

  375. " a5 b* ^! c# }7 P
  376.   UpdateLocal.clear();
    7 e( ^( r. B* L$ a8 Q3 ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);5 I. ?& H/ E; m. f/ L9 {6 U3 D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # U' C- X9 k# z/ m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 i" j' r" D. }. ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 p" M1 R3 L' T' S% X( }- v
  381.   if(UpdateFile3.size())% C( B, Z/ I% v5 X
  382.   {) U1 d3 g+ n$ p/ U; J6 B* [& v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 F6 h4 a4 n+ s% U4 p) {5 B9 m
  384.     {% |  H9 d7 C- O/ B
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 `1 j! B1 u- ?- Y% b. D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) e3 k, V. R6 v$ `/ h
  387.       {6 g7 G- M: w) M* s" |
  388.         file1=(LPUPDATEFILE)(*p).second;2 f$ R( O7 T8 z* m
  389.         file1->vers=file2->vers;7 F" G, m+ \/ t% C5 I
  390.       }
    * `: M( [  x6 r( |6 F
  391.       else
    ( ]' \% t0 H  U3 P+ B# X, G
  392.       {
    ' K: _8 f# |8 ~0 t- f
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" ~; r; a6 D& G, }# r  O- W0 L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) r9 Y" j: p: A1 i/ C" O: r$ ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 s) m4 Y+ F5 S7 ^' e7 P; u4 V
  396.       }
    ) t5 }  p8 |& _  z/ m9 E$ Y1 Q1 H
  397.     }
    # x& b7 Q2 f! z$ s  ?* s
  398.   }
    1 j7 ]) k: P4 S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + w3 J4 O9 K" Z2 m/ {! Q( P2 k
  400.   {( v6 O9 ]# X4 w1 F
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' ?- u" l/ m! E: d" @* c
  402.     {/ |  ^1 r1 t& {) S+ q$ Y- F# x- ]
  403.       file2=(LPUPDATEFILE)(*i).second;: _4 S0 t: T5 y8 t9 }6 W: o
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * u, \7 f1 i1 _+ C( z& F: ^
  405.       {
    ! ~- Q3 n' {* _. `: o8 N
  406.         file1=(LPUPDATEFILE)(*p).second;2 K0 R: N6 S3 N5 y4 p* {) V  Q8 K
  407.         if(file1->vers!=file2->vers)1 j; A- M  o  P4 A! g8 N" t
  408.         {+ b- ^4 x  {# ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 _0 o) p3 ~+ @; t% A5 g
  410.           c++;+ Y' N' j2 g7 j3 P1 P2 U
  411.         }  A5 N( O" [( q- c. R+ n) ~
  412.       }) O2 h2 i' F6 P7 M
  413.       else4 Q" q6 U- c, @) c' a
  414.       {
    + g+ E) V0 F" P/ }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - y5 s5 \+ N* b! \7 c2 }$ H0 N
  416.         c++;0 J8 i% j! Z% I3 o% o% ^! N; U
  417.       }
    4 y' W* _& K8 X/ t  f0 m
  418.     }
    ' K% B; d7 h. s0 n: Z. }
  419.   }
    & j: ~1 x3 w: {& N
  420.   unlink(".\\DownLoad\\update.txt");) `- X! V" k2 M( _. E* u1 r  E" r# M
  421.   if(UpdateLocal.size()) return TRUE;
    - @9 I' y, a. Y4 P5 Q
  422.   else                   return FALSE;
    0 `( X6 P" |* z; q" b7 n( p8 [- M
  423. }8 S4 l9 m4 i' L5 a0 X& E2 _% D
  424. 4 m1 f/ c& N1 X+ y5 o) @7 q3 m* u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    6 j: ^& T0 @: N5 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& h3 p. U5 |( V
  427. , n, n8 G1 y6 I5 F

  428. 6 q2 l- z( V: @( O0 _

  429. . l0 n1 m; |  v- f) T' Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' E# W3 t  I, c- L$ {) h
  431. {7 U9 p$ |+ b% K5 k0 ]4 Y5 m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " H5 B, a, V3 z! k) o3 ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( [. E" c$ u' H9 b& C+ t6 g
  434.   {3 D/ H' N, I+ K' k. h0 m5 ^
  435.     char szLanguage[50];
    - F2 j5 R$ d5 N2 q9 W. M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 d  w6 Z' @* g# h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 ~) ]" q( G) w, f( w3 M( e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% a3 [- Z& p; \/ q- |" I8 f
  439.     else                                   m_iLanguage=ENGLISH;
    , M, f3 K; O! c/ c7 ^/ f
  440.     char szRegister[100];# ~% q" e$ D/ x& v! r+ U/ n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & G  W; Y" s( f! w6 O, s  P* l
  442.     strRegsName=szRegister;
    ; e0 w$ [7 j7 `$ M: u( y; g5 I) E
  443.     char szPatchURL[100];% W! e8 B9 N1 V! [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* R6 n; F) Q8 N4 H1 l5 o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 ~7 j2 G$ T% D/ e: Y
  446.   }
    & P! f3 j; @) Y2 d
  447.   else
    / u! j7 D& C# S/ t1 Z- q: ^
  448.   {
    4 d, w! N1 x9 [  u( C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , ]: i% s! p7 z* \
  450.     strRegsName=DEFAULT_REG_URL;
    5 b. {+ \! H+ M% H  N6 w( r1 q
  451.   }% I. ^9 k; H/ |8 {, V
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ' E) ?" U9 T' U7 V
  453.   {1 ^& T( [# ?5 j6 ~" |+ h
  454.     char szIP[50];
    . u% a; E% l$ g$ q2 a, U  T
  455.     char szDIR[300];
    ' `- X" w* C0 n- m0 B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! {1 c+ N4 o: [- K/ @! C
  457.     {# T/ O8 P% d  @( G2 z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 W! c/ }4 N& J% p' y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 q+ B$ I4 f, N- n0 ~* L
  460.       strHostName=szIP;1 I- Y& y& W2 g- s
  461.       strHostPath.Format("/%s",szDIR);5 X6 ^* B+ P- B7 J# f5 H3 l. n, p
  462.     }* U. ~2 U: u- {
  463.     else
    5 W& e' b% P' @  a& I2 }
  464.     {2 S+ q3 V+ F5 x! G% d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' V# [6 x; L% r% _: L4 G
  466.       {; ]; Q* a+ {. q' O0 v$ @
  467.         char szLanguage[50];
    5 w+ W$ H) \6 V$ m1 X' r, B2 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. k# b6 w& C+ {/ D. `8 Z6 g: C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 b9 a5 V/ f+ [& e* D" a$ [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 {. ~* B5 n7 n! B+ t* x+ |
  471.         else                                   m_iLanguage=ENGLISH;0 A" O( m3 `& }$ |. A% U+ m
  472.         char szRegister[100];
    ' {4 w. k7 w. x* ]3 L3 \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  Q! S" d' \- {1 a
  474.         strRegsName=szRegister;
    - {" J- o. F  _9 o4 y* E- W, l
  475.         char szPatchURL[100];5 N& r8 b. v; {& j# i
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 @4 k9 H' ?/ y% _/ t6 j2 Z5 L, ~
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ p+ }0 u! J$ x+ Y# N4 `4 ]
  478.       }
    6 h$ g' O8 X) [, G) Z* O! @$ a
  479.       else
    5 x$ q* K/ I7 a
  480.       {
    3 \0 B# E; U) u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) y& Y- s9 R; o+ O: M, X
  482.         strRegsName=DEFAULT_REG_URL;, C+ N4 g6 `* g( M+ N2 x
  483.       }6 z# O7 k- B5 D$ t$ L
  484.     }5 D/ `8 }; j  T8 w& N
  485.   }
    6 Z9 C) x' S: [9 ~
  486.   return true;4 e" i& p1 U% p8 D: Q
  487. }
    $ v3 T& P; k, v! p! Q& F2 t
  488. % x* _5 O5 Y- Y) ^" c) }; q
  489. #include ".\ZLib\unzip.h"3 P+ c( T) b4 U; {" ]
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    . u9 t0 f: ^4 @! |) j" ~. X
  491. /////////////////////////////////////////////////////////////////////////////- ?+ Y: Q* `7 {' A9 B+ I
  492. // CRevAppApp initialization
    2 D( l* E9 H, _/ z8 v
  493. # t' w4 k! l0 u
  494. BOOL CRevAppApp::InitInstance()' C% R; M' n" X4 S  h
  495. {' i; y9 f" E" {6 y# N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - f/ K3 |9 V& l) y8 U6 o% P. ]

  497. * G% K& c3 s# t2 z+ V. _& l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 r1 f; x$ m' z2 p- S- `  D- _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # O# `# x# C6 `
  500.   {/ Q6 Y& v) _: H1 ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    # S$ ?/ N' ~" h  S- g) ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * q* Y$ _# S, ^  ?# Q! W( H. `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 ]9 z+ ?' r' B6 }1 ]) z  z) |
  504.     {
    ! O7 W! ~8 ~7 V. }
  505.       strcpy(szPath,szPathTarget);
    , {5 j  e5 S( E
  506.       SetCurrentDirectory(szPath);# q! i; e6 N6 y" o" s. J% h/ |
  507.     }
    # m7 m& m: s3 Y
  508.   }
    2 A. F8 b& C9 z- W2 m0 @
  509. #ifdef _DEBUG  h4 p# T; s6 R, M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 h! p2 K( A, |! G  G3 `
  511. #else
    . Z0 X% y) p8 _2 G8 D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 q2 D  Q! w( ?) }5 V6 E
  513. #endif6 g* m  ]3 a/ P7 q+ Q0 J; W* l1 H
  514.   {
    , J# u3 b% x) X5 G
  515.     char tempFileName[MAX_PATH];
    " C+ i! e1 W3 \9 O, n& x
  516.     strcpy(tempFileName,szPathSource);3 E8 h% J1 z) z- h" U* V/ ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) G* B2 n+ N; D8 ]3 C4 o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( E+ S( O/ @; v( v# q( F1 `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    9 s; R* t& ?( a% a* d9 r. O' Z* m1 V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , d' {6 C: \6 V# c6 q" Y
  521.     return TRUE;" X" ?* v. q: \# C
  522.   }
    7 o7 w6 b. v4 c
  523.   // Nuke 0118: Delete run.exe
    + ~+ M1 m( E# P; U& p0 P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 M4 i% D3 P, i; h% v, o9 x- P  G$ r; J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / m2 A, B1 C5 `! Z. I+ a7 S
  526.   if(!ReadCfgFile("Config.ini"))* ^+ R& v# a7 C2 a
  527.   {0 v7 ^4 u; ]7 |  y3 \3 l* y% X& U8 x' T' L& ^
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # }! T# n  j+ y5 G$ @
  529.     return TRUE;
    1 J' c0 V. w6 T' q% r
  530.   }
    6 W6 T9 i% u  z: o, r
  531.   HANDLE mutex;
    9 m+ ?# C1 ^5 G/ t6 d( O1 ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " U0 @7 r4 {; ?! a" B7 ]
  533.   {& P, M$ q, m' g: R8 h, E% w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    * E/ I0 c  B0 O& O2 M
  535.     {3 m4 T  T/ |: e9 e- Z$ i
  536.       CloseHandle(mutex);
    3 G& r" I# L" C$ u, c5 p/ q5 n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 P' }: K) x: O& L% j6 ?5 Y; t
  538.       return TRUE;7 a! _7 r" K& J  b
  539.     }! S: y. q  H9 r
  540.   }  8 U1 A- b$ U! r  q3 B, \
  541.   CloseHandle(mutex);2 F6 N: o6 C7 u/ M2 Y1 `" e0 V

  542. : Z- E* k; m" ]& e  Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + H+ |/ G- T$ E1 q# c: }

  544. 7 W2 m1 [. F5 s
  545.         AfxEnableControlContainer();: F  }9 q! N6 o+ T; @; F

  546. # L9 t. M9 ^& L, C. X  i
  547.   bCanUpdate=FALSE;
    ! I: O9 U" J3 A. I& L. Z1 X
  548.   dwStartUpSteps=1;
    , d: q7 u2 W" T) q
  549.   dwProgramState=AP_NOTHING;, R! e# R+ K5 O* _' V6 Q# T
  550. ( e" r/ u  W0 ]) M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ' }8 S% R5 n" p( h2 y. ?0 a) ^
  552. 2 m% d, V8 m0 w; d
  553.         // Standard initialization! ]% i6 w* ], b' L
  554.         // If you are not using these features and wish to reduce the size
    ) q1 z! O. X& R2 R7 ~
  555.         //  of your final executable, you should remove from the following2 `4 r0 ^7 u' B  Z$ k3 I+ {
  556.         //  the specific initialization routines you do not need.. w+ S' H5 x( R, g( s" [9 u. I

  557. & G3 Z1 x2 Y* g7 \% Z7 u2 _- V
  558. #ifdef _AFXDLL
    ; e9 Q5 }3 V. J) B, D$ S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# c" D: w* {% n+ b, }; ?/ A
  560. #else; z; F) @0 [) J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) K- T! g6 Q% @5 b; `( l9 H" }
  562. #endif5 }+ D/ n  |# L0 Q" O0 v. A6 K

  563. ! E: u- N: Q$ H! ~$ `5 l  F
  564.   dlg=new CRevAppDlg;2 w  S8 k. t# O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / ^4 f) \, S7 J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * ?+ e) \- u) x& F
  567.   m_pMainWnd=dlg;
    7 h; `/ h3 Z- T. d" l

  568.   K) i. ]' |% f2 I0 V, F  ~' a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' f4 ?! B+ f/ s( v# |& o

  570. ) U' g& @5 B( X  i; E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - a9 E9 }5 c6 y  @  o7 N
  572. //  ULONG_PTR gdiplusToken;
    . _/ t+ J' ?8 F* \. x0 J  j4 @
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);2 ^4 M. w! g' \$ K  V( ~1 O

  574. : [0 S  N  A3 o( V$ A: L8 i
  575. //        CRevAppDlg dlg;
    4 ~. v+ i6 g6 z* ?3 W
  576. //        int nResponse = dlg.DoModal();
    * K! ^/ n9 y' ]$ i1 A! F
  577. //        if (nResponse == IDOK)7 d# y# f8 W8 K* }; }/ p
  578. //        {" M8 j  Z0 z5 K! G: Y
  579. //                // TODO: Place code here to handle when the dialog is
    7 E4 |, ~" B; r
  580. //                //  dismissed with OK2 d# O2 ?. t. B& N# e8 k& M
  581. //        }/ ?0 c) ~0 I) @- M: i( P/ x/ f
  582. //        else if (nResponse == IDCANCEL)7 ~, G( P5 Q: r
  583. //        {! e! y/ v6 y( t3 a& C- g6 s* a
  584. //                // TODO: Place code here to handle when the dialog is
    3 [1 G& v; \6 B: G) s( j, ]. K
  585. //                //  dismissed with Cancel
    - o! D6 @( Y0 M1 }% f  _
  586. //        }+ |8 D5 N( e# a" }% j9 m
  587. 7 f* W8 H1 C4 a
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 Q; }4 x  E9 M3 R
  589.         //  application, rather than start the application's message pump.
    8 T/ l+ G4 d& L$ G" V1 T
  590.         return TRUE;+ h: {- l& ^4 h' N9 D; g/ |( I8 ^
  591. }% `6 y* |# b3 e+ {0 |

  592. # S$ S3 _4 k7 Y7 d4 W. j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 n% p7 z8 N& @, ?/ P
  594. {
    3 q7 L+ m( l7 D
  595.   int i;
    , T* x2 i, X3 Z* l
  596.   char *szRet;( A- F( ]7 k+ j! M

  597. + h; \( K5 y( E5 W3 r. }4 e6 N0 P$ [
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 K3 ~" ?1 m3 U, T, k# f
  599.   if(sztoken)4 ~4 F7 ^$ m5 W
  600.   {
    9 B0 N# _' q- W; `- H
  601.     szRet=&sztoken[itoken];
    & _" W! Q# @, T% F
  602.     while(sztoken[itoken])/ c/ O, k% R3 s; F+ e% R5 K
  603.     {
    . S1 i6 C' N1 J
  604.       for(i=0;i<(int)strlen(token);i++)
    ) ]4 \6 }( v6 M$ Q4 W* t
  605.       {
    ( t' E; R1 Z# p! a: Q- j+ s" X2 h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 c4 e0 T$ g# U4 ~* C2 ]
  607.         {
    - a3 q7 Z4 r0 j6 p' v( ?+ f
  608.           sztoken[itoken++]=0;8 ~# S# ^$ F) N; z* _0 {4 \
  609.           sztoken[itoken++]=0;" ]: {* Y; V& M# H# p
  610.           return szRet;! c3 b, j2 }3 y, @; u
  611.         }0 @% ?, g* ?  t8 P( N
  612.       }1 S' [6 {1 N) W  O) S
  613.       itoken++;" k: L1 d2 X" {0 z: [
  614.     }6 L' X7 ]) ~1 j1 q$ O$ H$ j
  615.   }
    # {$ c  C% L  Q6 _" |& G
  616.   return NULL;
    + E% ?+ a! `, q# R) W' N
  617. }
    * @8 I. ]4 P: A9 v+ p
  618. . e0 e. Y3 z: M( H8 z8 c7 E* f
  619. void ProcessProc(long Total,long Current)
    " o6 U2 q& o- f- ]
  620. {6 t- W* g, S: m: A* B: I0 ~
  621.         MSG msg;
    ' N/ g, X' d/ U2 _: M/ ]$ p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; c0 o/ ^  Q# x$ u4 C2 I( W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));. Z# p/ I* F1 }% F2 o* F) n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 t) u, U. R: t8 n2 ~
  625.         {
    & X' y% [5 ]2 [; g1 Q/ E
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 E7 k  A7 m1 H' I  Q! D3 b2 e# f
  627.                 {; T1 k  v# p" D# o% l; P
  628.                         return;
      u0 x! w) o# k& A6 u& p0 X
  629.                 }
    " E6 f! \& Z" J, v8 p' d
  630.                 TranslateMessage(&msg);
    : d7 X$ @$ z4 E6 a7 q
  631.                 DispatchMessage(&msg);' z) e! E0 I9 v% Y3 W
  632.         }        5 x4 `4 y  G7 m2 f4 U  H/ {7 z0 H4 Y  ]
  633. }' N3 t, r4 e( _1 U' _( W1 q4 J  `

  634. 3 y0 l2 R- U1 [( S7 ?
  635. BOOL bFirstChar=TRUE;
    % }' o( \6 Y1 I/ J5 r, \' w
  636.   c: L* ~2 B/ V& J* L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / _4 \$ Y* c$ [  Q. M, b, R# U' G
  638. {) q' z/ T1 ?; g+ C/ v- b- a
  639.         // TODO: Add your specialized code here and/or call the base class( o* y6 m4 w3 x; t* Z1 @
  640.   switch(dwProgramState)' M) O! x% A% ~1 P) _* v
  641.   {, i) D) a! `' J6 `7 |" ]+ R
  642.   case AP_NOTHING:
    - z, e+ P# X" d3 z( s1 e
  643.     switch(dwStartUpSteps)
    7 j" n  _  k& V' h7 c( R. S
  644.     {  J3 r$ F2 S7 ^* c# J
  645.     case 1:! f4 m! C; |: _5 S9 H7 L
  646.       {
    , F; [6 e; J# g6 z* k( C6 J
  647.         int i;
    7 s: J3 h# B. A
  648.         CDC *pCDC=dlg->GetDC();
    " f1 u+ [: D' G% c! X) z" h
  649.         HDC hdcwnd=pCDC->m_hDC;0 U* U0 j9 d" ?  w
  650. //        Graphics graphics(hdcwnd);3 D# S( r- C) N% p, G0 U; y  Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * f! g4 t' v% i, O3 H
  652. //        INT iWidth=bitmap.GetWidth();
    6 ]8 v) K9 V1 t( W
  653. //        INT iHeight=bitmap.GetHeight();
    . P/ v2 _/ z  }$ D9 C# @
  654. //        Color color,colorTemp;
    ( m& L" w* {$ [5 |; |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) s  w1 @/ u  `7 C2 H
  656. //        {9 C* w2 i( }7 o. @4 F" i3 L2 v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 o: R' P( ~( R) j, p5 A$ ~7 O: D
  658. //          {
    1 R: p/ _9 P+ Y0 T- X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* U3 z5 A6 O1 ]- ]' Y% |
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 f$ G$ e; }, R+ U. D/ b
  661. //              (BYTE)(255*iColumn/iWidth),
    8 C: \7 P8 B( R& j3 P1 f. m
  662. //              color.GetRed(),6 P9 y* ]& c1 V
  663. //              color.GetGreen(),3 W( a+ I1 h" `2 z3 m
  664. //              color.GetBlue()));' \/ Z9 w( N8 l" J# J, {- f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * n# T. e: c# W+ m: m0 o6 Z
  666. //          }0 n( p' A3 g2 q0 ~" i
  667. //        }
    % A) u( I- k4 u, A* P9 @4 O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' _7 q) Z  L. p( e3 f& |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) c: E1 D; c2 p6 |. j. c6 v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; Y7 H: N) [8 ?* \9 e, N) n. X+ f; q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 b+ b% X0 J; b& I
  672.         for(i=0;i<240;i+=8)+ R2 T4 y8 A& L4 f- ?7 q+ }
  673.         {
    " Y- k2 m2 Q4 W0 B' ~$ ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( C  W; b) Z8 R1 s' K9 F: E" i: ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 T' C4 g2 d8 J: k# L9 s9 I, `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 u% R- V/ u  s% f2 H8 Z7 L
  677.           Sleep(33);$ W& e: l1 b; P' c
  678.         }
    " `1 j& z) G2 [% h
  679.         Sleep(1000);
    3 e* _; F% C4 @, O' A4 D( ~
  680.         for(i=240;i>0;i-=8)5 c" |4 E+ q) C9 [  H
  681.         {
    : V5 \+ j: Q6 X; O1 `2 Y* r/ V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' h! w( X5 F; @; v; }
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ l. A( O% ^. R9 c- H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( k' v3 n+ p) {8 Y
  685.           Sleep(33);
    * C8 O3 p, c+ |; k2 R9 `
  686.         }2 p, T  U6 L  e. e2 H4 M2 A7 C* C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 D  W) C  N. e! p3 U9 H
  688.         dlg->ReleaseDC(pCDC);3 o- i' K- K7 U' o0 B
  689.         DeleteDC(hdctar);
    # Y, ~: a' U7 ~8 q. Y
  690.         DeleteDC(hdcsrc);
    2 g% S7 H0 c3 b( g
  691.         DeleteDC(hdcorg);3 `( `$ s! h( j7 q6 b
  692.       }
    ' e. u. M5 N* {9 |
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ v- n& Z* N! e2 n/ u2 y7 r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 N  Z5 {; q' C% ^+ f- ?
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) S8 {5 g& ?& C( j- D' |3 O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    9 t7 B5 |/ M! i# e7 P# }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . l2 J$ c2 e6 @# d
  698.       if(!Dn.Connected())
    " J9 }9 D( z# H, u  c
  699.       {. N: D$ ^  {2 ?1 ?
  700.         dwTotalFiles=1;
    : M. c% p- P9 v$ k' B
  701.         dwDownLoaded=0;
    7 k6 M" e6 {) Y# M0 e5 q+ `2 e
  702.         bSilentStep=TRUE;) a: t* M9 c" y) A2 m- h
  703.         bCompressed=FALSE;
    / F8 C' v- e9 R( X
  704.         strExtLocal.Empty();+ @: L1 Y8 B  A6 R
  705.         strFullName="readme.txt";7 V: W# D/ A0 F5 q' x) S3 k- I" `/ U
  706.         dwProgramState=AP_CONNECT;
    ) L# A) t" m# U2 w
  707.       }
    # C! G; l4 f) n+ M! k" |9 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 E( r) ?) t! Y  [# d
  709.       dwStartUpSteps=2;. t1 z1 k  i- j* m( n
  710.       break;
    3 e5 V2 H: H$ g$ f
  711.     case 2:
    6 d1 H( Y9 U& l  u8 ^$ t
  712.       {
    , |; A' K2 |) _, N
  713.         int iEOF;! T% B$ h  W, p. I
  714.         FILE *fp;
    1 e3 f' H1 Y- G$ f6 E
  715.         char szString[512];" J5 ]$ V  `# W9 \
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / z$ n' Q$ d7 x( Q) {2 e6 B
  717.         if(fp)
    6 k& u& R% b  T3 B
  718.         {6 v; B! m; R7 |; _
  719.           do" w( c" `, v; N4 `2 P* {9 B
  720.           {
    4 A- J) |: L' t! \, `9 h" s
  721.             iEOF=fscanf(fp,"%s",szString);; i; L* |% Q. Z/ o: C# f9 M
  722.             if(strlen(szString))  R4 u: o! ?( }
  723.             {5 p$ G& W0 L  z% p  h
  724.               if(bFirstChar)
    $ G: z; C: `5 U1 _
  725.               {& |4 E2 u) g% \7 u. T$ }' U! B
  726.                 bFirstChar=FALSE;
    ; T5 w; u- R2 Q) n
  727.                 bConnectIsBig5=FALSE;
    & \: D; e; t5 p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;" r& _( V7 ~3 m: k2 {8 }; L+ a
  729.               }
    5 b4 M/ X7 I  E% b4 R& i5 j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));. i% _3 g# W% i7 ]  \- ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 [, V) v# z9 r5 z7 k
  732.               dlg->m_ListText.AddString(szString);& i0 Z$ p3 Z. ~+ e1 b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 C1 y' B  U- A" H
  734.               *szString=0;2 S; S6 A5 z4 G$ N$ w
  735.             }. y  E4 N! J" @' R# U! Q8 K# V
  736.           } while(iEOF!=EOF);# O2 Y7 a, I) E, Q  \( h' M% b
  737.           fclose(fp);: i/ q( s2 @; U  [9 n2 H
  738.           unlink(".\\DownLoad\\readme.txt");4 S& `, j2 X& O6 S) n7 p, S3 h
  739.           dwStartUpSteps=3;2 e+ w* `* A) x- r
  740.         }
    ( M) G$ g. v7 ^+ @
  741.       }
    , r2 y7 E' P- r0 ]% k! A9 {
  742.       break;9 s& @3 }  G' f  w# ~0 {* j% M
  743.     case 3:
    6 v& G3 @' ]9 A7 K
  744.       if(!Dn.Connected())5 I5 a& l) X5 S+ b4 t
  745.       {- x0 r6 u5 g* U2 y# b$ h& }# q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& o1 Y! R5 a% i4 {5 x2 h+ V
  747.         dwTotalFiles=1;8 h4 J) x2 X5 e. Q( ?8 L; q
  748.         dwDownLoaded=0;: f# Q2 s) V7 b4 W, t& B5 h4 X
  749.         bSilentStep=TRUE;0 n, B, m2 F4 e$ }* {
  750.         bCompressed=FALSE;
    ; g; }6 J/ @! m9 z; n3 @9 E' @* v
  751.         strExtLocal.Empty();' q; a) }& P6 P5 Z
  752.         strFullName="checkversion.txt";6 g, E  {# W# V7 I
  753.         dwProgramState=AP_CONNECT;9 _& Z0 M" E' b
  754.       }
    . h7 M$ y. ]3 ~* D
  755.       dwStartUpSteps=4;  I0 @: |: D, w5 M0 _. _+ P
  756.       break;1 X4 d/ l# W$ W8 r& Y
  757.     case 4:( z3 v4 \/ q$ B2 t# L
  758.       {
    , |+ ~. W" ^5 B6 `2 ~6 c  r
  759.         FILE *fp;9 c; M, u: Q( A# u9 @6 r9 r
  760.         char szString1[128];0 Q5 @9 ~( r2 D6 i- D* z
  761.         char szString2[128];
    9 [' M; A" [4 ]; C' O7 O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " F5 O8 S- K; u" ~3 I  ?% G6 C1 y5 f
  763.         if(fp)% K% D' u0 G1 v, ~
  764.         {
    & O. f: X* B  C3 b! W( _
  765.           fscanf(fp,"%s",szString1);
    + C: l) E5 F' Z4 W
  766.           fclose(fp);
    1 C) s1 e3 c4 o& }; f
  767.           fCheckVersion=atof(szString1);
    ; d1 l7 E1 M0 ~! Y; R8 m  u' g# s
  768.           fp=fopen(".\\checkversion.dat","r");
    7 ^5 J" Y5 s$ Z1 `5 [! `) F8 h
  769.           if(fp)% _( ]) g" V( _6 s1 ~- J
  770.           {5 i9 M; u9 D. I
  771.             fscanf(fp,"%s",szString2);
    : `7 N8 K4 j" a5 G4 h
  772.             fclose(fp);' h& ]8 J: O, n5 j
  773.             if(atof(szString1)!=atof(szString2))
    ( S. A, B+ X' l% T0 e5 r7 I
  774.             {2 {+ G9 z/ {  `
  775.               if(!Dn.Connected())1 A. ^% O( V. d+ D" o
  776.               {
    8 Y/ Y4 E- u8 p
  777.                 bFirstUpdate=TRUE;
    - i9 O: k7 i& Y
  778.                 dwTotalFiles=1;- L" y, i; D) ^  S
  779.                 dwDownLoaded=0;3 F( }& o5 |1 K
  780.                 bSilentStep=FALSE;+ R- D+ t3 k2 y( d. {$ I$ \6 E
  781.                 bCompressed=TRUE;- {4 C: k5 z1 \6 F6 y$ R) _) C
  782.                 strExtLocal=".\\DownLoad\";
    0 {7 i& E- K7 R. t# ?% Y
  783.                 strFullName="update.txt";
    4 ]8 J( U, H2 a, k7 M6 u
  784.                 dwProgramState=AP_CONNECT;
    * t! i4 C* L  Y) }$ x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* S7 a& ^8 u/ p- r$ A# e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 O  k8 J( ]7 B& X5 e& M! U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      [2 J4 |) p' ^+ ^1 z7 C) `
  788. 0 ]/ w2 p+ V% @5 W% H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : w" [/ M  X; a
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 Y8 s* o$ g8 \$ D$ k! k: J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! w- z5 m8 d9 E; |4 t
  792.                 {
    3 D2 e7 O; F  C$ c9 Z: o7 I- C& w) o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    / `# Y# ^1 n) ?. d# ?7 P$ [7 L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");$ R! G$ c! i0 y: w% b1 }$ R4 S
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 ^7 ^2 @8 p3 u9 |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : n) S2 d% T. D  ?

  797. 2 b! L$ }1 z+ M; F' }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - a- {, U4 K: L$ A/ V) i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 g: T2 G. H1 R: g  s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: Z% ]4 Q. x, k' b# B( c/ u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( d, c% t* u% A3 n9 A4 b& t
  802.                 }% _& M# p$ p0 w9 A8 k
  803.                 dwStartUpSteps=5;7 B1 y7 @# O" O  i+ d) U
  804.               }
    & f% }- w8 V9 l5 A* c: R( p
  805.             }
    ) L0 x2 P$ u2 N' x: u. ~3 |5 g6 ?
  806.             else6 v4 a# U6 Y* O" o- s
  807.             {
    " g5 k, w* n) D% m6 B, X
  808.               unlink(".\\DownLoad\\checkversion.txt");* C0 q2 Q$ z  q3 h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 |  \& b8 h( C  a/ E+ ^) O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , K" M+ w8 ^7 P, C, a7 A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + E2 o4 T9 I. W' t, `
  812. # P5 Z$ @1 R& j9 P2 Q) U" L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 V: z: A4 b& v) }- i, G
  814.               dwStartUpSteps=99;
    5 t$ [* z9 X9 p) p0 B! G4 `' b* |
  815.               bFinishUpdated=TRUE;! [! e& N( E7 e' C  o& d  j
  816.               bCanUpdate=TRUE;
      w, |5 P  T% B; u, V. r9 c
  817.             }
    - l' I7 P* T; m" r4 ^' H9 \
  818.           }, v  Y# S8 X  l+ n) p
  819.           else
    2 l$ j  G; ]3 P# z, D
  820.           {
    0 N- B0 D1 E6 Q, B: g4 e0 C$ M8 p
  821.             if(!Dn.Connected())
    ( y. L5 s& }" q; T; D$ L" I
  822.             {! |5 }  k! I8 x6 u# |
  823.               bFirstUpdate=TRUE;
    8 k& A8 L7 M7 I& q, H; K
  824.               dwTotalFiles=1;
    - \  Q0 _  {) v) p1 H+ p$ [& c% K4 e
  825.               dwDownLoaded=0;
    & J0 {/ M/ M" {; M
  826.               bSilentStep=FALSE;
    * T& R$ y7 Z' B* m9 \3 a. M
  827.               bCompressed=TRUE;* \- Z) k) Z( V( Z8 j; \
  828.               strExtLocal=".\\DownLoad\";4 T( l2 s' [8 H1 }& }+ @$ m/ F- a
  829.               strFullName="update.txt";, X! f9 b7 s: e5 T; ]# u! W) Y
  830.               dwProgramState=AP_CONNECT;* \2 I, s1 @6 T3 B+ O5 q1 p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : t% [4 }7 g" O- q2 w% q( M# S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 {: x0 k2 H' r# p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) ?# u* W6 V0 a; `8 v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , R8 z: |# B# |7 j; I* D/ L
  835.               unlink(".\\DownLoad\\checkversion.txt");$ m' E$ |- }/ h6 ^1 P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 L+ p& }& z, G4 M3 B4 x
  837.               {
    8 R  c& U) _& n$ p+ j. W5 G7 f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! x: {# G0 r4 S$ \( \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( Z  T' b1 R/ t! X0 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, Q/ e0 m. d1 o. ?0 F7 X. O8 A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / |3 u5 E4 b. O( H; m( ]0 g' @, x/ G
  842.                 4 g- H. w. c5 J4 Y8 Z: Y; S: u
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 ^) `5 a5 S' L4 o) q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 K8 m4 O& j0 q6 F' P3 R0 t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 V! R' {/ c7 G! }) }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 e  V+ m% f4 {( Y
  847.               }  y: I- o6 u4 I4 [8 ?) v
  848.               dwStartUpSteps=5;
    , j2 _2 |- f8 v
  849.             }4 Z6 H- u2 `8 H! ^( i
  850.           }
    + a! g* F, }. k( s; b: c$ M
  851.         }& ^$ \, J! N3 k! B- i1 N! D. w
  852.         else% n3 y6 V4 B2 F7 j% a" N
  853.         {9 V% o8 x7 w7 a
  854.           dwStartUpSteps=3;, q/ h" S: ~; f6 f6 f( C2 \! I! j/ |
  855.         }
      N: \& h$ ^" [( V
  856.       }
    $ Z# z( d* t9 m: {# X1 \
  857.       break;
    : }1 b+ t/ s% \0 O2 z+ |
  858.     case 5:
    1 r5 ~4 n4 J% \
  859.       {; N+ J  B. @# B2 o0 P  F4 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)# t( H2 z5 L5 R+ U
  861.         {
    0 J* Y$ f- Z; b+ a8 |7 j% n
  862.           int opt_overwrite=1;
    - Q8 Q& ?5 C+ p/ U1 o/ `
  863.           int opt_do_extract_withoutpath=0;
    ' }, u* Z, s: j6 z
  864.           unzFile uf=NULL;
    ) I  H7 _) X6 C$ E& o

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

: W, H; Y8 e3 f6 q) B* B, K" C  M

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-9 16:26

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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