找回密碼
 立即注册

CSUpdate.exe源代码

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

+ V3 s- t# U5 b  T
  1. / RevApp.cpp : Defines the class behaviors for the application.$ P  o# i$ e2 F
  2. //
    & o+ [) v; G4 D  Y* c
  3. 0 c& f7 f. `: b  K
  4. #include "stdafx.h") q- w; h1 R% N$ U

  5. , c# M  m) N* V- |
  6. //#define UNICODE( Q  I8 A- C! X9 y
  7. //#include <gdiplus.h>
    3 U: F" E, T+ t. {% C! \  p
  8. //using namespace Gdiplus;
    ! ^) q0 a9 L0 O; e, P$ M
  9. ( y8 s0 c5 K4 A7 N
  10. #include "RevApp.h"
    4 d/ z$ Y. K! Y3 U8 A1 Y
  11. #include "RevAppDlg.h"4 F6 V! J* O+ [/ i
  12. ! T0 `0 K8 s) C! O9 G) M/ @7 u
  13. #pragma warning(disable:4786)* ?0 ~! t; W  @0 v
  14. #include <map>; Q9 f$ m. P, M% Y+ p* [
  15. #include <list>
    1 n6 B% L; j6 L  d$ @1 V% t
  16. #include <direct.h>6 J* r1 h( x& `) B

  17. , T  i6 h. J+ n! o. ?2 A
  18. #ifdef _DEBUG& @8 \2 d. C9 P
  19. #define new DEBUG_NEW+ u4 W. N+ s9 Q9 B9 a6 D6 U) t
  20. #undef THIS_FILE
    4 p! a  d. ~  a) P
  21. static char THIS_FILE[] = __FILE__;0 P1 j- R$ i/ T
  22. #endif
    5 V3 e: {" W6 e0 `1 h0 p# t3 y
  23. #include "SkinResDef.h"
    1 d4 [# W9 R9 ^/ _5 k# W& O
  24. #include "ChangeBG.h"
    ( ^$ F4 k7 S  [% A# B/ n9 A3 g
  25. #include "AFXINET.H"; r$ a8 u, M! Q( u) p4 j8 E
  26. . t3 j& h3 r6 z2 o, f
  27. #define TRADITIONAL_CHINESE 0
    ! ]+ H) ]- D& e! C, ]
  28. #define SIMPLIFY_CHINESE 13 O5 u$ c, |9 T8 |% \5 O
  29. #define ENGLISH 2
    2 u, j6 M3 F  m7 D2 Y5 [
  30. int m_iLanguage = ENGLISH;
    + R- U- d! K1 Y, p# ^. ]
  31. /////////////////////////////////////////////////////////////////////////////8 e) J  T, c/ D; [
  32. // CRevAppApp
    # |% |4 @2 ^6 M9 [" h

  33. 7 S4 ]# B3 J5 Y. q4 \3 k( }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), O, d/ |7 y  N/ P
  35.         //{{AFX_MSG_MAP(CRevAppApp)& _& V$ ~' b4 x7 J4 v% l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 b! l! N, Q" ~+ p7 x7 N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % A8 n% _+ \7 k
  38.         //}}AFX_MSG* C' l$ S0 i3 l7 g$ [0 j) y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ E3 T6 ?0 e  M6 T6 y2 O  `4 i5 m
  40. END_MESSAGE_MAP(); P/ j' q% X" z( g- g. [8 S. i9 }

  41. 3 s3 z3 \% d4 c9 O( H6 }
  42. /////////////////////////////////////////////////////////////////////////////
    , o; ]- |  O+ u2 O8 C
  43. // CRevAppApp construction  a) U7 T1 R. k7 }4 s  z' i/ h

  44. / ~8 Z# g: A% u: g1 |8 j! m
  45. CRevAppApp::CRevAppApp()
    ; C  W! i8 s6 x
  46. {
    * ]7 P* C$ d9 s1 h( ]- l& {% {
  47.         // TODO: add construction code here,5 W9 }7 @( {# _1 t0 _6 H
  48.         // Place all significant initialization in InitInstance
    6 \# R0 I! `$ y2 Q
  49.   bDisplayIsBig5=FALSE;, v* p( C* W* J" d
  50.   bRestartUpdater=FALSE;
    7 M8 B/ M8 J: v/ R
  51.   bFinishUpdated=FALSE;
    " S4 Q. ]) X( o9 o! ]5 l8 f* B! `6 W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ \* i; Y; x8 W* z0 D; z4 t. Y' B4 K
  53.   InitChangeDataBig52GBKS();
    6 Q) @3 k4 c. V2 x# G
  54.   InitChangeDataGBKS2Big5();
    1 t' [; D: k( X# X: p  Q( Z* g
  55.         //
    8 a3 Y6 ]; R+ F. o$ @7 \* E
  56.         bClickRunExe = FALSE;' A% O: y9 u0 ^2 |' R7 t
  57.         //1 h3 }) Z; N, c' z  K
  58. }* T, ~5 V; Q1 }5 t' ~3 T0 p
  59. 7 f! T0 ~6 S1 @7 _  `' o9 W; S( z# h$ t
  60. CRevAppApp::~CRevAppApp()
    ) W% o/ H* c$ f$ c) i4 l1 z
  61. {' w& I$ u2 @- r) H0 c3 C; g
  62.         // TODO: add construction code here,- A) }/ P. [  O2 l+ U
  63.         // Place all significant initialization in InitInstance7 W1 i3 @* z) a: {* _& R
  64.   EndChangeData();, q+ Q5 a! o7 l) o
  65. }% F  s3 [# e+ W- Y# Q
  66. $ i( L# U; F7 F1 _, \
  67. /////////////////////////////////////////////////////////////////////////////
    # u( Q7 R) G7 ]1 l
  68. // The one and only CRevAppApp object; V$ [0 g  y( n8 X
  69. 8 p, H# s- h' b6 Y+ D& M! ^
  70. CRevAppApp theApp;/ q5 f( f" n: Z9 h4 K  ]

  71. : y7 Q+ b  F) c0 b3 V) U/ |5 l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 Z- K7 e/ L$ [) n+ h) L
  73. {
    % _1 J* M# H6 a6 q
  74.   int iEOF=0;
    $ t# h& a2 n/ C  N" }& G( u
  75.   char szTempName[MAX_PATH];
    " n8 v7 [3 R; u& `* _% Y
  76.   *szFileName=0;
    " s* W+ n, G- v8 \, b# d; E
  77.   iEOF=fscanf(fp,"%s",szTempName);# h' z+ }5 x' j: `: G) k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ o: r- |1 F& {8 D$ }0 x( ^
  79.   {+ T$ c! @$ G1 k8 I$ M
  80.     strcpy(szFileName,&szTempName[1]);
    + p7 \9 ~, v: U9 o! R5 b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 ?& i3 b0 `7 B
  82.     {' g) n4 z9 ~0 }! D
  83.       iEOF=fscanf(fp,"%s",szTempName);' y5 B6 @3 h$ q2 w& r4 a
  84.       strcat(szFileName," ");
    ; K" T# `  V8 f. b: _
  85.       strcat(szFileName,szTempName);% k1 h* c3 N* l* q% M2 D3 n
  86.     }2 ^8 q  D& J7 ~
  87.     if(strlen(szFileName)>=1)) B' N/ F- D& ?8 x
  88.     {
    + B/ c2 J; I& J* f7 G  t
  89.       szFileName[strlen(szFileName)-1]=0;. t( \; w' v( D( w. Z5 x
  90.     }
    ) ^+ z0 S9 {) i) ?
  91.   }
    ) Z' [* H1 R% D- J  o( v
  92.   return szFileName;
    0 f! L) h9 O2 r% L
  93. }
    2 ^3 M0 p2 U' Y' k# W* Y
  94. # K: |) B& s  |
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 _+ G3 G3 _: c" u  o& m5 ?
  96. {+ ~5 x: R( Y1 q; ~  I; p: ]. d
  97.   FILE *fp;' \! k; v& u) W  v
  98.   char *key=NULL;0 d3 e' S2 m  Z  K: n8 U: B
  99.   char version[MAX_PATH];  R" o% R1 A0 [
  100.   LPUPDATEFILE file,olds;, a) q6 }1 d2 f2 D+ M+ w) @! b/ l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 ~/ T# l1 f( ?! ]
  102. / Z% g! T: b+ M+ v8 w& ~
  103.   UpdateList.clear();# z0 z$ L) V$ F- B0 ^' F3 M
  104.   UpdateFile.clear();) t, ~5 G) Y7 U( e0 P4 e
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; [2 G! g7 v/ [8 m3 c' x1 R
  106.   if(!(fp=fopen(filename,"r"))) return false;  u; m# b/ [% o, I% n
  107.   fscanf(fp,"%s",version);
      ?/ O0 W1 Z7 H% ?% w( D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 y1 e# X! v4 t* }
  109.   while(fscanf(fp,"%s",version)!=EOF)3 z. A$ i8 C: U" Y
  110.   {
    ( F" x' \# k, _. E5 a. P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 o- ]- q- M# c  C6 b' @3 f( P) ]
  112.     fscanf(fp,"%s",file->path);
    ! b' ?% y  U3 o$ l9 \* m
  113.     ReadFileNames(fp,file->file);' U: u$ c4 \6 m2 n) r$ R9 ^
  114.     strcpy(file->full,".");+ e$ h4 Q1 x, A
  115.     strcat(file->full,file->path);2 S& ?# x# o8 X- D2 }% K) c7 t! a
  116.     strcat(file->full,file->file);, C8 m( g& M4 ?2 y" S, T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & S; a$ u# \  R, z" B+ M. g
  118.     {
    ' g. C9 t# x4 q3 }% F& T
  119.       file->vers=(float)atof(version);
    ( B9 R& {8 q2 [: g/ o
  120.       UpdateList.push_back(file->full);# I# |$ _% e3 ^" W+ e8 N6 n$ X/ o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    5 B2 I- X0 o$ ]8 w% `; w+ s
  122.     }
    / E$ U/ l& f0 C1 K: v% i
  123.     else
    2 z/ j; v* h# ]6 |/ |2 t3 X) I. s
  124.     {
    * l1 b! M6 p9 p1 b/ `1 [
  125.       olds=(*p).second;
    1 Y$ J2 Y1 b2 ~& Z. X9 @
  126.       if(olds->vers<(float)atof(version))
    " y/ V, _3 }/ s" O  M3 i
  127.       {
    " u7 [; i3 C, z7 E# g
  128.         olds->vers=(float)atof(version);: c/ b/ r! D4 _8 U
  129.       }
    & a& N5 u; v3 ?3 t% j
  130.       free(file);
    # j# x2 W. J2 p" X  w
  131.     }
    8 O* ?1 j" s  E* q# Q
  132.   }
    7 L+ J6 m) Y. G# h) f2 D) e
  133.   fclose(fp);, j  @  e) z8 t: {' T
  134.   return true;
    0 m2 G3 ~  Z; _; r/ n
  135. }  }0 M0 Y- {& C) a

  136. 3 _3 P6 ]* u: s  j1 w$ G, Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : ~/ n  u' o3 k. @% y! A
  138. {
    ( c/ p' G* f! A- Z3 t$ x
  139.   TCHAR  szFull[MAX_PATH];. ~+ C+ K2 z1 S
  140.   TCHAR *token,*inter;' l3 j1 z2 ]/ j% I
  141.   *szPath=0;
    ! d& W1 }$ Y- B% H: h
  142.   strcpy(szFull,szFullPath);
    7 K: X% W/ E/ F- `3 ~8 q2 U# L
  143.   token=strtok(szFull,"\\/");& n- p& M5 X6 z: F
  144.   inter=token;
    ; v7 [/ C' E' s8 b# y. [
  145.   while(token=strtok(NULL,"\\/"))
    8 w  b  ?: h3 n+ K" A
  146.   {
    9 Y/ t. u% {- N
  147.     strcat(szPath,inter);' h6 R. v0 B( l  Y+ ?2 Q
  148.     strcat(szPath,"\");
    , ?. T1 s! _% ~* c
  149.     inter=token;, [) `6 W* S+ e
  150.   }9 w6 e, l: G$ ~6 |6 R+ _! X" t5 M
  151.   return strlen(szPath);
    9 g& T' t* e3 t' O! ~
  152. }9 v$ ]- b, ~, t6 H- E! _# {
  153. $ D- @/ B% b. ~' B0 `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 q1 S1 O" N% e: b( K2 g6 M6 [
  155. {) D' @2 @0 e! H+ F
  156.   DWORD attrib=GetFileAttributes(Target);
    * S- ?5 P8 |5 ]6 n
  157.   if(attrib!=-1)% t4 G9 Y; B/ w/ b
  158.   {
    5 g+ p- I- R- f5 G4 \+ q5 q4 ^8 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 A) o0 _0 n5 `; |1 D4 K
  160.     {: D$ j7 [* a/ ^7 K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 T1 j  S) e; N: M
  162.       SetFileAttributes(Target,attrib);. p: N' E: t0 t1 H' T! z- r, x
  163.     }
      R5 v7 g* w3 `, U
  164.   }
    8 O( ~! g1 f0 Q% I  S$ C, p1 `
  165.   CopyFile(Source,Target,Erase);5 w) m" k1 q! c2 Z. r
  166. }8 t' j) L( ?4 Z" y$ c/ o. ]; |

  167. ; b+ k( K2 G$ B5 q' u3 Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); ^3 W: D# A8 Y+ j+ d
  169. {$ N; B6 i2 i# @0 ?8 z) H% p; L
  170.      FILE *fp;
    * o% K: Y: D* s. a
  171.      char  szBuffer[8192];
    + ^5 R+ ~" j# }, D% V# _3 W4 |, }$ E
  172.   va_list  argptr;
    " P0 [. d5 p% f4 v/ E
  173. 7 @2 U; M. m* ^- r  g0 `' F
  174.         va_start(argptr,message);; Z+ c4 g6 P& B6 h9 s) j
  175.         vsprintf(szBuffer,message,argptr);5 O- g4 X/ ~# j
  176.         va_end(argptr);
    ) }: |" B' ?- [  I. t9 Y. a7 E1 U6 g' Z
  177.   fp=fopen(FileName,"a");$ i: Y7 {: d8 C/ [- f
  178.   if(fp)% d" O6 g9 ^+ r* k
  179.   {
    ; j# {  I6 i- V' d9 L3 x7 R
  180.     fprintf(fp,szBuffer);" j, S$ G! B3 E: X) j+ s
  181.     fclose(fp);
    % C& M1 {0 k( e& M! Z8 {& P. f; j
  182.           _flushall();* c/ l# S' I/ ~! ~
  183.   }0 x# q6 f! I! K4 J  T! Q; C
  184. }
    & E& F! Q( S1 O) A7 S+ k4 `: s

  185. 6 u" \, l* B: I
  186. BOOL CRevAppApp::Fclearf(char *FileName)! H( W5 A# `0 w
  187. {5 O6 h  w$ {( b# u) M+ k6 R
  188.      FILE *fp;$ M% l' g" ]+ P& ~
  189.     DWORD  attrib;) ~' M: C7 O5 w4 ]1 j2 \* m7 ]
  190.   attrib=GetFileAttributes(FileName);( L0 I! }0 j0 ?9 L9 Q" @
  191.   if(attrib!=-1)/ y% k3 d" L7 n: V) h9 L
  192.   {4 L$ h. a8 b# V3 s0 v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- u: m) E' R( n. Q8 \
  194.     if(!SetFileAttributes(FileName,attrib))
    0 K; P* u* {, N3 t
  195.     {
    7 D8 `* T6 k* B3 M' N/ h9 O/ \- Z
  196.       return FALSE;
      N1 B' s0 t2 T& f/ v* l9 F" P
  197.     }
    5 Z% D* B8 b6 `# Q5 g; K
  198.   }
    4 e5 u; [$ d9 N- V3 g. [5 j
  199.   fp=fopen(FileName,"wb");5 X- x% _2 F4 g9 A1 v
  200.   if(fp)$ S- R! g# c+ N; y9 M6 u6 R( Z' V& i, @
  201.   {3 [' h6 y8 C; Q# F
  202.     fclose(fp);  P6 `9 F* h  @2 K
  203.   }* C1 J+ U" J) ?: _1 {
  204.   return TRUE;6 h3 s0 f3 Z1 M7 L1 f+ T" ^( S/ r
  205. }4 }& H! t: J. C

  206. 4 s  `' [9 C1 N, a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ `" l" ]' V! _, T! x5 p
  208. {& y% x% k0 X0 r5 n& E' x7 k; y. ~  j
  209.   char filename[MAX_PATH];( J  e, E+ A: C1 w0 r0 A
  210.   LPUPDATEFILE file,olds;5 s% t: w7 Z* V1 s6 m+ p
  211.   std::map<int,CString>::iterator i;- _5 N" b+ Z* ?+ x4 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , F7 i, ]9 M$ d7 z& [' S6 _
  213.   std::list<CString>::iterator l;
    : A; F2 n/ J8 X" t! Q
  214. - u' m; d2 B: J" G7 B2 F/ {/ q/ h
  215.   if(bFirstUpdate)
    7 B# Z  h. z# s' J+ J. l1 e$ n0 Y
  216.   {
    3 S% r, N3 ^3 B
  217.     dwCurrFile=0;
    ) ^  s, u  t8 h3 P% U
  218.     bFirstUpdate=FALSE;3 V; _. d: m6 D4 ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( m2 J% k% |" G+ ^3 S; Z
  220.     {" U, W' Y" @; ~. A; v$ Y( @4 ~
  221.       dwTotalFiles=UpdateLocal.size();% g+ O1 x1 [, O& T5 Q' I
  222.       dwDownLoaded=0;
    ; h7 I' }6 w9 b* @2 g; p# a
  223.       bSilentStep=FALSE;6 F" |; l+ }5 s4 z9 u  m
  224.       bCompressed=TRUE;% M- ^- G8 \3 ?
  225.       strExtLocal.Empty();
    8 }5 a! c8 P1 p5 N4 V
  226.       strFullName=(*i).second;2 l& H2 \" d2 W6 x7 l
  227.       dwProgramState=AP_CONNECT;0 W0 V! M5 x4 E5 h$ \
  228.       return TRUE;. [# S; x. Y2 o: [! v" A, J
  229.     }
    4 M! \. T& e( E7 l& |
  230.   }
    + I: j/ f1 |, \) K  K; D
  231.   else if(bRestartUpdater==FALSE)+ |* h0 w! S/ r/ _" e0 T! J8 q. m# r
  232.   {/ U+ {* [! m8 I# [- z( `1 [
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( Z2 n7 ~1 |" ~, Q" v( v% D( |
  234.     {
    ; s5 t5 [0 o, ~% t2 {% n
  235.       file=(*p).second;
    - \* \! V( \3 m1 i/ F9 R- w: J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 }( d# I' z1 o) o2 r
  237.       {9 x: @! n3 {+ o" ], T
  238.         olds=(*p).second;* d& R* N% |/ `9 {- H/ o6 l
  239.         olds->vers=file->vers;
    3 f4 {) @# P, L
  240.       }# X6 S& G: J4 Y* T
  241.       else  n7 ]" g9 A  U& Q, T# ?5 t
  242.       {' @8 M! ^. t2 j# W1 n, f5 F
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 h3 \+ n8 T8 Z" Y2 Y4 y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , y/ p9 O. H" S" J) ]2 h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 |5 a# y* w6 T% R2 o
  246.       }
    0 H& `4 s5 T" \) S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      c# H6 |' O: }% i1 Z: _
  248.       sprintf(filename,"(%s)",file->file);
    1 V& S# v, I3 Z, T( E
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - c# ^& y: l& R9 ]' M! ?. @$ c* Y2 T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 o+ j) h( t) S$ d9 Y7 S
  251.     }
    % b/ O. b7 T2 D# K6 E. w6 I
  252.     dwCurrFile++;
    9 H$ v( b& N- p" u0 D$ S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). X8 n" w: a/ l1 [" _
  254.     {" T# L" W1 G% m) T7 ^0 ~0 K
  255.       bSilentStep=FALSE;: Q" l$ d' q5 G6 D
  256.       bCompressed=TRUE;) W0 z/ L; ~" R4 e! z1 U
  257.       strExtLocal.Empty();
    " C3 {+ d3 _( ~1 V$ x' p
  258.       strFullName=(*i).second;( @7 s6 k+ v( o' X
  259.       dwProgramState=AP_CONNECT;
    7 n( b9 d, d+ p8 ]4 g8 i0 ~
  260.       return TRUE;3 U% N% V4 J: Z: o  h6 [
  261.     }
    ' ^5 Z% Y; [/ l* s/ v- [( p6 e# u
  262.     if(!bRestartUpdater)
      a, Y0 Q& T9 e" Z- G3 [
  263.     {
    $ v  k5 g# z$ s) }! \8 k
  264.       int iCurrSize,iFileSize;' E+ i- e( U$ z' `$ y
  265.       iCurrSize=0;
    " _- c/ x4 \+ Q; y
  266.       iFileSize=UpdateList2.size();  \; H5 M: o3 O& ^: j9 }$ Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! ]# v3 \; T# W& @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# `$ |- e3 w0 a# L* Z4 n
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ! T3 Z6 E: }/ I7 u/ x! t/ ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' }' `: R7 \: P1 ^5 U, V2 _
  271.       Fclearf(".\\update.dat");# ?  E4 g1 _5 S: I
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    6 _, \; q* S' p- Z! j/ e! w/ F$ H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# i- l9 g+ c; ~
  274.       {2 _3 h5 X, V  r9 S5 m) |" V
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 I7 _! W/ d( k; Z! c) ]
  276.         {) q4 J! T- \7 C2 Y
  277.           file=(*p).second;3 I" n3 o) {' `  C" v
  278.           sprintf(filename,"(%s)",file->file);
    $ U0 ^2 d2 {, i4 v1 Y( g: I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / n) Q' q4 p7 R- _  c. e# ]
  280.           iCurrSize++;
    . L5 Y' ]" q. y) ]/ |; ]/ g5 Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 A7 {! @! P& Q: D, N
  282.         }
    + U( a5 _9 l" r$ `, D7 g- f
  283.       }8 B. c/ }4 F* F) C4 f
  284.       unlink(".\\update.txt");* \; h" R4 E4 t0 X
  285.       unlink(".\\update.tmp");" l# a5 h5 A* b6 T# D* D
  286.       Fclearf(".\\checkversion.dat");
    3 _# r6 v4 W( ~' L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; [; C  i3 {8 A& \5 e
  288.       if(UpdateLocal.size())
    . x" k+ I, l. r4 b# K% o
  289.       {' O. A! }, g% D! X
  290.         UpdateLocal.clear();
    . N0 \0 n) L- P! f% {3 [9 G
  291.       }
    ) `% X7 W% w* W. w9 q) y; K& ~
  292.       if(UpdateFile3.size())
    % {+ j" K! G" P9 ?' g- ]0 ]( I" ]
  293.       {
    3 ^2 o# K  i: z1 m% p1 i4 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); R9 J# p2 h" Z8 }
  295.         {
    2 s& b" q; a# I: U3 p2 ~
  296.           file=(*p).second;5 }9 J1 U- D6 @6 P, {
  297.           free(file);
    ' a- {/ G9 ]7 F. F0 @
  298.         }6 _4 O  @! ?$ M. h  r
  299.         UpdateFile3.clear();
    9 u: e( ~, S) x0 `
  300.         UpdateList3.clear();
    0 ?+ X5 ?# a5 e5 e3 q: c
  301.       }
    6 ?" D5 d- o' v& f' m
  302.       if(UpdateFile2.size())
    . p. J' d( M( o
  303.       {
    $ `2 n  g: o$ `$ ?0 }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 t. _  u) z/ a0 F
  305.         {" Q+ E, G- m2 z! i
  306.           file=(*p).second;0 L. O! d' B6 ]; v+ r0 e
  307.           free(file);
    2 C( f' p3 a: k* ]7 Z/ N
  308.         }" x$ k' O$ S2 J6 K; C1 a* I1 H
  309.         UpdateFile2.clear();
    * [3 z5 C+ b$ v  w; ], Z: o
  310.         UpdateList2.clear();
    * a4 f5 d  U, t* Q
  311.       }! H# u9 ?/ U$ t0 W
  312.       if(UpdateFile1.size())
    ' u9 @0 ]( I& D! {
  313.       {$ {9 j# C+ t4 S7 m- }! U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 x+ F/ Y- x8 ~# N0 Z
  315.         {8 n; X, Z/ t! o, C% U# u. v; Q8 u* ~
  316.           file=(*p).second;2 _1 E: K3 H' C$ A' i- `( l
  317.           free(file);7 O2 ~! q2 k3 X1 U; u
  318.         }
    5 V2 n$ ^* h: C: {( |- e( j
  319.         UpdateFile1.clear();8 d4 T0 `( x5 i
  320.         UpdateList1.clear();# _1 E% ?6 c. l  y4 D! j2 b
  321.       }
    ! \& t. }4 C* j' ^8 m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 l) w/ ~& }  b5 ]; ?' Y" P; u
  323.     }
    9 y8 F- R1 ^9 ]0 ?+ \
  324.   }  z' J9 K, z- G8 ]/ c4 u1 `3 [
  325.   return FALSE;$ N0 q4 \( \" v% ?% s) X9 y
  326. }+ F( P! k5 P0 ], u7 {1 m' v
  327. 0 r( t2 ?& A" k7 m' J; y
  328. void CRevAppApp::ClearAll(void)
    : F, N  `6 D8 V
  329. {; N& v+ p$ m' o' u/ O$ ]
  330.   LPUPDATEFILE file;$ b. O2 K" X& b; Z/ o! I% r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! G! z* e2 G+ A4 V+ ]0 [$ _0 E

  332. $ \. D4 g# o" l' ?( n: w
  333.   if(UpdateLocal.size())
    5 M- p# X& z: n$ c
  334.   {3 O" U: ?; O  q$ F& F& `+ |
  335.     UpdateLocal.clear();
    0 W% t- R7 d5 H2 C
  336.   }9 Z* J3 U8 w# _4 @8 v. Y6 h0 b) S
  337.   if(UpdateFile3.size())( ~* U1 _- U+ c6 l
  338.   {
    - K2 f+ ~- o2 L1 o+ `, M# f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      ^$ v& L8 l# i3 n
  340.     {5 V7 X: J( X+ n! i7 B# I
  341.       file=(*p).second;( |3 y! p$ u1 [+ O5 c( _
  342.       free(file);
    , c1 I0 w: x+ w" U  L+ |! X
  343.     }
    & }1 }1 o" v6 K8 `
  344.     UpdateFile3.clear();
    & d* G$ M$ y/ `7 G" D
  345.     UpdateList3.clear();
      o8 H( J6 [' R8 x" H( K5 n) b2 E, G% m
  346.   }" k# |$ e2 |$ y
  347.   if(UpdateFile2.size())- F- H) D0 V  {3 D0 r
  348.   {, H( _8 V, d& Y+ M. W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- i1 K" V% J- f5 u& J5 O7 y
  350.     {# j, U7 f; J. n; I* }( ^
  351.       file=(*p).second;
    2 J" A& Q" l0 S& _3 \
  352.       free(file);1 u3 k+ j6 s# v6 }  }. z( d
  353.     }
    ' s0 m$ U. z, Q+ b" R' P6 j: M/ U
  354.     UpdateFile2.clear();' W' R: J: u: w  T, O. @: [
  355.     UpdateList2.clear();
    5 n. X5 r- |- l  `- t! y
  356.   }
    / A* S5 E3 C/ i
  357.   if(UpdateFile1.size())
    - K! j# `! u: K8 c. r
  358.   {! ^: v: _$ O/ v+ i/ f' m' }' V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 d# L2 ?. o& x. G
  360.     {0 X( \$ D3 J& w* E- k9 g
  361.       file=(*p).second;% o1 G1 M% I& a1 c
  362.       free(file);
    ) X0 B( G* @  l0 B& ?9 `$ H/ B, l
  363.     }( b  y, v- V" {7 M; \
  364.     UpdateFile1.clear();
    ) Y: \% v3 f% w" \* h
  365.     UpdateList1.clear();5 m' @  a6 ?8 G' g& [; A
  366.   }
    # B/ G# `  u" r' Z2 H
  367. }  , [8 s) }* H0 |' F0 [" l
  368.   
    $ ?$ ]: b1 N& M+ n6 ^1 \' q
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 I7 G  w" \6 Z6 O$ w
  370. {9 T2 P* v& _. c% f. M. n; u
  371.   int c;2 w# l+ V- M) x
  372.   LPUPDATEFILE file1,file2;0 v/ k# c3 X3 I# ?/ d/ M3 \
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 K" c5 \* {: U6 z+ R8 M
  374.   std::list<CString>::iterator l;0 q. K' z4 Q3 Z
  375. % U& x+ D+ ?3 g) R! W* A
  376.   UpdateLocal.clear();9 f6 m$ p& I) M5 j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ! p  s# W" ]0 `) |+ q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ O+ p" _+ n! v* G! m* v- k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : c/ N1 N+ I; _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( C. @! {6 y, v
  381.   if(UpdateFile3.size())
    9 r/ `5 @: @+ L% J8 R
  382.   {6 d; C% J" g' n) S8 w" q* A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ t. w  N8 I- z) ~- {; S: A2 [
  384.     {2 b. h9 [/ A! J: W6 h9 z8 y
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( F) v' t; Z! ]1 C  W- e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 W1 p/ t7 v. G# ~6 k
  387.       {
    . b9 M: F/ Z0 |- q) _0 k" u
  388.         file1=(LPUPDATEFILE)(*p).second;
    - A9 b7 |' ?# H8 v7 ]8 D5 e# p
  389.         file1->vers=file2->vers;# P$ o4 b# s- T+ Y$ c2 e
  390.       }/ Y  k  X8 r2 l  D' r( G8 i2 I
  391.       else
    " g. O3 e" S9 u5 `& i! u! `
  392.       {
    7 [6 d5 p% j* ~/ O0 P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; n5 }  Y0 w4 t) s8 A  K$ R+ s
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      w5 T: v+ k, p8 d7 m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! s0 o  _, I# C. _! R2 \
  396.       }* _( _, _5 G1 E5 `, ]  v' _
  397.     }# P+ ]/ D# G* X- u
  398.   }  r3 `5 ^- L& _9 w) X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 u. C9 Z# o1 s! M
  400.   {$ J2 n& l+ e* i+ W* `+ l$ c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* J# V% S, g% a  a. F8 u& C0 O( f; |
  402.     {
    * _' W. P. f) d7 T+ s5 m* L+ Z
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) Q* |% Y; R% \0 F+ I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& _! O) x+ G, a- [' ~) u( w& o0 y
  405.       {* G9 B% w$ Q1 q0 j
  406.         file1=(LPUPDATEFILE)(*p).second;
    + v) C5 {5 h+ X; \. g7 ?% }
  407.         if(file1->vers!=file2->vers)* D7 T) M# A5 U3 u' Z
  408.         {$ ]% Y  V* @- `+ n2 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. i9 F. Q) M  \9 |
  410.           c++;: O) A9 f% F, U; p* T0 G
  411.         }& [3 e3 |* V& D- N
  412.       }
    9 E: `4 \* j) n/ H( K+ M# g# [* {8 q: y
  413.       else
    8 E) K# E$ x$ `" B3 p# X! I$ Q& t8 ^
  414.       {. x0 z5 w+ f3 D5 c  g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 f8 A! [+ w& S' B+ A
  416.         c++;
    5 m, w2 n5 m; A
  417.       }* f9 ^) V6 }7 W. y: w( C# S
  418.     }
    & ~, U9 V$ m( n) T) E) K/ H
  419.   }$ l1 Q/ m. Q; Z7 [$ j! g2 m# c
  420.   unlink(".\\DownLoad\\update.txt");
    1 z) X  e$ _; c6 u
  421.   if(UpdateLocal.size()) return TRUE;0 O! m6 v. X# K& }3 ~. w3 Y) O
  422.   else                   return FALSE;
    8 u6 B; C; I, Z+ e) d4 H' x
  423. }. i5 o/ V6 P# X, `/ `$ D0 F

  424. % `7 j8 q  A( [3 _5 \4 L; e/ W% ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , w& v" L" V: p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  ]- U% M6 ?7 l
  427. 2 @" i$ }3 }. q6 E6 x. }7 e
  428. - b- H. I3 _7 S) y
  429. ( `/ J; R( c- S# ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + C' V4 j3 W7 P( X3 b
  431. {* B4 S2 T% q$ w2 h1 P' p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  R, a3 y' g$ q& Z3 y3 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 S  R9 g5 M; E
  434.   {/ D' k3 R8 ~, s
  435.     char szLanguage[50];( c0 l( w$ B- b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- G, S) q) i0 G5 A* M& f( k+ ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 E; P$ y  w+ u% q/ o8 o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% T) I- \2 q# L: h; X9 |
  439.     else                                   m_iLanguage=ENGLISH;% [" C' T. R# l5 ?9 x
  440.     char szRegister[100];
    : G4 m2 u; e6 C: y4 P4 F+ Q( [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; `7 a/ Q& U0 P$ m+ }
  442.     strRegsName=szRegister;& T# r: j8 c4 f! A
  443.     char szPatchURL[100];# d" F& [- r* A; c% V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 h# z3 x' `+ l, Q; |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! o8 @9 ~. @  s9 V% ]7 E, g+ y8 T
  446.   }* \0 O* |/ f" {. z/ B( f
  447.   else
    8 a- U6 K! x& h" f1 m  n
  448.   {
    ! F: i* c, r; s, F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      W/ o/ B6 j4 R6 d0 p) Y6 J
  450.     strRegsName=DEFAULT_REG_URL;% C" F$ n6 u6 U8 R! [5 I% n1 A
  451.   }
      f5 M( C2 T! m! V' b
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . @4 ]% J9 P9 c! d, e( y
  453.   {
    2 e" K% c0 u$ m- B2 K9 D
  454.     char szIP[50];$ K4 A1 L! p" U4 ^' V2 y
  455.     char szDIR[300];7 v( Q+ A3 z% A9 M. U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " B2 n3 s4 y$ ^( q" D
  457.     {. k: M7 U8 u( r1 K9 Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ G* v$ R  P6 C, h9 j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( m/ M5 \0 J  u, t0 P1 {
  460.       strHostName=szIP;. a0 {3 c" U( K  ~! H2 U: d
  461.       strHostPath.Format("/%s",szDIR);
    % g) {' O0 z; B' B9 S, V
  462.     }
    $ Z  I7 R" J2 W! m
  463.     else
    ' V, E3 D) A! r1 q6 ^
  464.     {2 g# Y) ]6 S  k  M- S2 o3 _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 y! c7 [! _' p4 h( O/ P3 l4 X
  466.       {2 }  {. A, x2 }: b: U+ O
  467.         char szLanguage[50];
    ' l( N, O/ v1 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 ?5 a% ~; n$ T" B+ v3 V* l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ t# c( L0 ?( f6 _$ p/ m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - M0 N2 s% w$ D( L% G- J
  471.         else                                   m_iLanguage=ENGLISH;, D+ U- ]9 n  f
  472.         char szRegister[100];
    - I; Z9 u% Y+ ]/ t5 u- j; B" D7 T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 N% M7 S0 I& f
  474.         strRegsName=szRegister;1 A- N! n1 g' D5 i, U/ @* {$ n) e
  475.         char szPatchURL[100];
    : Y9 I+ D8 Q8 E+ Z/ L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 D* [# ^7 h# q8 J- m! H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. V# g( v: y/ T1 N0 j. C; J% x
  478.       }. x; m. {) r9 J0 N9 V
  479.       else! V2 ]8 K7 a/ L2 h+ {; m0 o
  480.       {1 l2 c& O) d5 y. S' t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # S3 S  U4 k& @: D$ A/ E
  482.         strRegsName=DEFAULT_REG_URL;) W1 b* h" _6 J: ?7 U4 ?- T4 y
  483.       }) X6 `+ y# w0 A8 P0 e# Y
  484.     }
    * U1 Q+ b5 |$ F+ b+ C) u* p* F
  485.   }
    1 t. J( u% K4 `; u, c0 m  R
  486.   return true;- \6 d- g' _) ]% Q
  487. }
      ~2 A" e) S' z* O9 K
  488. # l0 a0 F+ G) c1 v1 I+ k& o8 i  L
  489. #include ".\ZLib\unzip.h"  h. `& v' j1 Z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);* C7 T4 K/ i0 W1 J; J  h! ?
  491. /////////////////////////////////////////////////////////////////////////////" w; N7 R, v) f
  492. // CRevAppApp initialization2 \3 p1 W$ z" y: I: I7 O

  493. 2 e& R; A3 i$ S8 h! u
  494. BOOL CRevAppApp::InitInstance()
    3 l% S2 ], }) l4 D5 c( h: k' k% _
  495. {: h/ @8 R8 R7 A7 K8 p' @/ _3 M  ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: _  _" v0 K* k6 V

  497. # G. b. B+ \9 v  U4 w* L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ w, o' j; G& D5 P7 Q+ K; {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 Z* g6 d( M/ b+ Z! A+ x) V1 E; v
  500.   {
    ( j- D5 u- I4 o9 \, Y1 t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% G* _  E+ i) y( k5 c% N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 V2 i6 O  c0 k1 \! Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( v5 [6 u) u( x4 G) B2 e! ?
  504.     {) A0 a7 W: _0 a5 |
  505.       strcpy(szPath,szPathTarget);2 l. C. j) Z! Q0 n) d
  506.       SetCurrentDirectory(szPath);9 ^$ I3 Z7 h, S+ C( t8 X. M
  507.     }# E5 a# i5 L3 t, t- T
  508.   }
    : E5 }3 \4 U2 `0 j0 p
  509. #ifdef _DEBUG
    $ e) N) G: }7 Z0 h
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 \$ S5 Y# b, {' Q; c
  511. #else
    5 e2 |) L  @3 X& ~' w" _6 w0 O$ j- p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- N# ]" D9 Z; H2 z: l$ F/ K
  513. #endif" V0 k$ y/ {6 s, C* t' I
  514.   {
    * d2 b7 Y+ `& ?6 b! k* y; m) Q
  515.     char tempFileName[MAX_PATH];) E) K% p8 Q2 A' e( [
  516.     strcpy(tempFileName,szPathSource);
    " u- Y, C! e7 Z% n, ]
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! ]- j# t% }/ C* P/ l& N9 A
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    2 @7 C  L0 D4 X6 v! z4 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! f7 R" e. r# @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* H5 d9 A! q: x  z8 ~* H
  521.     return TRUE;
    ! Y: T0 Y$ ?' [* H
  522.   }1 |" C: Q" R9 x& h6 [: b
  523.   // Nuke 0118: Delete run.exe
    7 I  j# h% U2 Z7 _) j# Z) z# w/ |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) t  L, a# f& A! P8 F. J8 i3 u! e2 C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- {. c, v6 o; D7 Z: N; e4 B3 `
  526.   if(!ReadCfgFile("Config.ini"))
    0 S7 C) x. I  Z9 T4 g# e. ]+ d
  527.   {
    + p& o* i# W% I' c+ L# H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. V  s$ K' z4 C5 n
  529.     return TRUE;
    2 n' ^) Z8 l: K% E7 R
  530.   }
    9 V& S% m% o2 |
  531.   HANDLE mutex;
    $ i: X1 j) ]; J7 ~- v, a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 j1 e3 Q" _$ R
  533.   {
    3 `. A, z; h, u% |; s& o' E# h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* \  D3 D6 p2 \% R
  535.     {
    0 w' N- K# ^; i* f: a
  536.       CloseHandle(mutex);
    ! x2 O6 I+ l) S8 l2 |: s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 ~, z+ q+ t" C( ~3 t5 q+ a1 A
  538.       return TRUE;! I/ H5 m$ c. ^# h1 }
  539.     }
      Z6 N5 n1 L" s
  540.   }  
    - T" X# {: X. P" B0 f+ C
  541.   CloseHandle(mutex);* }: z, D) r% I' I6 e- b
  542. 0 M5 u# ~7 G; V6 u: L7 l
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    9 b4 Y2 t" v* }
  544. * f8 p% x# Z# w2 Y3 D8 V( @
  545.         AfxEnableControlContainer();
    4 _0 d3 j8 r2 U: _) i

  546. $ G% w1 T2 f/ Q7 {) ^+ w
  547.   bCanUpdate=FALSE;1 ^8 a9 m, a* j5 y& Y
  548.   dwStartUpSteps=1;" k) I1 e3 A" D# u, c2 Q, d
  549.   dwProgramState=AP_NOTHING;* t  M; P8 R9 e: P+ f8 @& d

  550. . w5 K9 U% [  J, l" Q1 x
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) Z$ g- s, |- I3 h/ a* r5 U
  552. 7 v8 @/ r* T+ ~4 d! q' q9 r, p
  553.         // Standard initialization( y# W7 X' Y$ v5 K; B
  554.         // If you are not using these features and wish to reduce the size
    8 G3 [2 w& h+ i; \. S
  555.         //  of your final executable, you should remove from the following# T, l4 y. |" S* l
  556.         //  the specific initialization routines you do not need.% N% T$ p  O1 Y; ]! l

  557. . m2 a+ ]. x/ B2 |/ a0 w2 l
  558. #ifdef _AFXDLL
    ; t2 K4 w+ {( m
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' r$ ~$ D# _. \7 j2 n0 \+ O
  560. #else+ v0 }( A; ~# K+ r, j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 V+ w4 f( P# o. X
  562. #endif. ?. W# X& |* g( ]) Z* F
  563. / o9 x# r2 ~. G
  564.   dlg=new CRevAppDlg;$ Z$ e% S" l% q  V5 |/ t$ [6 k2 G
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # \2 g/ Z3 k5 G( I! }  K* Q  P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! a5 M9 }1 \8 ~2 g  ?
  567.   m_pMainWnd=dlg;4 E2 ^+ ~: W6 S

  568. 9 C$ c; X+ \5 K: n; f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 G! n% w/ i( V3 v' k  P( v5 z
  570. 3 r+ T: f2 e& l
  571. //  GdiplusStartupInput gdiplusStartupInput;; U3 q; d0 w( {- S9 n4 \
  572. //  ULONG_PTR gdiplusToken;9 ^8 R4 j& O( Y* `+ e
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- @% g1 l# W$ q8 e1 k) j8 K

  574. ! |' y9 \7 H' {1 j& ~; @. g" ^
  575. //        CRevAppDlg dlg;: Y4 u7 H% u% _5 d7 S2 `( d
  576. //        int nResponse = dlg.DoModal();
    ) p8 Y. R! [3 m
  577. //        if (nResponse == IDOK)
    5 M+ S6 T0 E- s8 _
  578. //        {
    ! J9 E$ \0 L$ r6 P6 L  s2 @, r4 l
  579. //                // TODO: Place code here to handle when the dialog is
    2 W% t0 N% x0 \2 g
  580. //                //  dismissed with OK
    + l& f0 i- i! t" ^. E
  581. //        }
    , a) n/ Q7 v, p# y% F/ t
  582. //        else if (nResponse == IDCANCEL)" _+ P' L- p/ v; x$ G. [  s
  583. //        {, h- ^! W/ X! _: R1 n
  584. //                // TODO: Place code here to handle when the dialog is
    - x5 y/ E7 v9 z, {0 t) ?
  585. //                //  dismissed with Cancel( }: m9 E& C2 s  k( \1 E
  586. //        }9 I4 u/ t, l5 J7 |9 S7 K+ n( e
  587. 7 Y' `$ C% k: \$ E) v# u7 ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ b' y% r# N+ z/ l, z8 e# Y
  589.         //  application, rather than start the application's message pump.
    & K: J' x; w' L' u+ W+ Y1 F, M
  590.         return TRUE;, n- _# t* i6 Q% [( e; Z
  591. }
    ! {! E8 Q# _! T8 Q0 ?

  592. + B* \! E! z2 v
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! d# S+ e; }6 [' Q( r
  594. {4 y+ }( p0 C  L1 C9 Z9 P2 _7 l
  595.   int i;
      G5 b* A/ ~7 K
  596.   char *szRet;
    & @- f2 Y) u: S) X8 X7 x% o4 j

  597. 6 g# g% m4 \+ r' D. y# o( O+ P# z2 E
  598.   if(pSource) { itoken=0; sztoken=pSource; }/ A1 g3 q& `" A
  599.   if(sztoken)
      s1 \4 C6 u  G' L) n
  600.   {
    * t+ A" Q) W$ ^# y6 B8 [! ]
  601.     szRet=&sztoken[itoken];8 c: l9 }6 v7 q$ c; i. E3 r7 o
  602.     while(sztoken[itoken])7 ?3 t& d& D7 a: ]6 b1 }
  603.     {( D* v6 \  ~1 q& g0 E! v: L* D
  604.       for(i=0;i<(int)strlen(token);i++)
    & h- S8 n' @# |2 L0 X2 S. `; K8 b
  605.       {
    3 d4 Z+ c# g* d) E0 ^; H6 t; X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 ]: ~" l9 `6 D% {, e3 ~
  607.         {
    4 U, e2 u7 e; A4 h+ M; \0 L
  608.           sztoken[itoken++]=0;
    ; N' z5 ]8 P' [0 D: `( Z3 n7 f% n: k, H
  609.           sztoken[itoken++]=0;; [+ x. H5 r  p' j  M
  610.           return szRet;' Z5 S" w* S& ^3 i, a% ~, d+ S3 {+ j
  611.         }( n' j# O5 t0 v1 c/ i% z
  612.       }
    & R+ X# F2 p3 x" C
  613.       itoken++;2 M8 Z- L( E5 W7 e6 R6 t% d- ?3 |% u; ?
  614.     }
    ' i! V& E2 Y8 t9 W! y; _2 P
  615.   }9 u6 \6 o) z; f5 o3 m) s. i
  616.   return NULL;/ [& y" G+ L$ }6 {
  617. }
    2 v& Y; y- m9 o& _

  618. 9 @/ F" {5 d. `9 \+ M( m
  619. void ProcessProc(long Total,long Current); E& T, v+ D, p( A% F. s4 {* e
  620. {" r2 X( _" @3 j9 d" ^5 b. m
  621.         MSG msg;, s0 k9 f, X. d. D8 l7 M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* J/ M7 m9 o! v3 e( n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, V5 e4 x& Y" p: p# G0 d3 Q: N
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 d4 o4 M) r3 b# F7 L! Y1 X2 |
  625.         {2 o2 I5 s! [% f& g  j( g1 h2 q' r
  626.                 if(!GetMessage(&msg,NULL,0,0))
      \; g0 b% E, j: F% w8 M
  627.                 {! ~& j0 n7 E5 N+ l4 u7 D
  628.                         return;
    4 G" ~# t. I. o1 O  R8 O3 `, a
  629.                 }0 t( ~, _" Z8 H7 S5 Q
  630.                 TranslateMessage(&msg);; f6 v7 l& U, R/ e; P/ x- ]
  631.                 DispatchMessage(&msg);
    8 v! x2 N# L5 p) n) `- H6 ~& R+ |
  632.         }        . B1 j7 Y3 P4 w% y" P4 I3 P( F& M
  633. }  C& W. s8 K5 g% [  _) q
  634. , X" b* p% ^. O( I9 f
  635. BOOL bFirstChar=TRUE;1 V$ e" {8 m( @: @* D& \5 z
  636. 4 V% f8 a- p0 T  G1 ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ G) f/ K! }9 w9 Q- M
  638. {# _3 Y  U- s. ?
  639.         // TODO: Add your specialized code here and/or call the base class
    ' Q, X5 N4 u7 w, d3 z' T$ H: {
  640.   switch(dwProgramState)
    4 o; b: e5 k% G+ h2 A4 k. _9 N9 a$ r
  641.   {5 W: h( O1 D& E8 |; O/ B
  642.   case AP_NOTHING:- f) l7 X; d- L0 B# H" e- S8 s
  643.     switch(dwStartUpSteps)
    7 l7 M, R8 ?& s# u5 w9 }* ~  z
  644.     {
    , O8 J2 B/ h3 V  L1 q! _- m
  645.     case 1:4 [, F4 {& l0 t% w0 d8 t
  646.       {  I% {) m1 {/ D0 E! I& R3 D
  647.         int i;
    + v' N6 W) v6 l
  648.         CDC *pCDC=dlg->GetDC();5 I  Y; n) m, p& z6 o
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 ]2 i0 I& d$ K7 |% X
  650. //        Graphics graphics(hdcwnd);
    " l  G1 e: ]. \4 [  t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 i5 V$ e2 h# v- \% F% \- m5 A
  652. //        INT iWidth=bitmap.GetWidth();8 z4 G' {" R, `6 e
  653. //        INT iHeight=bitmap.GetHeight();
    ! @" }& `  g7 ]
  654. //        Color color,colorTemp;$ h# `* P' v: N/ Z  m) H% K6 A2 L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " P$ k% H# H3 |: _
  656. //        {' j* g. W$ N; }
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 V: ~, x! W1 Y6 S
  658. //          {, \  G$ X' V4 S6 C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! F) J7 j& ~7 o
  660. //            colorTemp.SetValue(color.MakeARGB(
    % K( k  V6 G" X+ N0 B  U
  661. //              (BYTE)(255*iColumn/iWidth),4 c4 l; X, b4 A: M* K/ D2 Z' [
  662. //              color.GetRed(),, X# G: ~8 j0 C& z, Z* {
  663. //              color.GetGreen(),
    4 v0 W% i/ E, ^6 w
  664. //              color.GetBlue()));9 V- C( ~9 ~6 Y8 O! ]
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # L$ I, Z# ?( y/ j2 X
  666. //          }
    $ Y" v. u  K: a$ r
  667. //        }2 s0 E1 _7 m  e  Z' [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 G7 W$ u7 c( }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ z7 V1 S3 z3 D' C) @( N# e' A1 w0 O/ z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ! C! a  F6 s* q4 ~& Y! e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( F% j! {) V. ~. X4 G
  672.         for(i=0;i<240;i+=8)
    # v- n) j5 Q" u" Z2 o
  673.         {$ Q: N7 ]. V4 M0 \; Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ D5 F3 {. D% {5 r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, {$ Q; O5 T5 n! z$ N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 l! m/ t4 N/ t3 j5 v9 W
  677.           Sleep(33);3 R) F: W. ^2 h: c# f; ^5 k/ Z
  678.         }
    1 f# F" @; `2 U& j3 i1 H& k* b
  679.         Sleep(1000);
    5 N! g. F( b* B. O! T
  680.         for(i=240;i>0;i-=8)
    ( `; j+ l: A: K3 ?
  681.         {
    ' d, T3 ?8 E% ~" s4 V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . B6 y; p+ C0 A0 w. D3 j; D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! w  T  `( N' z  d, l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% r0 a+ m6 C; K- K3 W# b
  685.           Sleep(33);5 x- W2 q; f; M  ?/ q
  686.         }
    + e$ _! n0 H9 |
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 ?0 d- s" l! ]& |3 v+ u
  688.         dlg->ReleaseDC(pCDC);
    " G( B$ k8 b$ y) S" a
  689.         DeleteDC(hdctar);7 N5 B! D" O0 ?1 ?$ P
  690.         DeleteDC(hdcsrc);
    * s% i4 `8 L( ~
  691.         DeleteDC(hdcorg);
    $ }# ^" M" h/ F1 a! i. J# J
  692.       }
    % K' c0 Y, l3 G6 u4 g5 x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 s' i- M7 G' q5 `1 V9 s; b# y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");$ r* W7 I! o& L7 [  R5 R! p+ V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) q* s# O9 d' I! e$ C. ]9 D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - r" \* E4 K6 H; p1 b9 \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ~) ]/ i2 r9 `% M
  698.       if(!Dn.Connected())6 G5 |8 \9 t! w. ?5 h- {% r
  699.       {1 J3 {0 ]& C' \$ T# u$ ?9 H/ V$ p3 f
  700.         dwTotalFiles=1;
    , d0 M: z) K$ @. ?7 d# l5 ^* ]
  701.         dwDownLoaded=0;
    & E# _. x- |' X$ }# I+ l! |
  702.         bSilentStep=TRUE;. B* z( y1 a( P/ g! V
  703.         bCompressed=FALSE;6 ?  s& N/ Z# u
  704.         strExtLocal.Empty();
    . C, h4 ^, }/ [+ b7 W
  705.         strFullName="readme.txt";
    / e) n( O- ]) M7 L& m( [+ N2 u3 t% m, w
  706.         dwProgramState=AP_CONNECT;7 Q6 q, F" L2 U; D  _' @
  707.       }
    2 f9 m$ \. z8 h1 Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " I3 u/ T. c* U3 {( X
  709.       dwStartUpSteps=2;9 P1 X9 E% ?0 d: C
  710.       break;# y% k0 a- P5 U% _% e9 ?1 C$ f
  711.     case 2:5 P3 i7 q3 T) M
  712.       {
    " A$ F& u) d! r! z5 w6 t# S. w
  713.         int iEOF;
    0 i7 K& G6 W' Q1 e8 E: S
  714.         FILE *fp;
    . ]4 |# x9 i0 p
  715.         char szString[512];
    # m) j& R1 _$ |: A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( U9 ~, O5 Z" Y
  717.         if(fp)8 z( ?' Z6 f# Z# B. c  m" Y
  718.         {9 R% G/ S9 m+ J; A3 W$ X! w
  719.           do. V$ A8 E0 V- W2 r' O8 Z
  720.           {; G2 D& p* @; t  m
  721.             iEOF=fscanf(fp,"%s",szString);
    7 g! Q: q  y; U1 a6 T  I% ]
  722.             if(strlen(szString))  ^$ ^6 y; E3 T2 f
  723.             {  J6 h6 \+ k9 K* X
  724.               if(bFirstChar)
    - V3 X. t# d* C/ N/ P$ ^
  725.               {
    5 m1 C  _+ Z0 M
  726.                 bFirstChar=FALSE;
    ! g; u) J& g, a5 Y
  727.                 bConnectIsBig5=FALSE;
    3 q% ?$ |* ^4 n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 f  V2 y- `, R4 c  {$ V% A
  729.               }8 ?2 E2 X0 L( O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 H/ [( C0 j: N  x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' {/ o: y% E3 M) M" l" M  W: A- o
  732.               dlg->m_ListText.AddString(szString);2 f1 O: I, K( y' w; X) B  i0 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ i5 |8 J" u3 t$ e  x: i/ {- r' ~
  734.               *szString=0;& j" T2 |& s: f+ O6 h2 R; ?8 a
  735.             }1 N$ |$ V' J+ P
  736.           } while(iEOF!=EOF);
    6 ?, S$ y, m7 U9 L1 N6 V
  737.           fclose(fp);
    ( g( v1 q; Y6 c( x. B1 e6 X9 Z
  738.           unlink(".\\DownLoad\\readme.txt");
    % p' J! y2 F& N$ P6 {6 h, n! C$ \3 k0 {
  739.           dwStartUpSteps=3;* E7 x- N- t0 k% k1 D. M& F% @% L* V
  740.         }
    - ]9 |' l7 x" V: K
  741.       }
    1 N3 b8 [# _1 x" |1 w3 Q
  742.       break;6 W/ _) c# x; N. u" }7 H8 @
  743.     case 3:6 e* l3 T5 Y, n% v
  744.       if(!Dn.Connected())5 y5 U2 f) X! g
  745.       {
    1 h% Y# ]8 P3 _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. t# [: N8 O, v, v" z
  747.         dwTotalFiles=1;
    3 O, B" l" \6 h# d( c
  748.         dwDownLoaded=0;# h5 o, I. V( d8 g! v/ @
  749.         bSilentStep=TRUE;
    : T. A' I/ N4 E6 ^8 k6 }
  750.         bCompressed=FALSE;) f( e* u) c- c$ h( t' z
  751.         strExtLocal.Empty();
    9 d$ w" r1 M0 ]1 @. ?
  752.         strFullName="checkversion.txt";
    * k# w/ k8 g' c9 ~
  753.         dwProgramState=AP_CONNECT;$ r1 \' j6 @  o% S
  754.       }, @% z$ N# U4 n+ t: X8 ~
  755.       dwStartUpSteps=4;
    % C. B( Z1 q0 m" N/ W' k1 k
  756.       break;9 F. E7 i, Y- Z0 t1 b0 N6 Q
  757.     case 4:! _9 N9 w* |. m, x" y4 R' c
  758.       {
    ( Y  G) n( h6 e3 B: P6 F3 G* q
  759.         FILE *fp;8 Q& I) U. k5 p1 v
  760.         char szString1[128];
    6 [4 V, U4 u; A" }8 z
  761.         char szString2[128];
    . C2 L+ t) f/ f6 z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * \3 x! X4 t% ]- e! W' u+ \
  763.         if(fp)3 ]0 I% p6 G5 [  ~! s) K
  764.         {0 x8 {# O$ i5 a/ A) |  ?* Z
  765.           fscanf(fp,"%s",szString1);
    1 V5 `& d- e7 }
  766.           fclose(fp);1 r5 d) b: n6 g/ r# K$ t( j
  767.           fCheckVersion=atof(szString1);
    9 p  O9 i! I' l2 B7 f
  768.           fp=fopen(".\\checkversion.dat","r");
    1 X/ `. ~% T' j" K- O
  769.           if(fp)  H3 s( c5 U' w8 U: Y/ n
  770.           {
    ' ~" _5 o8 |  [; d$ L
  771.             fscanf(fp,"%s",szString2);
    1 a6 T5 v, l: d  W
  772.             fclose(fp);
    , x5 P) U& O' {$ X
  773.             if(atof(szString1)!=atof(szString2))1 J/ d  _, j) @3 h, X
  774.             {
      d8 _4 y9 v( [: D; M8 {
  775.               if(!Dn.Connected())
    1 E( t7 h9 ]( p0 @
  776.               {
    0 @5 K* J' [4 m, q6 @  _! S( I
  777.                 bFirstUpdate=TRUE;
    , ^, X$ U. t( X2 r
  778.                 dwTotalFiles=1;
    ( e$ R) l* ]8 o" V1 K
  779.                 dwDownLoaded=0;
    ! n5 n. @; @, z) ]
  780.                 bSilentStep=FALSE;( ?+ t  u- b5 h; @( X
  781.                 bCompressed=TRUE;9 N5 S0 l0 O7 v; h* _' |
  782.                 strExtLocal=".\\DownLoad\";
    % A7 f% R. r# X+ w
  783.                 strFullName="update.txt";
    ' g7 I; ^% ]# n2 P( o$ \: Y
  784.                 dwProgramState=AP_CONNECT;) L$ q# Y- h: ^4 L, H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - Q4 d8 q& `5 H2 c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( E. f9 c; `4 T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 ?' ?) x3 ^9 B6 P% _) Q; w
  788. 4 W9 h1 n  T1 i2 S3 Q% {/ l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Y7 s& y! f1 ?7 {
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 J) ~8 }3 U! U* q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 O) W3 K4 i5 E3 K
  792.                 {
    # e, H/ S9 z+ ?2 @! W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " Z. k( _" u8 L, ]" s" w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: V) X" \/ o8 P. X7 E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 ^3 T$ J4 a2 ]% x( r1 o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , n/ R; K1 v) T( T' I* p/ m: Y

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。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, 2026-2-3 07:43

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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