CSUpdate.exe源代码

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

7 g/ N1 c7 P" d9 g( w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 y+ Q0 D: R0 p3 C& ?
  2. //1 t: q3 A9 y/ O/ k4 X, [

  3. 1 ^# V# E' s, @  H. s. u
  4. #include "stdafx.h"; Z; p5 X7 }$ a: \) N

  5. 5 s# _! V! Q! s/ e3 g
  6. //#define UNICODE
    2 P- E, U$ A; M" f# @; ^
  7. //#include <gdiplus.h>3 Z5 c* T  x- y, I% {# l
  8. //using namespace Gdiplus;) F7 A0 H; [! i1 H. T& U0 y
  9. % A' B4 W& @% m; H8 M
  10. #include "RevApp.h"( }" F5 c: m0 u
  11. #include "RevAppDlg.h"
    ' I/ b, v* ], `/ z* `

  12. 8 c6 q' A- T; Y) N6 F  h; r7 J+ n
  13. #pragma warning(disable:4786)
    ! _' K6 ?+ V) d! b, \& P
  14. #include <map>
    & L1 H1 L, }1 g
  15. #include <list>
    / V% r( D) B1 T. h
  16. #include <direct.h>
    2 l3 h# l5 G" r2 N: f0 n; `
  17. # B+ q3 s' X6 u9 D+ D7 S
  18. #ifdef _DEBUG* n  k4 @" _8 d8 \7 P4 u
  19. #define new DEBUG_NEW: y6 ^* B( d- G9 {
  20. #undef THIS_FILE* `4 O* _* {- `) t. ~
  21. static char THIS_FILE[] = __FILE__;2 F, H- a# x) C5 t! h& z
  22. #endif
    6 n: |5 l0 I; n; x  O
  23. #include "SkinResDef.h"' Z, q6 `: k! a& f
  24. #include "ChangeBG.h"$ e  N( a" k" m6 ]) N8 S2 _
  25. #include "AFXINET.H"
    * Z2 L9 m6 ]4 f0 I8 M  o5 @$ ]
  26. ( D6 a) D: k- ?0 C8 `5 y" v3 V2 z
  27. #define TRADITIONAL_CHINESE 0
    : y8 D8 e, A: l, v5 v
  28. #define SIMPLIFY_CHINESE 1
    ) j! y  q/ U$ @! }9 g% W
  29. #define ENGLISH 28 {. A$ Q1 r$ ~0 n; S, D
  30. int m_iLanguage = ENGLISH;1 A3 D- K$ B, ~. n* F8 q
  31. /////////////////////////////////////////////////////////////////////////////
    8 l! \9 h2 {) b3 L6 a* R
  32. // CRevAppApp. d/ f" L( z+ k+ P

  33. ) J  z! V& ~! V; Y7 `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! Y/ }, S8 i  U$ B3 p! F  g
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / R7 P# z" w- Y; [. n. R$ s. t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 w" p1 X! G2 Q- j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' P& o1 X2 r) M
  38.         //}}AFX_MSG" @* u0 S: h8 \0 Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ A7 r  i8 P; s% w" e
  40. END_MESSAGE_MAP()
    * d2 j; m/ S- _; z& ~, R

  41. ; ]# ]& G( k  f* c( I+ S& e2 z
  42. /////////////////////////////////////////////////////////////////////////////; W! S: w6 }+ H( r" n
  43. // CRevAppApp construction
      X1 L: k! Q, t  O1 W1 U( Q8 ~
  44. " k/ f0 e. V: z7 O
  45. CRevAppApp::CRevAppApp()' [- C' t! T) m4 L2 h3 _/ p4 a+ |
  46. {8 ?5 z1 ]! R0 W. s4 Z
  47.         // TODO: add construction code here,% R  D! ^: d6 s6 m; J8 t0 a' {
  48.         // Place all significant initialization in InitInstance2 o- U) E$ ^( `! D4 A, m4 |
  49.   bDisplayIsBig5=FALSE;2 U2 g' F8 r; X/ ~
  50.   bRestartUpdater=FALSE;$ P) N' J  o0 v& Z+ r
  51.   bFinishUpdated=FALSE;" U6 V( r: K9 [) `) Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 l7 _7 e" [7 d& G6 N3 g& U+ v
  53.   InitChangeDataBig52GBKS();
    7 O; j2 }( c7 Q7 x: z1 ]# S& Q1 y
  54.   InitChangeDataGBKS2Big5();* K; d6 `3 @: I! n
  55.         //
    3 W7 ^$ M! M& d! k; D
  56.         bClickRunExe = FALSE;
    # E6 ?3 _* s$ L6 K8 f; ^+ f
  57.         //, R2 a7 m, S2 A* B$ }; W5 k' z! n
  58. }
    / B, c1 G. r5 l7 B

  59. + W" \3 P& e7 ^+ ]
  60. CRevAppApp::~CRevAppApp()
    8 m' H- g, _$ [6 D0 f* h" q
  61. {
    . o, ^) V3 t, o6 _9 b
  62.         // TODO: add construction code here,/ |8 D. l; ~6 d7 i2 \2 `
  63.         // Place all significant initialization in InitInstance
    ! B3 \/ n% @. z3 n7 P9 d
  64.   EndChangeData();+ i# T% @) g! c, m% q1 _) h
  65. }7 b- A5 x6 |5 ~1 q) c$ _
  66. : {" s1 c. W2 s+ ^8 h
  67. /////////////////////////////////////////////////////////////////////////////
      o6 [1 T" s# H: f4 G
  68. // The one and only CRevAppApp object! o# @# V/ ~$ U% u( W* W

  69. ( I' O8 z, c6 J
  70. CRevAppApp theApp;( e8 l) Y& V, ?/ w, c

  71. ) U1 |: n# q8 A1 ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 F- Z  H" S8 t" `1 \8 @
  73. {
    * @0 j6 `  M( A% u) m& J
  74.   int iEOF=0;9 Q3 }8 t2 u5 @
  75.   char szTempName[MAX_PATH];
    & u& y( e, x3 f) a7 A
  76.   *szFileName=0;
      n+ L  L2 i9 o# P" l/ ~) Q/ [
  77.   iEOF=fscanf(fp,"%s",szTempName);: C. ^( ~+ ~) ]  Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( O8 F9 A( w& S4 G0 C0 O$ w# K
  79.   {
    2 G" {* e3 C" w& \3 K
  80.     strcpy(szFileName,&szTempName[1]);
    $ L! O7 F+ Q* W: X4 B) f' n; W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : @+ T3 p2 d7 j8 P" X2 P
  82.     {; N% |% a0 H0 w, r
  83.       iEOF=fscanf(fp,"%s",szTempName);& a& C1 x$ y% @* R  c- @% D2 A
  84.       strcat(szFileName," ");# ~4 g! G' [; G' h& _! ?5 }1 k
  85.       strcat(szFileName,szTempName);$ E  u4 `% d6 v/ U2 K
  86.     }, ~$ G6 Y1 W% W& Q8 c
  87.     if(strlen(szFileName)>=1)
    4 l# n9 o  D/ J( j- S# L
  88.     {/ t, s1 _" F+ x; S+ o( J# y4 B4 @; u
  89.       szFileName[strlen(szFileName)-1]=0;
    5 q5 l+ g; {# m
  90.     }$ P* [- a9 d, Y1 O
  91.   }
    + {, O& G/ K/ c- g4 b
  92.   return szFileName;, e' k3 c3 a) E4 q# @+ H% w& t
  93. }( _0 z9 n3 ^9 Z
  94. 1 [8 g3 K) M3 ^0 V' o7 }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * x) `; @+ A+ i' ~. }! Z1 S
  96. {! J9 Q5 h* M/ C5 h( Q4 e
  97.   FILE *fp;! p0 d  m- p: r+ G1 G
  98.   char *key=NULL;. _; Y% y4 n3 Q- w- p! E
  99.   char version[MAX_PATH];/ u5 a3 @5 z- t- n/ Z0 j
  100.   LPUPDATEFILE file,olds;
    & ]4 k( d# l+ H& I/ @: x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    " M! ~+ p7 A: |2 ?5 N$ ~. `
  102. 5 g6 p, J  w* T8 y7 C) D
  103.   UpdateList.clear();
    & ~& z9 ]: T2 b
  104.   UpdateFile.clear();
    , R- x" z/ `+ E
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' R# q6 u6 A. a. d* Q1 d3 g
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % x2 ]$ C; K. f
  107.   fscanf(fp,"%s",version);0 M4 y2 J! e+ B# G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 [; m& q1 B0 o  Z  P
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 n+ d7 X" O- a; K
  110.   {2 t. P( V+ t& l8 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 R: o+ p4 }2 l; H4 K
  112.     fscanf(fp,"%s",file->path);
    - P* T# _& T0 P
  113.     ReadFileNames(fp,file->file);
    ( O( d0 F1 U; }! W2 z4 }
  114.     strcpy(file->full,".");7 y; N- h% `7 K0 A! t6 O' l' s
  115.     strcat(file->full,file->path);( A3 K' E; E' b; C$ C! ]' }
  116.     strcat(file->full,file->file);
    + `. R  y( e& N5 d$ h- U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" K5 I6 X  ~( i; W* {# D1 i+ h7 K( F
  118.     {
    * P' P( P$ O& [, H! I8 W
  119.       file->vers=(float)atof(version);
    . M5 N, o+ }2 ^! n
  120.       UpdateList.push_back(file->full);% @$ `: Y. \* x) B! p* r/ K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 C# L( c3 v* r( ]) b! ?) ~
  122.     }  X. }5 G1 U2 p( W
  123.     else
    6 _  X0 ?3 u$ c1 `3 `
  124.     {
    ( l/ Z- U+ ?) o
  125.       olds=(*p).second;
    3 R3 O! o* c* Q6 Y& d
  126.       if(olds->vers<(float)atof(version))
    5 Q( a/ e& n& B
  127.       {3 @  q5 f( L5 x6 h  |3 x% g5 r
  128.         olds->vers=(float)atof(version);/ p- M9 s- {) I0 N2 [; n  b
  129.       }
    " x( ]+ ]8 s9 j* V) R7 A1 D, g5 d# l
  130.       free(file);
    8 j3 p5 t& Q0 x0 l
  131.     }$ @( H# W7 w+ B$ c4 L
  132.   }: ?+ b2 b: u' u1 h* a) G7 ?+ g
  133.   fclose(fp);
    ' W( W' y% j( c" {0 \
  134.   return true;, e2 ], A, d: G6 v# r( C
  135. }0 s: e! ]( D" [4 \# ?4 F
  136. / F! G2 Q9 r& N2 R0 b' s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 u0 e% J  u9 @; |  l  l
  138. {
    3 U% M, {( [0 p8 h) p
  139.   TCHAR  szFull[MAX_PATH];
    2 J( e+ A# b' X3 U0 I4 K& ^; T7 ^- c
  140.   TCHAR *token,*inter;7 e4 \3 ^* q! s- q! _& d, |+ l/ g- i
  141.   *szPath=0;
    # b* z4 D9 x# U8 S
  142.   strcpy(szFull,szFullPath);/ r- d8 Y0 K% {# z" x
  143.   token=strtok(szFull,"\\/");6 R9 j/ b, ^7 o/ [+ d( ?( g
  144.   inter=token;! i# t' `. Y8 z1 @* T
  145.   while(token=strtok(NULL,"\\/")): J4 w% e6 [1 u6 \/ o
  146.   {
    + d3 h, z+ D& S" t* p- ^
  147.     strcat(szPath,inter);0 l8 O2 K; m- U* p$ E3 M
  148.     strcat(szPath,"\");
      d8 d* s2 ?) O9 U* n5 G
  149.     inter=token;
    ! }! H* S* |' J0 v
  150.   }  P% S! [  j' M) w# o
  151.   return strlen(szPath);+ r+ t/ Y+ g" V
  152. }% X) f/ G* t( \# F
  153. # U! \+ p7 p/ W. M7 r) e, ]; b+ _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 ?0 B" E( g8 h! T. o3 g' d
  155. {6 z: ?% p3 u3 U
  156.   DWORD attrib=GetFileAttributes(Target);$ }) B; \) d7 }5 s2 P
  157.   if(attrib!=-1)
    ' w: A! F$ k; r( A
  158.   {
    * }% O5 g. M- p4 L: g$ v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ k0 l! N+ i2 T% p, l: i. w
  160.     {
      M8 g& y& e! _6 `. f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. U5 a7 _" k% d( N' T% K7 W
  162.       SetFileAttributes(Target,attrib);% V" U4 Z$ S+ \2 I  [+ ^, u
  163.     }# |/ q) h* H. k/ V& S1 s* Z
  164.   }9 a$ v4 y/ }1 k; j
  165.   CopyFile(Source,Target,Erase);
    4 D; t% ~* R  v$ J
  166. }
    3 S$ p* [; G  r9 f5 P/ U
  167. & @. k6 R' a) E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): n3 C- h! ^; z& _0 V; C
  169. {
    , j& ]3 C; F0 T* Z2 D/ a& ?, U1 F
  170.      FILE *fp;+ S) w; d3 X1 |0 J
  171.      char  szBuffer[8192];
    ) i" u! ^- h0 {  u
  172.   va_list  argptr;
    * t" u7 b  \; L* e
  173. 0 G2 z- C1 ~" Y6 W4 O$ s/ G, f
  174.         va_start(argptr,message);9 H' d1 ?/ D$ D  o. m9 I
  175.         vsprintf(szBuffer,message,argptr);+ J; N! w9 ]7 I: M! E
  176.         va_end(argptr);4 S1 p( H- j) b6 m: Y: h/ D8 {6 F: t& i
  177.   fp=fopen(FileName,"a");* G: l0 e% b% I) Q& I' o. O$ M
  178.   if(fp)
    0 B/ n) a: [# F4 x
  179.   {
    8 t" F& r" S' ?
  180.     fprintf(fp,szBuffer);+ U" e9 G% G' {  H9 ?% Y* q, e" H
  181.     fclose(fp);
    * H/ r$ e6 W# p9 G
  182.           _flushall();
    5 D" `+ `4 e( w
  183.   }
    " V* n" d" q* o* [
  184. }
    8 I2 Z4 y: y( X3 M7 o

  185. $ |, e3 j- `4 F9 Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; }% I7 u- \! A. j: R
  187. {
    1 s& W4 M$ p  A" L' c" l
  188.      FILE *fp;6 [. N* J5 a8 e) e0 k8 X& H: b- f
  189.     DWORD  attrib;
    : H: Q/ p1 o# S. @# F: X: [5 y& F
  190.   attrib=GetFileAttributes(FileName);
    5 n  A. M0 O, z  e& z
  191.   if(attrib!=-1)
    . `+ n$ _6 K3 E7 H: }
  192.   {: [, y& x( G% e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, W5 H  g+ [7 \; [
  194.     if(!SetFileAttributes(FileName,attrib)): K0 {4 v! ~. A% [
  195.     {4 \0 J% \* P& f. o* O# }+ Y
  196.       return FALSE;5 _2 l1 i- T% I- D" W7 L/ \
  197.     }
    . q, q# t# }9 r2 e; U3 _
  198.   }
    " g6 I$ E3 [0 G- G$ `7 ]! R5 N2 v& M( f
  199.   fp=fopen(FileName,"wb");1 x3 x4 [& z- ~) ]0 Y  W
  200.   if(fp)9 H. c" A/ {  d8 g3 g# G& p
  201.   {
    9 ]5 M) Z" n' I3 M
  202.     fclose(fp);3 G$ n/ J9 E% ?- F7 J
  203.   }
      }1 c; Y' ]- }. b2 [
  204.   return TRUE;
    6 W/ X3 x/ x: D8 g0 N1 R' e
  205. }
    # ~9 h; ]9 u$ a9 D" n
  206. 0 G3 r/ t/ @9 Z* ]( {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)) j% O* g6 R* [/ b, T1 [! v
  208. {4 ?% T* r! ?" _2 t# c. d. y
  209.   char filename[MAX_PATH];
    " ]2 e! V  t  C% b. {
  210.   LPUPDATEFILE file,olds;% b8 m' d8 T$ ~! t
  211.   std::map<int,CString>::iterator i;
    3 X; _7 N& {, x( _$ i& @4 ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      }9 q/ C2 G1 p) j/ o
  213.   std::list<CString>::iterator l;4 i( m$ W9 Q. e0 o, o

  214. $ H, J' F" E' J; N3 [
  215.   if(bFirstUpdate)/ n5 Y/ o) ]+ b  b! Y( {! f1 I; Z% X
  216.   {+ P9 I* X% L; i. W! @6 G% L
  217.     dwCurrFile=0;  j! F. f; f/ [& [# H
  218.     bFirstUpdate=FALSE;
    ' v' _8 r& Q9 t7 `* A
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' v# {% Z# ^* X" \) M1 M& g
  220.     {
    ' Q( v/ O7 ?* S: C: y$ I1 }
  221.       dwTotalFiles=UpdateLocal.size();% M+ k) A, Q/ G
  222.       dwDownLoaded=0;! a5 L/ T% e8 z6 ^$ ~+ o% M
  223.       bSilentStep=FALSE;8 _; Y% f! _2 z5 u( P0 U
  224.       bCompressed=TRUE;
    7 x' r; B2 x" X
  225.       strExtLocal.Empty();
    & _( k; d$ n( \. m
  226.       strFullName=(*i).second;2 e! ^1 C3 _% K/ O1 d0 Z" K1 B
  227.       dwProgramState=AP_CONNECT;- D6 y# M5 d- @7 Y4 S' L+ d
  228.       return TRUE;4 C* m+ D! K5 q
  229.     }
    ' U3 E1 H6 N, J. b6 w, g! f: i
  230.   }( ~0 m+ v) {2 d3 g: t' k- |
  231.   else if(bRestartUpdater==FALSE)
    / L, b/ l! r) E% y
  232.   {) v6 A& S, H. S' ~+ n
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 {8 G" t) p5 P+ v8 v3 _% o  Q& ^/ C
  234.     {3 z+ s# p; b! D8 o
  235.       file=(*p).second;
    $ a4 k! Z; X+ f0 ^1 b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - S5 t- `1 b( _8 k. l, a
  237.       {0 h) _3 O, A7 i6 a% B
  238.         olds=(*p).second;- m8 D4 T/ I* ^. k: L; a- F1 ?% Z
  239.         olds->vers=file->vers;6 i- Q5 f, d9 S; S9 X
  240.       }& Q" O, B* q( b/ H
  241.       else
    ! z" v3 ]+ ~  }+ i
  242.       {. x$ G  V" P! k& K: D* V
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 o  k+ ^& c& f& Q3 B7 C
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 W- k9 c  G( o/ n  L) N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & V5 R+ {% d/ B6 `) G! _
  246.       }
    ! R+ P$ j* f/ _& \0 F/ g9 p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) t; r/ e" @2 T. k
  248.       sprintf(filename,"(%s)",file->file);
    ( K8 I% W& a( a3 j0 t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# M4 }' \4 p" w& M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, ~8 U4 Z3 y8 J# z. C5 ?! V
  251.     }
    ) W; W2 v; U8 N5 O$ p0 m% S
  252.     dwCurrFile++;
    ) a8 Q3 V1 m, U5 L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), @/ P1 u) ~- y1 j8 {( F6 z
  254.     {
      _6 x+ _( @0 ^* L; h% ~+ h
  255.       bSilentStep=FALSE;% _# R7 S" z& f) t# |+ ^5 @
  256.       bCompressed=TRUE;  B; e  x, {. P" x6 l0 _! K; u
  257.       strExtLocal.Empty();
      u! _, T# N, C2 O
  258.       strFullName=(*i).second;
    ( f/ @( Z, Z/ X/ |3 e
  259.       dwProgramState=AP_CONNECT;$ W3 G* V6 |6 o. v
  260.       return TRUE;
    + u' Y0 p) N" O) Y0 r4 K# S  L
  261.     }
    / F: R$ g# h9 N$ ]$ }  K8 v) j
  262.     if(!bRestartUpdater)% r- B; g2 g, a2 G& I' {) s
  263.     {, g- T7 Z4 H) I% u/ s% J* n/ ]
  264.       int iCurrSize,iFileSize;
    " u# g' o1 q3 v& f
  265.       iCurrSize=0;
    - T* I6 @; s! g
  266.       iFileSize=UpdateList2.size();2 D: X4 Y! N( _; d# H% \5 Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 R( x) M! {3 M; Y1 u* T7 j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + ]- B  z; u; x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 |* t) p8 a# [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 \# Q& T8 X; K/ s
  271.       Fclearf(".\\update.dat");9 N% a4 ^4 o2 U1 V4 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( h* u& S5 g9 P- ?' [* X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % f2 t& ^" g/ K
  274.       {
    / v! {& u5 ~+ x- z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  l; E! u  ~$ r
  276.         {
    6 q3 \7 [2 X+ |
  277.           file=(*p).second;$ r3 z5 L% M7 N' Y
  278.           sprintf(filename,"(%s)",file->file);+ F; Z4 f4 N6 G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 H$ k0 A  f1 k6 Z  N) L
  280.           iCurrSize++;
    ' O" T( B! R9 R- U6 y( o
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; F1 ^" X3 R& r$ e3 P- y
  282.         }' E  W4 o  G6 F0 j( k+ J+ Q
  283.       }
    ( Z9 K9 d  h$ ^" h6 |" g( |
  284.       unlink(".\\update.txt");
    2 u% t" z, h1 k! |5 e
  285.       unlink(".\\update.tmp");$ |5 r2 u8 S2 }2 v
  286.       Fclearf(".\\checkversion.dat");; e9 q1 f6 v* `# H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ \! }: P% N" M7 ^* A9 A
  288.       if(UpdateLocal.size())
    8 p6 W$ {/ T: F6 P6 _- n
  289.       {5 z- O/ ~# w/ k$ m
  290.         UpdateLocal.clear();
    8 ^, U& o' c8 o: T1 i) m
  291.       }4 v6 i" c/ t6 x4 J
  292.       if(UpdateFile3.size())$ z# M+ y# P$ C  B% Z4 f, u
  293.       {( i& i0 g$ V) l; x+ r' Z: b6 `
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' z) H; H: p9 Y/ u7 f' Y
  295.         {8 h# P5 m" C0 L3 b5 @7 |# C
  296.           file=(*p).second;) A1 ]- @+ q' ]4 u) o- w2 z' X; f
  297.           free(file);+ T8 i$ P4 D8 S, w% d/ E: o
  298.         }
    ' h8 x: W- |4 W
  299.         UpdateFile3.clear();
    . K& c) z/ n; F4 V/ ~
  300.         UpdateList3.clear();
    ! N( F& ]' O" ]# X& }3 N2 V
  301.       }6 s4 v+ J& J2 s, G
  302.       if(UpdateFile2.size())! \- Y8 Z" Y" O$ X
  303.       {
    1 v6 N4 |' K" n& q% [6 `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( e- V+ u- E' g6 w( r  Z1 r
  305.         {6 t7 Z9 e4 l) L$ t
  306.           file=(*p).second;
      `/ R3 _+ A, b1 J
  307.           free(file);- O3 Q1 o! d# f( T; \2 W$ w
  308.         }
    4 l9 J8 x: p% {- a  T! s- ?" g. i6 x6 w
  309.         UpdateFile2.clear();
    & T! t$ F+ F) v: t& E" k' |: d3 c
  310.         UpdateList2.clear();2 I5 j+ U7 A' h; N- A0 Q( w
  311.       }
    0 i( ~/ E; X# b) h2 j, ~! s) b
  312.       if(UpdateFile1.size())! ~  O. X# V5 N. |3 U
  313.       {
    / E/ X. V$ ?1 L1 e9 ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      d! J8 }, ~+ F9 I. N; b, E, y
  315.         {% |. M! z( b2 J7 F
  316.           file=(*p).second;
    $ L7 I2 M/ x' m- u
  317.           free(file);
    6 i8 Q, l7 l* o7 X  z( ~
  318.         }8 P  o1 \, ^& W1 @2 N& H3 n
  319.         UpdateFile1.clear();* Y& T( n% Q) r5 {! b% m' F+ Q& S, z
  320.         UpdateList1.clear();' ?$ |  N% J- l( a
  321.       }! H9 w/ M& a: P" N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' a& g% |8 ]% \  h6 o
  323.     }
    0 p& v4 |/ K5 }2 J& B2 F/ {
  324.   }
    / }4 t4 ]3 s/ D, Q. `
  325.   return FALSE;: ?1 K1 C5 |/ Z8 v
  326. }: s6 X: K' M4 J1 A
  327. # y: U7 h. e9 D  p5 o
  328. void CRevAppApp::ClearAll(void)6 l9 G3 b9 N/ J0 W
  329. {6 \% _, L1 ^# S8 t7 `
  330.   LPUPDATEFILE file;
    + G) e) |1 @! e" Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* _0 u1 P1 Z" V+ [4 k

  332. ' k$ o0 u* D! ?3 g; j" m
  333.   if(UpdateLocal.size())% v3 t# A+ i$ R% O% L: ]! V
  334.   {* h  w/ ?. Q1 i" e3 W* D- f
  335.     UpdateLocal.clear();
    7 L5 x! Q! U# v
  336.   }6 d' @$ y$ R6 z7 \7 ]
  337.   if(UpdateFile3.size())
    : `- _; j) ~6 u: a$ |7 H* m
  338.   {
    * Z% z) h) T4 X+ l& s% F* T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) D* E9 A* o; x* t5 C4 j, t
  340.     {
    8 U( A( u* w9 |9 J, V! S* y
  341.       file=(*p).second;$ {" w1 }# j! M
  342.       free(file);& \9 Q! c' L2 z- {6 x! N
  343.     }) p9 O/ l" n* P; e+ J; Y
  344.     UpdateFile3.clear();
    : t, D2 g. q0 D+ a* P; n4 Y
  345.     UpdateList3.clear();
    % o0 s3 ]9 _: }+ ?# V5 `) l
  346.   }
    : z2 Y9 O/ F/ a' T9 g, L
  347.   if(UpdateFile2.size())' c) ?6 ^! S5 Q" Q
  348.   {
    6 z/ o8 ~5 W- N% y0 [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 j" h- ^1 g1 b9 ^1 V& q0 }
  350.     {+ g9 d" E5 ^6 f2 ]" f8 C
  351.       file=(*p).second;
    ( k# y& n) @( _& o' A
  352.       free(file);
    2 A4 N9 w8 R# c* s0 {
  353.     }
    3 Z9 e) Y1 T0 d5 \
  354.     UpdateFile2.clear();
    7 F0 n5 \7 G, M- |  D* l5 `
  355.     UpdateList2.clear();
    ) X. s9 W1 T" G1 ?0 C& T- r5 e
  356.   }
      Z" V0 T5 E& M
  357.   if(UpdateFile1.size())5 U7 P! s4 d, B; _2 h
  358.   {2 _- M' T3 ?$ ^1 a; g# K; Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : Z# T* H4 d* Z5 ]
  360.     {! R  t/ M* B% _# R  \4 {2 j
  361.       file=(*p).second;- m% ]: Z! A4 x6 a  p
  362.       free(file);4 c6 M0 l$ V  F; @% }6 ^
  363.     }
    2 o: t' f( T# {1 g9 O, K6 y$ e3 v
  364.     UpdateFile1.clear();
    # H1 H2 g+ E, w9 ]3 U
  365.     UpdateList1.clear();
    : G5 I7 ~% z1 z
  366.   }
    4 [* n! S. e" P" L8 Q
  367. }  , u" K3 y$ T" B. t8 Y  r
  368.   ' A6 Z, }  t- T7 @: Q6 t$ Q
  369. BOOL CRevAppApp::CheckLocalVersion(void); V1 \- D# K" {( G( I' G2 b* Y
  370. {% I3 q& ^. G. [# w" ~& H( E
  371.   int c;
    % y* P+ q1 J2 Y2 n' z$ Q
  372.   LPUPDATEFILE file1,file2;! L& r7 ?  {+ D; E7 s
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 T& }- ]  G% L9 Y, @( w1 s
  374.   std::list<CString>::iterator l;
    , ^6 J7 P' }! N. ]/ f% M
  375. + d7 d' t1 u* _( g; F7 Q# {, G
  376.   UpdateLocal.clear();5 ?+ J- z" P# H" K8 F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 t5 S. p% \: P5 d1 F
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" _0 @6 L/ B0 k8 A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - J- W0 b  Q3 d: e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' _& U; @3 f, A4 k0 J
  381.   if(UpdateFile3.size())
    # D: b0 |7 V8 T0 Z& D* U! a  L
  382.   {" H: z4 j0 F3 W1 ]& {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # [' C+ u, g/ W: @' ?: O+ W
  384.     {
    " r1 b. p- n$ Q- e8 K6 b
  385.       file2=(LPUPDATEFILE)(*i).second;
    / h3 f+ p- r  m& k0 g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 r% Y, @' p" Y0 W
  387.       {3 k4 K9 I, A$ Z% r9 x5 c6 K
  388.         file1=(LPUPDATEFILE)(*p).second;+ @" k( N* G. j2 v8 k4 P* O
  389.         file1->vers=file2->vers;
    , u1 R4 U( T+ h( X8 B
  390.       }5 U' e' x8 ]% }2 F( t6 a# D9 H
  391.       else% {- M" M) e2 {- \2 B5 r- m
  392.       {7 K, b; ^7 x. i* I/ b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: b9 R) D% V, W5 K* X" ]# y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" a! ^, ~7 u* @$ N3 d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ m# @5 f7 ]; E8 o) w
  396.       }, W( v8 d9 l* d( l# m8 v
  397.     }, S# P6 L8 t8 v9 D1 K3 D
  398.   }
    5 M6 p7 O$ F. L+ {# A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), s) K4 L3 q  s4 H9 U
  400.   {( x7 p9 R1 ]# }" {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); Y4 k: V2 J% G. F
  402.     {; y; L7 L. j& n; k' P- [2 T7 q4 e
  403.       file2=(LPUPDATEFILE)(*i).second;
    - z$ y) J  J' |" c" W4 |8 Q1 n, k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( o4 j4 ^5 \5 H: i+ R) V5 o
  405.       {
    & M7 W4 R- V6 v' [; D7 `4 K
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 r0 Y9 @  f" }6 Q; \+ N. ]
  407.         if(file1->vers!=file2->vers)
    ' @, j; `6 }& V% {0 J  r' q2 q
  408.         {; z6 k$ O# ~7 ~, C% m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: `! R, {3 M2 o. d- U
  410.           c++;# f$ O! f7 e( S% Y& r0 E) N
  411.         }. w- C1 t1 M% N2 W) _
  412.       }
    # k5 I2 L7 N% W/ Z( ?4 t; j( W2 A
  413.       else
    8 s7 A2 n% x! Q# o0 d
  414.       {. A( W( D# ^4 y! j/ q3 z5 ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & f$ W( |, F, ~; [, X. n7 I
  416.         c++;) G- w: k+ ]/ G, F3 Q* P7 Z; K) \: j
  417.       }  S( l9 W; ]2 P3 c& f" Q  C
  418.     }% s( Q- d: L, k& d: d2 Z
  419.   }
    ' r- G* e3 u, l% B
  420.   unlink(".\\DownLoad\\update.txt");
    # C2 t$ L4 H  w, X& y6 F
  421.   if(UpdateLocal.size()) return TRUE;
    . o) p9 h# E' z* f' j
  422.   else                   return FALSE;' @( e! |" X# ?4 }: V; w6 q3 l7 R
  423. }
    5 |- l' e8 T, I( q# W- z7 q( L

  424. & j* I& V% _' y5 |/ F3 Z2 ^* {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 Q1 q9 J, _% E% I3 h2 o
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- f# H# _* g5 `! S

  427. ( y5 J3 S; \3 K& n: W- A7 n" X2 j

  428. 7 \: u6 p" n! O/ _

  429. 1 ~% _3 U1 p# t( w5 n' P; u' q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( \. g( j5 `; E( _9 V5 Q: D: M) Z
  431. {, X$ _" b& p9 t( w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 d% q  L9 ^7 M# ]$ y$ t( R6 Y' T: h3 d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' i9 p9 S" i- L' E
  434.   {
    & L7 t3 v* U( V! a
  435.     char szLanguage[50];
    # }1 j9 _+ w3 {* ^6 o* Y* P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 h4 y1 R# \/ I. G$ O, O' w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 F9 ]+ u# ]4 M( A8 h8 U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; |4 }/ `& m! t) m9 a8 Z
  439.     else                                   m_iLanguage=ENGLISH;
    1 u$ S% T+ Y2 L
  440.     char szRegister[100];! T: _' t2 {2 S1 L+ C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' X) g5 b. n) A! `: B  h
  442.     strRegsName=szRegister;9 d  N* e( V$ i$ Q6 c. v! E
  443.     char szPatchURL[100];
    3 U# P, Q; y6 R# h' n' C& D  H5 H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! t: R3 z5 ], ]# U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ ]: A$ H% r" x% Z' I2 C; m3 `
  446.   }
    7 M# t/ q% O# N6 w# g4 G
  447.   else# _5 ~0 g( i% L# E
  448.   {
    : o6 B0 _3 f9 m! O+ E- j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) I; R! P. T; m% N! [7 z! u! q
  450.     strRegsName=DEFAULT_REG_URL;1 b8 F. Y3 }: @  e; x- V
  451.   }! C3 g3 b% _! L1 k8 R: A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : P4 o* [# n, m& B
  453.   {
      A- {$ q% d5 |* w
  454.     char szIP[50];) P- g' ]3 o4 l$ ?
  455.     char szDIR[300];; P- w; ^( D" b$ B, Q+ B1 ]0 w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 x, [+ _  R2 l3 f  k1 H
  457.     {0 @; k. j+ w7 K, m1 Q& E9 ~
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 N  v1 X7 T- F& f0 k* v# Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , I- \- G0 O$ u: x
  460.       strHostName=szIP;7 l( ]! z. q$ u0 u' D
  461.       strHostPath.Format("/%s",szDIR);
    7 |! f( ~3 P/ Q( _+ R0 }* }0 ]! X: t: {
  462.     }; i+ v3 b5 v. L) C
  463.     else
    * h5 {( O9 T( G% C
  464.     {
    7 N# z+ a& ^+ ?; R& E- [) k* T6 S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , ]& q) R0 |* B/ Q! W
  466.       {+ N, V1 {3 n3 Q$ w# b
  467.         char szLanguage[50];& u' \& f# `" ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 y8 n% V, U( H! f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' [' ~, x7 R* V: b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 ^  _3 C; x( b8 e( q
  471.         else                                   m_iLanguage=ENGLISH;2 h6 H$ s% h2 S, `. J7 v
  472.         char szRegister[100];
    4 S1 t+ K% N" ^& P
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 h2 [5 y2 C7 E, j+ \! _
  474.         strRegsName=szRegister;$ _: p. }$ d$ z+ k
  475.         char szPatchURL[100];
    4 v, @0 ?6 {' x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- r3 S' y' `, c& G$ R0 n( ~
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 G; _+ M5 K" D- m  I: [
  478.       }7 u# M4 d) z7 m
  479.       else
    / l/ z, P* V2 T( }# w0 E
  480.       {
    # _. e% y- H( p7 E# @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 ~* k+ H, V5 A
  482.         strRegsName=DEFAULT_REG_URL;9 I" O# ?- h7 Q( S
  483.       }
    ' y. q6 s* i! \. D8 t+ f4 W  A
  484.     }, a# g8 ^" s1 @, {
  485.   }$ U) Q! b: Y5 u* \, f
  486.   return true;
    / m5 G( z0 W! {
  487. }" B" z2 F& a5 P( R

  488. $ [: ^$ T; M- B2 p3 Y$ P
  489. #include ".\ZLib\unzip.h"- ?& {! T5 h; j. m6 E" ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' n  h/ N4 a3 M( G
  491. /////////////////////////////////////////////////////////////////////////////
    / V3 j8 V6 F6 e0 p" }
  492. // CRevAppApp initialization1 W2 u0 S% j; f; H+ t

  493. 3 B$ q3 y, ~/ D; q3 n" X! h; j
  494. BOOL CRevAppApp::InitInstance()) F) |% g' N: M% H- {; ~; j2 n
  495. {
    ( ?4 h6 @2 _% c4 j- m; g: {: H% M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 k0 ^3 @3 s" @# p0 x1 w

  497.   D' U! R# q, d9 H* T$ m. d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 l. o/ ^4 x3 k1 S- D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ u, U; ~. J" \) d$ E2 @) c
  500.   {
    $ _0 [9 C% q8 O7 k  O; L8 l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' l: {7 t" x* `* u: q; _, K( k
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + V; ?1 I7 J1 g
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ E) M( u7 f3 F" ]2 t
  504.     {2 q; I: g8 v, O5 N2 e& B
  505.       strcpy(szPath,szPathTarget);
    8 A  U! M  Z' I8 `; A
  506.       SetCurrentDirectory(szPath);
    . B1 O! h6 K4 d' s0 y
  507.     }8 j  \# Q: _# W. B* ]4 E: ?5 @* u
  508.   }9 J& _! f% ~9 |, t. g
  509. #ifdef _DEBUG' r0 s4 ^! e. p4 i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): q% e3 `2 _3 D. t$ M3 Y
  511. #else
    % k' A% i2 q- i9 s- w. ~! V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 `3 N5 d7 }( s% Q' d
  513. #endif
      a! I9 Y; u& W! X8 ^
  514.   {
    4 U  [3 ^/ ^+ G! q5 g4 f
  515.     char tempFileName[MAX_PATH];0 f& L; Y0 {. q" Q# J/ r+ C
  516.     strcpy(tempFileName,szPathSource);
    4 H( }" W" A& s0 T6 J  I, ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 u% Y& w! N9 |; e5 q  m
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    / F6 b6 n7 |' e# M- d) z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) e' {0 D7 l  ]; X1 k1 x! f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( a  r( f% n2 B' Y
  521.     return TRUE;* \0 `6 U/ J# W0 H8 q+ n, d$ M3 \
  522.   }6 t# F: E& G4 l* Q
  523.   // Nuke 0118: Delete run.exe
    . @" u  J9 Z- v3 o# s0 w: p  J( B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 M6 _2 m6 `- w5 D; ~5 d
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + ?( |) U9 g. I; g
  526.   if(!ReadCfgFile("Config.ini"))- `( E9 Q1 g1 S! D
  527.   {5 w& P  J5 d& k/ v) }4 Z; H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # {( T, o! I; V8 ~, z
  529.     return TRUE;4 q5 q2 Q2 A! [5 l3 v
  530.   }
    ; z+ x! t  ~1 C9 T, M
  531.   HANDLE mutex;! B( i' n: |' n% \4 G% r0 A% W0 ^2 P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* m4 A6 |$ C  [9 b$ J
  533.   {* e5 \- y7 x% f9 t, F5 y; h# D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & {- ]9 \9 D# A4 g4 u! n5 i, M* C4 j
  535.     {- }' E( d. y$ m2 t2 G* Z
  536.       CloseHandle(mutex);; ?$ t7 ]0 ^5 ?2 n, v1 p/ I4 y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - _# y# P& k! c* r2 w3 x" X
  538.       return TRUE;- @2 m! f" w( f& s
  539.     }* K6 i+ Q6 E# V8 |
  540.   }  ( q8 ~* J2 I% z! x7 Z
  541.   CloseHandle(mutex);
      d6 K; Z: H* |, I8 b

  542. 6 r! j; G, C! T/ T- F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 y2 B$ d; i" p, a5 }6 }8 i" K

  544. ' l+ l, y% E" O1 V2 Q6 N
  545.         AfxEnableControlContainer();
    ! V) |0 W( |  S. B& g3 t

  546. 2 j* ]. T/ }) x+ [
  547.   bCanUpdate=FALSE;* h, H" G2 j7 e0 Z. W& `
  548.   dwStartUpSteps=1;# S9 N. [- @/ c4 d
  549.   dwProgramState=AP_NOTHING;
    , M8 Q& S- u. e& p+ T% g3 T  w2 I
  550. ( O4 N# A2 l3 h9 X/ w& _# p) M# b; b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / n- _. ~, y4 x% `
  552. , o4 `, x& l* s& w
  553.         // Standard initialization
    2 ]! ?) ^: l2 Q8 W+ [( C
  554.         // If you are not using these features and wish to reduce the size4 T9 z) `: @/ q9 r& O+ m
  555.         //  of your final executable, you should remove from the following; t- ?8 m: X% I) L
  556.         //  the specific initialization routines you do not need.% _0 X8 J% K/ r& T( c/ G7 }

  557. ! @# Y# d7 X% j
  558. #ifdef _AFXDLL
    ' f! p- {/ [- h- m# i' Y1 G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 d$ A+ A5 y7 G9 ~6 v
  560. #else
    ! l- h& B( B+ z9 I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically, E9 ^2 A0 w# z- J+ _: B
  562. #endif
    % z$ s- E4 A- v5 U' D/ s
  563. : E- U& x9 }+ W; o% J) x+ v% \( |% }' e" Z: l
  564.   dlg=new CRevAppDlg;9 k7 p$ ]* |& U  W# p+ ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 J+ d  \: ?2 a" Z7 E+ J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 B0 |  D0 a* O- Z, Q
  567.   m_pMainWnd=dlg;
    9 Q9 z/ h/ i* Q
  568. 9 R8 O6 a4 ]" X# W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , e# C# ~7 U$ w0 i* p6 C4 e4 i' \

  570. : |! o+ g. j7 O2 a9 Z: M2 D
  571. //  GdiplusStartupInput gdiplusStartupInput;  y* _- I& G. A6 J, Q
  572. //  ULONG_PTR gdiplusToken;, o* Q& E8 T/ g  Z& G& `: _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 N0 e4 s$ d& R# x. K- D- U

  574. 2 s  E7 b2 ^( P
  575. //        CRevAppDlg dlg;+ k. ^4 R: o& P8 }( C
  576. //        int nResponse = dlg.DoModal();
    ! G$ ?) v: J0 w1 h( \$ U: W( c
  577. //        if (nResponse == IDOK)0 ~% X* B9 {0 n8 c
  578. //        {. r' u: T0 m" B- q3 R
  579. //                // TODO: Place code here to handle when the dialog is
    0 I- _' P$ L8 U  t! A, T8 M
  580. //                //  dismissed with OK( z4 J4 V" k5 z- |& Z
  581. //        }2 H3 ]# R; D2 D& J$ [0 Q! \3 \+ F
  582. //        else if (nResponse == IDCANCEL)7 s3 p/ o# d* y  A8 C5 D1 V
  583. //        {
    8 i+ P- }* l- p  ], `
  584. //                // TODO: Place code here to handle when the dialog is
    " U3 M% H" @4 v' r
  585. //                //  dismissed with Cancel
    * E5 F, E, A" G! Y) I# v: O
  586. //        }
    + u; w! O9 f$ D! F7 w. @" W
  587. ) S& i  r. u- N9 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the. c$ g3 l- }8 {3 z
  589.         //  application, rather than start the application's message pump.
    5 c6 b2 ]8 M; r6 H3 V. X* _
  590.         return TRUE;2 R; i0 D7 m0 Y& L
  591. }( L9 t6 ]5 t8 T

  592. : f. w( G" u( m' Q7 m7 P( ~" g
  593. char *CRevAppApp::strtok3(char *pSource,char *token)$ P# c2 k) D; p. f0 Y$ P2 x/ ?+ j) f
  594. {
    . N4 e5 T1 H; v! t$ Z# W& M
  595.   int i;
    0 e  a: d$ C- r; r4 t9 x; E+ N! @
  596.   char *szRet;
    * V( l; V$ V( E2 V$ I8 M

  597. 7 Y) J/ w* m9 o+ v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ( W8 Z4 C) B" G; J
  599.   if(sztoken)7 j0 S; T/ Z8 M! _
  600.   {8 ]0 l  ^( ]: ^4 c; D0 W1 U! W
  601.     szRet=&sztoken[itoken];
    ! V. f# w, y) s9 f
  602.     while(sztoken[itoken])
    1 |% H3 Q" {% I" m; W1 d
  603.     {+ X+ K6 j% t# e
  604.       for(i=0;i<(int)strlen(token);i++)
    % e/ \+ }7 q! t$ U2 C$ Z7 J
  605.       {9 S! i. ^2 t" `2 F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 K9 Z; N8 S, X- b4 [( x
  607.         {1 I8 f* s/ L" `- D: `
  608.           sztoken[itoken++]=0;
      [' `# Q8 }! H% {! W7 P  M
  609.           sztoken[itoken++]=0;
    " G5 D1 D; o2 U; n9 F8 t9 F
  610.           return szRet;
    $ T$ }- l. c7 f5 S9 ]9 e, Q# Q
  611.         }
    1 B4 w4 L! J* s5 T
  612.       }
    " R) J. G, B9 |( i1 u# n# u6 Y/ o# d
  613.       itoken++;/ D! y6 _* O8 O0 l9 M$ n* o& E
  614.     }
    . C2 x- i/ {9 h# D
  615.   }; T) A9 @1 X" F
  616.   return NULL;
    0 E9 a) S& o! _. C
  617. }4 k- U2 v6 M9 Q. k
  618. 9 c2 r1 a% g1 r
  619. void ProcessProc(long Total,long Current)2 h) |* T0 b4 q2 P, a5 {) `7 Q
  620. {# R3 t9 \+ k5 @4 {$ S" ~
  621.         MSG msg;
    / O7 b0 s3 s! d: o
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) v3 N6 _5 ^# a$ F, M" o: {" g1 ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - T9 e) ~1 G( p. h) _" _- X7 y# s/ O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 C* A5 V- f* X* V7 [
  625.         {
    0 s. u3 H* p: D3 N9 y8 q% R6 m4 E
  626.                 if(!GetMessage(&msg,NULL,0,0))+ ?! ?# N5 o6 b% i0 s# I
  627.                 {* U  d  f1 @( W  J* r( P
  628.                         return;
    " S) ^( n3 a9 {# D
  629.                 }
    3 j0 b' z5 S( V
  630.                 TranslateMessage(&msg);
    5 X1 p8 N0 Z0 m' T
  631.                 DispatchMessage(&msg);( v5 j. h9 L; |" c# s' a
  632.         }        ' I& c: j8 e0 k; C
  633. }
    6 k: l7 A  y, V4 c2 W

  634. & A% U7 |- c6 C4 K+ B1 o7 Z
  635. BOOL bFirstChar=TRUE;& @+ j- c# p' S2 }4 D8 Y( ~
  636. 9 ~- X  i9 z+ V1 ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- ?* q$ E# V& u. i
  638. {
    # l& Z. n5 `/ C% S/ u
  639.         // TODO: Add your specialized code here and/or call the base class
    : C  A: B7 u* p
  640.   switch(dwProgramState)
    . z, A" k, [& ]* b
  641.   {
    $ j# U5 Y' m7 A
  642.   case AP_NOTHING:6 {, P% Z7 k& P& l  n' U5 S
  643.     switch(dwStartUpSteps); O# i% G& Z1 s1 M
  644.     {
    1 ^( [  o% C2 M- W; S7 t
  645.     case 1:& V1 W1 g2 [# q5 h& ?: T
  646.       {
    " v. K, w3 x6 m$ V" I1 R0 N6 z
  647.         int i;- B& D1 N1 A3 |
  648.         CDC *pCDC=dlg->GetDC();
    - A2 h- W1 R( U$ B
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( G3 P" d; x6 U  C5 O3 e" g3 a
  650. //        Graphics graphics(hdcwnd);
    ; Z/ Q6 E# D" q( D# v8 Z6 }. E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ P5 A3 l, r" r7 N: {# Z0 l( K
  652. //        INT iWidth=bitmap.GetWidth();
    3 N' R! c4 B3 R: {6 m* D9 o1 A
  653. //        INT iHeight=bitmap.GetHeight();/ P3 q6 V8 D  ]% j) H$ v% |
  654. //        Color color,colorTemp;. I2 m+ ^  y( m- t! G: h9 F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & S* D  H7 ^% k/ _) k
  656. //        {
    ) |8 t" n, C7 O$ N! j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) o7 a9 k! W; }" ]2 g! t
  658. //          {
    8 x5 K# c' o/ @  F) e- _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 a0 y) k2 k8 b9 m# X! b! {
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 z( l; \" g  F
  661. //              (BYTE)(255*iColumn/iWidth),
    . }( b+ u' T; H! l
  662. //              color.GetRed(),8 w% ^4 T$ ^5 H; j, R' K
  663. //              color.GetGreen(),
    # P- t1 ?$ r: O. C- C
  664. //              color.GetBlue()));
    * X2 M$ Z* ~2 z' o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( o, j3 n/ ~$ M& u' C/ u/ z
  666. //          }1 D6 u' ]6 P1 O/ D
  667. //        }  j; A, d$ e: l' K& H) A% |* K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 t, \& P( U- p- D, y, x5 E/ R: e
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' c& ~8 v6 @6 S5 r0 O# v  }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % l3 y, i; n/ V9 o+ K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , r) V1 K# R& f1 D. O1 C
  672.         for(i=0;i<240;i+=8)
    % |" M: s  l) [
  673.         {  I3 x% r$ ], q+ s. W! o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" Y0 L2 A- O4 O% ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 [8 q* x& e2 a# H/ h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 Q% f, s2 [9 v( U* h# u
  677.           Sleep(33);6 m4 C% P& q7 i5 ~" A0 L3 G0 b8 H: r
  678.         }
    4 ?, B$ m0 g) K/ Y( C" B
  679.         Sleep(1000);
    2 O( X, k- F( g6 P* h6 g
  680.         for(i=240;i>0;i-=8)
    8 y. }2 F1 B( _) v
  681.         {  c8 f$ c% x! Y2 `, Q, o3 g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 A. o9 L9 x: L0 c& P  k/ ^4 J7 B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ f+ g5 y8 s$ {" f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# S9 M6 F- d# o
  685.           Sleep(33);
    ! G- M- i0 D2 ^: `; g0 `
  686.         }6 ^1 i3 Y+ ?. O" W% Z, M/ {! m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ \+ ~! d# w* X
  688.         dlg->ReleaseDC(pCDC);
    ) y% M2 F8 t9 {+ t. u' N4 b
  689.         DeleteDC(hdctar);
    ) E2 F4 ?( y6 |0 O
  690.         DeleteDC(hdcsrc);
    6 _- T% y7 ]6 m- h
  691.         DeleteDC(hdcorg);( H+ p" |4 R4 y; t
  692.       }
    & ^: M, a' c, [# l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) W* @) J& l* ^7 ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 u3 |: T! O  U8 `+ a% w% ~! a
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ w6 ^$ }* O5 [1 g9 i; D& E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) N$ p) s' H& t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( U2 s/ v4 z! y' b$ y2 k
  698.       if(!Dn.Connected())
    3 G6 L' p+ [' A5 ~
  699.       {3 T; ^$ o/ P" B8 b0 ]
  700.         dwTotalFiles=1;
    ! R$ @2 C' n& j- [: A
  701.         dwDownLoaded=0;' Y, \0 m* H. I! e
  702.         bSilentStep=TRUE;; O0 Z  }. z; Q' B- a5 H3 b
  703.         bCompressed=FALSE;8 f$ ]7 B, }: o: x
  704.         strExtLocal.Empty();( n) f2 [. G+ N$ [4 o
  705.         strFullName="readme.txt";% a% k# J+ {5 {( D$ r" v5 ~7 A
  706.         dwProgramState=AP_CONNECT;1 g7 l( A6 j* _2 W
  707.       }" I- }- [( _) `  N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # m! U! P6 D) z
  709.       dwStartUpSteps=2;% S# I# l3 W/ `7 r( T
  710.       break;
    3 \' @! ?! ], X; q2 S( B8 q
  711.     case 2:( d( r5 W0 j4 e+ `$ r9 R$ B
  712.       {
    # R( E3 O  |6 q# g" P
  713.         int iEOF;
    8 S; j- |2 S' ^# a
  714.         FILE *fp;
    - F# j6 g. X$ F! r! s0 S; A3 s
  715.         char szString[512];! R: L+ j5 z2 ?  z8 @- F1 b' ^& u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% y& g8 {, @9 w+ @+ j" k. L
  717.         if(fp)
    3 b! E) F) [1 x3 Q- m
  718.         {% w6 w- @  m' a( f
  719.           do: d3 D" h1 B: N, Q. z2 K
  720.           {
    % y/ y. B4 j8 N: H" z
  721.             iEOF=fscanf(fp,"%s",szString);
    $ d* c4 S# s  {( O; d  v1 i6 @
  722.             if(strlen(szString))
    2 B; l, m3 M/ K* k6 J, V, C) l- X
  723.             {
    : u+ l# D  e7 C$ h: l# t% d6 O
  724.               if(bFirstChar)
    % a) s0 _4 A9 p: t4 J) E6 w3 N3 F
  725.               {- S% R$ O, Z; H! d" V
  726.                 bFirstChar=FALSE;( o0 o' N& Q8 x) C7 U2 N. T( y
  727.                 bConnectIsBig5=FALSE;: l9 P* s) T+ L5 c& D/ c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ t% g2 x4 j& W# F
  729.               }
    ; V% S  E+ `+ e4 i- Q7 A) F# _3 ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + r# Q, s4 W+ f, r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - {& O- ?1 N% g# @
  732.               dlg->m_ListText.AddString(szString);2 y' M0 l. w2 v( z4 F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) H6 ?( w- A2 X3 ^$ Z
  734.               *szString=0;8 f( K% a1 ?5 v
  735.             }0 l; ~; k/ V0 E& |: L! @/ N% G. [% W
  736.           } while(iEOF!=EOF);1 w) H9 e9 e# w% U; X: E! G  m* N
  737.           fclose(fp);
    9 {6 _$ o+ X( F+ ]+ r
  738.           unlink(".\\DownLoad\\readme.txt");4 N5 T1 G: k4 k! D1 J& n
  739.           dwStartUpSteps=3;
    , C& h/ N9 ^! N5 c) p" J
  740.         }
    1 H) M6 M, A  J3 ]# j  U- c+ S4 @" N
  741.       }
    ' O" ?+ m# \+ }* U* C0 ^) w
  742.       break;* p1 w5 `0 S5 k6 r- R8 A
  743.     case 3:
    ; p& t: ?  O0 z' K6 b7 D
  744.       if(!Dn.Connected())
      d. z( p4 h" f. q$ n
  745.       {
    $ u. d! S: d- B* n6 \9 S9 T
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 w: v- @3 k% ^0 G, B. s+ X
  747.         dwTotalFiles=1;. k0 ]: \( J: s
  748.         dwDownLoaded=0;% I" B" ?& @! |' \5 {
  749.         bSilentStep=TRUE;0 c$ m. d/ y/ C/ B* Q; {* R
  750.         bCompressed=FALSE;
    : ^- u( n) a8 B6 ^( w
  751.         strExtLocal.Empty();# H* V* s8 F* Q
  752.         strFullName="checkversion.txt";# D$ Q, ?3 }! r
  753.         dwProgramState=AP_CONNECT;) R1 C: R/ y6 \7 ]# d
  754.       }
    # A! [7 K+ r9 O
  755.       dwStartUpSteps=4;: O7 X- R5 X5 `2 p
  756.       break;
    % A$ J& t# X1 E
  757.     case 4:
    ) N; W( q" [5 L8 g- @  g8 j- E
  758.       {2 K7 b& d% i! Y& ?0 D
  759.         FILE *fp;: _" y( W6 }' ^  D3 l. {! i
  760.         char szString1[128];  u5 S( p& @1 Y% t% Z
  761.         char szString2[128];+ d3 B% G2 e; O8 b2 X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' i7 q! ~4 B1 X* X/ x0 J: H1 |
  763.         if(fp)) ~# L, l0 E7 f  e: C  Y
  764.         {( x. U. H8 S9 P. J% |: b8 t
  765.           fscanf(fp,"%s",szString1);
    , p2 p9 X$ u4 z* R* z
  766.           fclose(fp);
    . Y4 N% z$ Y) V( V1 l+ Q3 {
  767.           fCheckVersion=atof(szString1);8 r& ^* _) V% b. \6 ?
  768.           fp=fopen(".\\checkversion.dat","r");" U! Y4 V8 b' J( s- k
  769.           if(fp)5 t* H' A3 I9 M, K, K5 o
  770.           {
      {& j* H( R- S
  771.             fscanf(fp,"%s",szString2);
      J4 _9 q( w- H! A/ j0 |) S7 B
  772.             fclose(fp);
    : L4 {; F: Z8 l0 {1 x! |
  773.             if(atof(szString1)!=atof(szString2))
    6 }; S, I8 p  c& J; {: C  s
  774.             {
    ) W" f% z# z5 O8 }; H
  775.               if(!Dn.Connected())/ @4 T! Y9 M, w
  776.               {! ]7 G% A% |5 b% N, j
  777.                 bFirstUpdate=TRUE;# s" W: `" C& Z# M/ T
  778.                 dwTotalFiles=1;
    7 {, H! K5 l5 ?3 A3 B$ U  _
  779.                 dwDownLoaded=0;
    * K" r% P8 U) a( \; ]/ ~. ^; I
  780.                 bSilentStep=FALSE;- I" _5 j: m% g0 v
  781.                 bCompressed=TRUE;
    # k1 o/ C% g) u. p& G4 Q
  782.                 strExtLocal=".\\DownLoad\";
    0 |5 J7 p' |: X( ?  Z7 |
  783.                 strFullName="update.txt";5 D$ s' {, m7 \4 Y3 i: W; c
  784.                 dwProgramState=AP_CONNECT;: G* T8 P: ~/ \# o* ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # h3 a1 {8 ?* w/ H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; _# b7 Q$ B& A' q! I( }
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; L; A% C8 G3 c5 C, O

  788. 5 W6 u: f8 Z. Q! ?+ j& \) }
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 n& D- S9 |0 i9 F% \
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! i7 i6 a; h) j% u4 `" F& ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 v) f) O8 M5 l# ~- F' \" b
  792.                 {
    ( q# E6 a! j  q3 u; T! z, k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' ~. O9 c7 W$ T- f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& ]: s9 L+ F2 P" ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; X9 ]+ J1 [6 D3 h" k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, D1 Q( `' [9 c

  797. ; O" b6 r4 j$ B& e- @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 L) I5 R: X5 i2 t( A
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# S! L' L9 x6 Y% e. |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * Z- ?+ @7 s2 ]+ Q7 m4 q( M( E6 f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 w, Z6 g- g4 K8 T! ]1 d/ m5 N" N
  802.                 }% t- w0 s! _; B  S* |/ `
  803.                 dwStartUpSteps=5;2 u9 Z3 D1 y; N8 c
  804.               }4 ?, p# p2 E/ f8 G7 Z. z2 {' O0 D
  805.             }
    ; k/ I" G6 {' U# a3 t5 G
  806.             else
    8 K" i3 b  }: V" v3 U' Z& u
  807.             {
    2 u/ A* o. V3 I5 R# v& i; d
  808.               unlink(".\\DownLoad\\checkversion.txt");2 ^$ [* j( X9 v: ^) R7 ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : L& I4 P, V- A4 B: `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' e( i$ K3 \$ {+ k2 v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 J9 x! X# ^: I! U# I1 i

  812. . X( w  U7 r  E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ U6 T* r, F$ h1 p
  814.               dwStartUpSteps=99;
    ( V0 F% q9 Z, H+ q' R
  815.               bFinishUpdated=TRUE;. j* v2 d+ |0 {
  816.               bCanUpdate=TRUE;5 m+ H  r6 U/ j" P% J$ v2 d  P
  817.             }" [* w8 ?1 V2 |5 {7 J4 Z  P. L
  818.           }
    2 a( c, w7 K% U0 g/ T/ ~9 F' I
  819.           else
    7 n+ e9 S2 f" o, E+ K- L
  820.           {
    ( @, }" J! G4 W9 D: B# p
  821.             if(!Dn.Connected())$ u6 T) ^# o7 ]
  822.             {% p' a4 g# C6 b4 E$ S& Q& M
  823.               bFirstUpdate=TRUE;; ~( z0 W/ G7 w
  824.               dwTotalFiles=1;) v' ?7 o7 j- `3 o, b$ B' {
  825.               dwDownLoaded=0;
    ( z  T( H" G* @  B2 z7 G8 Q0 G1 U+ u6 Z
  826.               bSilentStep=FALSE;
    6 W" m% c, ?/ O: }. k; A4 K+ Y
  827.               bCompressed=TRUE;
    3 x# ]$ e7 z; H5 o3 D" n
  828.               strExtLocal=".\\DownLoad\";
    . u( _& O. ~% w7 i9 M
  829.               strFullName="update.txt";" D3 o) g  Y1 w% h( \, j
  830.               dwProgramState=AP_CONNECT;" b! Z" w, Z2 O/ E2 ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + i8 U) u/ @3 B  C/ O5 O7 w3 I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: S9 F$ O0 r4 T! C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ @- ^8 x, ^+ F- p: {. M+ c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* U3 R: Y, _/ u: S
  835.               unlink(".\\DownLoad\\checkversion.txt");0 |) j9 p" l+ {. X7 F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 G# P; s, |/ \; P4 e5 S9 O; J
  837.               {
    ) Q/ T# L" k+ F! W
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! R6 L0 t7 [% r: x$ l" S; [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; }: }8 i7 j8 a3 }5 D5 k5 y) P7 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / P  \8 @; c" _- O
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 I3 V% Z; Z* s  z
  842.                
    " P7 ~0 e! R8 j- \- P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) Y3 q) q- e# z- \  G+ w, y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * B6 i" U: |' Y! l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; y" o7 `1 p7 u! u( r" p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ~0 }! l  e5 k2 s" I
  847.               }7 V! `! w2 Y# _; }; A# G" s
  848.               dwStartUpSteps=5;! a: m; p+ x6 B
  849.             }
    ) i( W* [& S8 S, j4 W
  850.           }
    , c  z" i9 H/ H, b" I+ }
  851.         }
    3 A& r# z" n) D3 r
  852.         else3 i% ^; h; l* i- C1 j: g
  853.         {
    % y8 R2 Q- [6 U0 d- g9 w
  854.           dwStartUpSteps=3;! p# |" U  f, Q+ g# a1 N
  855.         }
    5 C1 T  b" N3 S2 r  f
  856.       }  Y0 e' J1 b( J! h2 g
  857.       break;
    # M' B: \5 x: `- `4 k
  858.     case 5:, ?% c2 M, ~7 U2 \
  859.       {
    ; a" j, r. S7 J; P. W4 g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , h. f! w, G0 U' R+ R
  861.         {# [* n% y% X& J# N& Z' a
  862.           int opt_overwrite=1;
    8 q* l# N0 \0 G& i- |+ h# B
  863.           int opt_do_extract_withoutpath=0;
    / q9 J' Q3 V. Z
  864.           unzFile uf=NULL;/ {" B9 s8 d- |6 y2 s
  865. 9 P* b3 J1 A6 G! j( e6 N
  866.           uf=unzOpen("Wsa.zip");
    4 ~* V3 V' H/ _5 ^
  867.           if(uf)
    3 c6 p9 d  D. z: `5 k7 X  ^2 F* _
  868.           {
    4 n# }, C4 ]  K- O& R, X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , P7 v$ h- Q% b. k
  870.             unzClose(uf);6 q( N; J3 m2 y: c! x3 v
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + s# \! Z' Q1 o  k, y& o
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- ]% I7 n# X* z2 l6 t0 s
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    , k# g7 k$ S3 Y& Y3 U7 T6 m4 Z+ _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( T) q8 R9 z5 }" B
  875.           }
    # O  h! k& I0 Z" t: Z$ r2 K* w' z+ {9 X
  876.           DeleteFile("Wsa.zip" );" U2 g. k% N. o7 v1 L+ z
  877.         }6 L: u; {' x( i5 \7 V4 H
  878. ! z# ?' Z0 u  U/ G+ Z
  879.         if(CheckLocalVersion())
      F% J6 l2 D& h
  880.         {/ S( e! `$ w/ U& f& `+ M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , Y6 ?3 l( C8 o/ N! S
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");) M  U5 W, ^5 a# O7 q3 a4 p8 P# Y3 |5 r
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ y9 j: y7 t! {3 v  P7 I% p
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * p8 i% ?8 Q6 |5 M- F6 S; J
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);9 Y9 [$ _# l  c. M, t: {( I
  886.           dwStartUpSteps=99;. \1 L' y9 j" s* G" T
  887.         }
    2 M& E. d! W- }% A
  888.         else
    2 F: m+ v# w# M: f# |, Q
  889.         {
    ) ], L* \$ a6 x3 R0 F$ V
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% g* B  h) K( n( W4 N
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 @* o# Q: n/ P& i4 q6 N5 L- r( ]
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");4 Z& Z4 X8 ~4 l8 M8 o+ N0 ^  l- _+ H

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

/ z, l& y* m7 I0 G
) c3 I$ z; F( a& n: t  B

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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