CSUpdate.exe源代码

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

$ @" w, }7 I. x" M% c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 U9 T: ^! l+ B3 d5 h/ R
  2. //
    # {9 w! G3 t7 E% B9 j% Z" l/ E

  3. 0 |! u% ]# ?7 E1 |) D
  4. #include "stdafx.h"0 f2 g0 J. \- [' ]- S" q
  5. 3 |- U) [* n( |
  6. //#define UNICODE
    % L) T7 X1 w7 L7 m4 \
  7. //#include <gdiplus.h>
    5 `) m1 Z* Y& t: k5 N- {
  8. //using namespace Gdiplus;2 c# p# f* n8 b$ f

  9. ' e* U( e7 F9 \  G: g5 e* R7 \) h. P
  10. #include "RevApp.h"( d9 Z1 u2 C" B- d/ P
  11. #include "RevAppDlg.h"" q) ^# m3 \$ z/ q5 z" Y
  12. 2 R& E9 b2 ]; X" |$ x# S6 D
  13. #pragma warning(disable:4786)" g, q0 y' L' g: S
  14. #include <map>
    4 w/ _' L( D: ^" z% B1 Q  {' p
  15. #include <list>
    ; W9 d5 M, w/ l4 w+ c2 I3 V
  16. #include <direct.h>
    * ~( z9 u. w* q3 _$ r* o
  17. ; h7 W* V" Z$ J
  18. #ifdef _DEBUG
    6 a2 A: p& J  V. B2 t+ e2 H% H
  19. #define new DEBUG_NEW. \- R8 y+ r5 r( d6 b. }4 _; H8 D
  20. #undef THIS_FILE
    + x5 i# M# W4 o# r9 [' I
  21. static char THIS_FILE[] = __FILE__;* D$ T& ^! Y) p+ z  D
  22. #endif
    " }! j! F7 ^1 s$ v6 k
  23. #include "SkinResDef.h"
    7 n& C* h/ ]% L9 j1 G& @. ]  v) o
  24. #include "ChangeBG.h"& b, f2 y" b. j8 r6 @
  25. #include "AFXINET.H"' m9 {: q$ V; J$ b1 l: d
  26. : S) M% Q' R8 }: F: H
  27. #define TRADITIONAL_CHINESE 07 Y- U1 c+ Z( F
  28. #define SIMPLIFY_CHINESE 15 p# n2 Q0 x' S" I4 z8 Y
  29. #define ENGLISH 2
    3 \+ E0 e) T1 c# |5 V* `
  30. int m_iLanguage = ENGLISH;
    ' N" h' f) V# H: {9 e* j9 s  Y
  31. /////////////////////////////////////////////////////////////////////////////) [" G% T' A& m% q/ Q
  32. // CRevAppApp
      T5 N: D' H6 I

  33. 4 o$ H& O& |, \, r8 ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' `# W) Q6 F$ [. T5 s
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : j7 _* T4 _( T9 F5 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 g4 W. q* u# Y* B% Z( {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    5 j* E& M! o; u/ o3 m
  38.         //}}AFX_MSG: h9 B; ~9 r6 D. T: u1 `: [8 j
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% K4 D# a1 U8 R- a9 G8 V
  40. END_MESSAGE_MAP()
    6 I5 t2 q$ B& ^, w

  41. ' R! L6 J4 {) u. y1 ]
  42. /////////////////////////////////////////////////////////////////////////////3 z& c" C5 u7 ^8 P- w' N2 n, X
  43. // CRevAppApp construction
    ) v8 a7 ^+ E# R2 w2 n

  44. 5 r$ M/ U: y) V* A5 c, Z
  45. CRevAppApp::CRevAppApp()* e* x& m2 |% X/ F
  46. {. A  p+ ?9 |: \2 u0 M+ k1 R
  47.         // TODO: add construction code here,( t+ K( [5 |" Y+ E9 B( r7 ?
  48.         // Place all significant initialization in InitInstance
    7 B" ^, e4 `# D  z, O
  49.   bDisplayIsBig5=FALSE;3 o0 e( I4 C' o" K: m( C* i0 {- F8 y
  50.   bRestartUpdater=FALSE;
    ; Y1 z' l2 \+ y8 c5 y) C
  51.   bFinishUpdated=FALSE;
    % A+ O: l" X' R% J+ b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 o8 B8 P3 u) j5 e  X' ?
  53.   InitChangeDataBig52GBKS();& m% W; P# [! z$ U+ Q( j! `+ }( ^
  54.   InitChangeDataGBKS2Big5();
    ( v! n! L1 D4 k8 k
  55.         //0 t- E7 A: f# i; n0 E
  56.         bClickRunExe = FALSE;
    2 z3 d8 s! i! r
  57.         //% p- s1 Z( B* J) ?7 r+ s) m$ \
  58. }
    / H; |7 ]1 ]8 v9 v/ n, c( g

  59. 1 F' f- S% e1 f* R, l6 ?
  60. CRevAppApp::~CRevAppApp()
    - h6 Q( u  X- d2 W
  61. {
    9 q0 Y% v: }; c
  62.         // TODO: add construction code here,
    ( h1 |+ e! X; \/ `; O
  63.         // Place all significant initialization in InitInstance
    - H3 {+ n+ N* q5 O) m7 U9 L* O
  64.   EndChangeData();$ q( A2 Q9 f; t/ ]8 W3 R
  65. }$ i5 j! S$ y' j4 O( g
  66. 2 ~9 r1 O3 Q. E, |7 k
  67. /////////////////////////////////////////////////////////////////////////////: f( l1 G9 m/ s8 ~5 p% B/ d! s7 N5 I
  68. // The one and only CRevAppApp object
    7 O' H; z! f. K9 c" p
  69. $ q4 Z) X0 ?* u- W
  70. CRevAppApp theApp;  z; Q, Z1 w* K# Q; L4 i/ N3 j

  71. 6 Q. _0 q- _& J7 M7 w5 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 c6 B" w4 ~* Q/ t  [
  73. {3 X! ?' O5 z2 T# e/ a+ p0 _
  74.   int iEOF=0;; v, p8 G7 t6 P8 n
  75.   char szTempName[MAX_PATH];  Y# R3 Y- g4 q- n, T: n
  76.   *szFileName=0;- L1 [  Q! w* D9 X
  77.   iEOF=fscanf(fp,"%s",szTempName);0 @" W% K3 k/ i, M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 L' {: B  b: d
  79.   {3 ]1 M- Z& T: B) ?' f% I# j
  80.     strcpy(szFileName,&szTempName[1]);
    ' b! ]9 ^0 ]4 o, F+ A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % @: g. |  w: _' F1 a
  82.     {
    ! [) \0 R; {9 K  [
  83.       iEOF=fscanf(fp,"%s",szTempName);8 [2 N% s: S* f2 I
  84.       strcat(szFileName," ");# q* v% k' q6 y3 X' x
  85.       strcat(szFileName,szTempName);
    4 n" S/ l* ^# ~5 t0 X
  86.     }/ X' i# F6 S/ i' p# {# r8 ~  D% A& h
  87.     if(strlen(szFileName)>=1). B& a$ C$ M, u: _3 [. S
  88.     {3 a: C/ S) \7 W) H  q% }
  89.       szFileName[strlen(szFileName)-1]=0;
    ; ~  e) J9 |0 l8 V; [
  90.     }. V. d( D! y* k0 J3 O6 Z# h( B
  91.   }, e0 k4 X) s0 Z: `; w4 I* p
  92.   return szFileName;9 x" T9 g+ C* a4 M! h
  93. }& W$ O9 N6 M  r7 Y' F1 H$ |

  94. 0 f7 X8 W8 `7 A* ^" F& w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# a* e& a/ l  W/ p1 t
  96. {3 m# D# C. d. s$ |/ ~
  97.   FILE *fp;- B; M$ k1 f" t8 I
  98.   char *key=NULL;
    9 o9 W( l) a, f
  99.   char version[MAX_PATH];
    " d/ y( k0 l% q9 f! K! \9 w
  100.   LPUPDATEFILE file,olds;" B/ [! i) R1 Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! k) G9 ]( y% r# M7 v

  102. & e0 H8 K+ t: e) F: d# Y
  103.   UpdateList.clear();
    2 F& f" @; P" i) ^! z( f6 H0 b
  104.   UpdateFile.clear();  V( e* X6 B6 C" m- S6 A/ c  U
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 a% ^* V1 |' Y$ ^" H
  106.   if(!(fp=fopen(filename,"r"))) return false;" o; _  \1 i1 e1 O! C$ {
  107.   fscanf(fp,"%s",version);
    $ L1 o9 A/ @5 I( n' F
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ t/ s2 l( }6 Y, z& H* X
  109.   while(fscanf(fp,"%s",version)!=EOF)9 M' j+ n4 [  V6 x) W" Q. \
  110.   {
    ' X. j$ w% O. l* V9 h! M
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 k% }, ?+ i: D; O5 w/ v( g
  112.     fscanf(fp,"%s",file->path);* H3 X& i2 b; w4 l$ T1 i
  113.     ReadFileNames(fp,file->file);* o! x) q" Q& c; |! o$ R
  114.     strcpy(file->full,".");
    . W% p: [8 u4 g
  115.     strcat(file->full,file->path);
    8 G' E3 D  O8 t' A
  116.     strcat(file->full,file->file);+ \: L! _0 X. g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 x6 u0 j, w2 j2 t. L: R
  118.     {; K8 S9 ?; N0 I6 S5 i9 I5 f5 M7 E
  119.       file->vers=(float)atof(version);6 q9 V" T6 ]. V
  120.       UpdateList.push_back(file->full);
    9 [5 \4 @# u1 k+ x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 r' t) L; W8 t1 ^
  122.     }. E/ ]$ @4 Z" _# E/ R: \- I
  123.     else4 W3 H! [3 m; {
  124.     {" g: k0 C6 l' y" x
  125.       olds=(*p).second;
    8 _" U3 A; _0 l+ ~- F! _) S7 z
  126.       if(olds->vers<(float)atof(version))' _; p, P& \! v8 r  D% ~1 g% S
  127.       {9 R3 D& f5 G4 b9 N
  128.         olds->vers=(float)atof(version);8 ?2 d0 X1 \* G3 Q+ t/ I
  129.       }
    , q0 D5 o9 ?1 b) S
  130.       free(file);- N: s% ~6 N* Z2 @3 W
  131.     }$ y% Q0 \  Y3 x8 s
  132.   }; ?% [9 ~; r5 N  e: i
  133.   fclose(fp);$ S% y7 J, I" M+ L7 f8 `; W, ~+ S
  134.   return true;4 R8 `, e, e% }# i; E) H/ |2 e7 }
  135. }
    6 D" l: {- r$ A1 H1 s+ Y

  136. # A  K' `3 q' m1 Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 `) p9 Q3 O4 k
  138. {
    8 M: r8 E$ c$ o/ Y* e0 w* [
  139.   TCHAR  szFull[MAX_PATH];0 U' w  H# u0 |) \
  140.   TCHAR *token,*inter;
    ; j  c+ w* R2 V; w/ q: W9 j
  141.   *szPath=0;
    % t" ?3 t( O8 a5 Z
  142.   strcpy(szFull,szFullPath);
    ( L. K, Y$ p& {: b2 `1 J( S  l; t
  143.   token=strtok(szFull,"\\/");6 S, Y) H! B8 Y  u
  144.   inter=token;
    6 [4 S2 |' L- Q, @9 @' [
  145.   while(token=strtok(NULL,"\\/"))
    4 J% s8 V' H- y' F) u4 T% u
  146.   {
    5 t8 n# z% M+ }8 q# R0 j
  147.     strcat(szPath,inter);
    . W( j" H; i. }2 @5 m
  148.     strcat(szPath,"\");7 w1 k# T1 `* M  ~; j, y, V3 h
  149.     inter=token;6 }/ W, Q9 q/ ?
  150.   }8 ~- x- y* F  [2 b& E
  151.   return strlen(szPath);
    # o; l- v8 I+ }# t
  152. }
    4 Q/ b# t  t) ]" n7 I9 @9 c
  153. , v* e, Y1 y6 S+ _  Q5 l- h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), N$ W# ?  G4 w; |# n3 f- H' J1 I
  155. {
    1 E- `: X$ C1 l7 x
  156.   DWORD attrib=GetFileAttributes(Target);' _& L# P9 |0 _
  157.   if(attrib!=-1)
    1 ~! C: q# N+ c6 A3 G  a
  158.   {. f6 s! B- l- _0 B" {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))' N" h, G6 j( H) D. M- ?: w) I, a
  160.     {
    * O( L/ @/ z" A  X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ o- E, J7 l" ~+ }  d3 N
  162.       SetFileAttributes(Target,attrib);
    ( K- R* S, {1 j! C* y
  163.     }5 l1 Q( r5 O. `
  164.   }+ A  T8 B* B- t+ V; c  k- M! J; D! ^
  165.   CopyFile(Source,Target,Erase);
    1 K/ I6 Y, Q* E- |/ m+ p
  166. }* t3 v1 i5 v! R1 {, }3 }+ Z

  167. 6 j- W/ s0 Q" L8 R$ S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  i% j  x' v& x
  169. {2 A, }5 N4 o1 D; M0 `+ E
  170.      FILE *fp;  P' q$ t; b- x  S0 _
  171.      char  szBuffer[8192];
    3 f( v4 h/ I' D/ |) A
  172.   va_list  argptr;) @1 Z, r) b" ]7 w
  173. 5 z* Q- r, i. Z* u4 `+ g
  174.         va_start(argptr,message);9 T1 F8 `) ]( D6 [% m
  175.         vsprintf(szBuffer,message,argptr);4 \1 N" l1 _8 q. w' ~9 n
  176.         va_end(argptr);6 n& M% ?# U3 O1 s- |: n1 m9 ?9 X
  177.   fp=fopen(FileName,"a");8 P% D  y/ R  \' O$ {6 T/ s& i2 [/ F
  178.   if(fp)/ L( S, g9 t, W: w
  179.   {2 {1 G% J2 y9 {$ I0 o
  180.     fprintf(fp,szBuffer);  ^8 }+ \1 z  U& i! ^' k' F3 U
  181.     fclose(fp);
    ! A) w2 ~' z$ ~& }' x
  182.           _flushall();5 ?4 |' P( k4 G& S; ^5 y& X' ]9 a% }- O
  183.   }
    & L9 P. Z, q* z  d' S0 ~+ w
  184. }
    / g3 u! p/ y: m% k
  185. # a! U4 X* \" ~- O1 z0 d4 u( Y' x
  186. BOOL CRevAppApp::Fclearf(char *FileName)) `/ x# q( E  j) V" \% C6 @
  187. {9 D) ?6 o$ ?- P" R& C) H6 ?4 F
  188.      FILE *fp;5 y8 K$ r: C& A4 p! |' E3 Z2 o
  189.     DWORD  attrib;: M( K4 `! _! W# u
  190.   attrib=GetFileAttributes(FileName);# ?. T. k( Z7 T: i7 x
  191.   if(attrib!=-1); H/ l. R8 w( ?- L  }7 j- x
  192.   {; {0 G( n/ z  n
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, q4 H" k' n% x# B
  194.     if(!SetFileAttributes(FileName,attrib))
    6 b5 [2 \& d  b7 ]$ @% }3 D  y" R
  195.     {! d8 F6 {! w5 n" i* W
  196.       return FALSE;# r: R8 i0 [( _, I3 q# \# p
  197.     }
    4 H' P* l, ]# j
  198.   }
    $ {* K% ~) |& N& A" w2 N( W& ?
  199.   fp=fopen(FileName,"wb");
    ' E0 U9 i: h; A  S# d
  200.   if(fp)
    / e2 }9 L# v& I6 W/ A
  201.   {1 d, ?1 h  ~9 A: j
  202.     fclose(fp);9 [' i% ^6 Q6 ~. O. n' @9 e
  203.   }* i3 |0 T7 w$ {/ I7 l8 Z
  204.   return TRUE;, o9 N0 r: E1 y5 @, e: C
  205. }
    " [1 }( @2 p3 [$ u9 T+ n) v

  206. & t* C& H* g# W! f. m" R8 c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * ]$ w8 p" v' x2 q& `0 U- c
  208. {' g+ P" r# m* l3 Q6 @, z* Y
  209.   char filename[MAX_PATH];  D7 F1 w* J0 _2 Z
  210.   LPUPDATEFILE file,olds;/ B$ [5 b+ T) h3 B, I
  211.   std::map<int,CString>::iterator i;7 r' z# h  g3 T3 p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; L% |$ g; V! I- d$ W7 G6 h
  213.   std::list<CString>::iterator l;% G) c5 a3 s' G) @# w. s  T
  214. 7 X4 B7 @0 B7 T) @  R9 F
  215.   if(bFirstUpdate)! e$ M8 h7 W7 [. c  B" N9 G$ Q- y% {
  216.   {' {+ z# L) u7 q7 f5 {
  217.     dwCurrFile=0;
    9 R- w, G' J8 h& b" C
  218.     bFirstUpdate=FALSE;
    1 Q4 z5 B' s) q, e5 t3 @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 i3 D, X: [( \; l$ u, F6 W+ Y
  220.     {; y8 W" I+ v* w
  221.       dwTotalFiles=UpdateLocal.size();; v, D) ?5 l1 q: u5 A; u
  222.       dwDownLoaded=0;. Z8 j7 F, C! T' Y
  223.       bSilentStep=FALSE;
    5 J( A/ C0 \# _6 n1 |
  224.       bCompressed=TRUE;/ I% _1 N. ?* y8 D; u: m
  225.       strExtLocal.Empty();, a8 d6 ^3 J; q$ \0 R
  226.       strFullName=(*i).second;
    ) O* i: X, q  P/ J
  227.       dwProgramState=AP_CONNECT;3 [( P. l. u2 U2 j
  228.       return TRUE;5 r3 ]- x+ N4 x4 J' @; I
  229.     }# }7 J& Q5 l, V6 F. i
  230.   }
    * F$ W6 f0 F/ t. C# J
  231.   else if(bRestartUpdater==FALSE)
    $ q# ~9 x7 U( h$ a6 g/ ^
  232.   {$ t- c# X8 P0 T) G/ T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  t1 {) @$ d# k, d
  234.     {
    - v8 ?& C4 G3 H, B7 I1 ^
  235.       file=(*p).second;2 A" t* @1 F6 E; _2 T! U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- V: {" E6 h! D4 U/ F# x' y7 n: X
  237.       {
    ! Y8 h+ `  @9 P& T; b
  238.         olds=(*p).second;* _" Y8 u/ |# T  a2 @6 T3 k( y9 K
  239.         olds->vers=file->vers;& z. }8 i+ n$ X) D$ o
  240.       }" y1 g7 I' v* U- B) x5 X' S9 D; |
  241.       else
    5 F: i+ N% P- t7 K# r; ^, p( i
  242.       {$ {) s# S! i% H; @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! T/ _7 P: u4 l% f2 [9 v5 ]+ N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 z; T& E# H' V+ G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) H) }/ \9 j2 f
  246.       }+ P% l8 B  k# U' c% V
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 J1 `+ n$ T# \" ^  m9 w# L
  248.       sprintf(filename,"(%s)",file->file);! t7 A$ h& c' k; [  P. d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# Y( z+ \9 d% i* u9 k$ A* Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( h- v6 S; G& |% [" ]
  251.     }
    # D% G3 k# h% W4 }, V  Z5 z
  252.     dwCurrFile++;
    * T% m) @: C6 X1 V7 g; ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 I5 e- C* o# D! F
  254.     {
    * \- b: W! R8 A; P+ i
  255.       bSilentStep=FALSE;8 j( A$ V+ G, E0 L: l# j( ]
  256.       bCompressed=TRUE;
    3 N& c8 E( y) `! w( U
  257.       strExtLocal.Empty();
    , i% z& z, y, p$ q  M: W# _4 F
  258.       strFullName=(*i).second;9 |  F8 r' X  [4 J) z% K4 k. g; K
  259.       dwProgramState=AP_CONNECT;
    7 D; F% W( \( ~8 _5 \. o
  260.       return TRUE;; z* n+ b  ], Q" I# y
  261.     }) ]+ B& r, A9 f0 J; P' n9 G
  262.     if(!bRestartUpdater)
    2 Z$ h+ A: ?' t- j' F9 t/ X
  263.     {% L, a' l: {' i% k5 W' i0 D3 C
  264.       int iCurrSize,iFileSize;- m3 n( _4 ^1 O6 d% i2 O4 J6 Y
  265.       iCurrSize=0;% S2 X5 o- ?. c& L4 Y' V3 t. ^
  266.       iFileSize=UpdateList2.size();' X) n% O( v  _9 R0 `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ h& ?& q+ h7 N5 T8 {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* |& Z6 q- g% v& S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 g3 r# [1 N5 V. [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# R+ f/ K& ^( `, s+ |, g. U
  271.       Fclearf(".\\update.dat");, W, \! a. {  ~& Q$ d
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # C% \8 M" Q" g- x  w- Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& o7 i' {+ h" E! I/ q/ U9 q! z
  274.       {* q" j* {5 ?6 G2 d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) y% L9 U& }( W% j! R3 E4 p# F+ P5 f
  276.         {
    1 X2 M- T, k7 ?6 |7 M/ m* n
  277.           file=(*p).second;+ G6 K2 O+ p# G4 f) K; _
  278.           sprintf(filename,"(%s)",file->file);
    - s2 \' a* ^, a. P, |  j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & k8 p& j' E' h
  280.           iCurrSize++;$ Z0 I. i+ ^9 V7 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 O" \; z$ b; g9 y
  282.         }
    - o9 D- W! X) N4 z( H: u1 a
  283.       }4 [) }% G! |, L
  284.       unlink(".\\update.txt");' S* }. r8 V( ?
  285.       unlink(".\\update.tmp");
    7 c5 A3 |/ p9 t- x
  286.       Fclearf(".\\checkversion.dat");
    2 J5 X* U' Z% u: |& B+ K
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ i/ D5 {8 f9 s( B
  288.       if(UpdateLocal.size())
    # ]+ G6 R3 Q8 N  R4 Y; N$ |
  289.       {
    7 q! p* N+ m7 m
  290.         UpdateLocal.clear();4 ^, b: S' l2 L: N; o; x
  291.       }' S9 {9 `. p  [5 j/ F( [) v
  292.       if(UpdateFile3.size())
    ; h( G7 l$ X- ^' z3 b
  293.       {! i' J+ t; X# n5 t; l. S; u6 _( e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) Y! g7 G( h& ^4 H0 Z. l: O
  295.         {
    ) ?; K, B0 D' e3 F8 P
  296.           file=(*p).second;
    ( O4 B# Q$ y+ J4 o$ a, Y
  297.           free(file);
    9 ]& ]( K. ]% s4 u) q7 \: L, `
  298.         }
    2 Z3 P# f4 g) `6 H
  299.         UpdateFile3.clear();( ]1 V" a) j% l% Y  H- z% g
  300.         UpdateList3.clear();4 S% F) G2 h1 ~& n+ c$ T6 Q: C
  301.       }# B6 ^5 P+ i, u4 C( _# ]. ?
  302.       if(UpdateFile2.size())1 _% U5 N5 K; q' A
  303.       {
    ; Q3 l% Q2 ?$ w2 N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ K; S2 N, d6 A
  305.         {
      \, {& n# n2 m/ t
  306.           file=(*p).second;7 f5 v2 q% T& A- _
  307.           free(file);6 @1 L1 B- k  m9 M2 [4 L2 D
  308.         }
    ; S/ r- L" E8 s
  309.         UpdateFile2.clear();% x8 k7 u% q4 c
  310.         UpdateList2.clear();
    4 w) W4 D/ f0 J" ?  j
  311.       }
    ; B. u6 j' c' I6 |; ?6 k" e" J
  312.       if(UpdateFile1.size())1 X, y$ F6 R2 _6 v; \% `0 ~
  313.       {  [( z, y+ s5 M* n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! Q) S, Z, C1 R, a% Z8 r3 Y
  315.         {* r  j* {, m9 U* f! C( U+ u* R% P9 K
  316.           file=(*p).second;
    9 t6 m4 T4 U5 {' w2 A1 y1 w
  317.           free(file);! Z7 }4 u4 A! B5 {% v1 c
  318.         }' r/ Q/ A% S# g3 G! U/ v
  319.         UpdateFile1.clear();
    " j8 U! g* X- |$ y0 i
  320.         UpdateList1.clear();# w) n6 ~8 j% W4 |7 }8 \
  321.       }- A1 P6 C& r/ v# w" J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % O% Z9 e( Y/ ?: O6 [
  323.     }
    9 P+ k' V0 G  ?. f7 K. Q0 D
  324.   }
    ) `3 }2 F( k. e; k
  325.   return FALSE;
    0 R* K, q& {2 n
  326. }3 M3 K4 n2 V/ z
  327. $ y7 {" M3 J7 P! f
  328. void CRevAppApp::ClearAll(void)
    5 Z' L3 _! V. m. F% k) l3 |
  329. {& k# d" C( H5 U/ c  H" [
  330.   LPUPDATEFILE file;7 t, \) v) [  ^1 l6 K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% Z$ W# n7 ~2 [5 @) a
  332. ) x2 P2 f, e, ~* U, k5 x
  333.   if(UpdateLocal.size())
    ) d' S7 U8 a+ R$ n
  334.   {
    ' a+ Y7 h9 l/ T8 ~6 t7 o; J( \; @2 @
  335.     UpdateLocal.clear();4 _! r+ t# N) Y- s2 d" O
  336.   }
    ( \3 j" B, U2 W9 J5 {/ V3 V
  337.   if(UpdateFile3.size())
    2 u! L/ A) f3 d
  338.   {6 v  X# Q$ M9 l3 {+ {9 |1 ~. d
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# h- i( s; y# B# K! l
  340.     {
    , d" g; N! H8 I% q, p% I& c/ z
  341.       file=(*p).second;
    5 N4 S/ u8 @: Q* Q
  342.       free(file);
    : U8 G: f- L* ], C( S
  343.     }
    0 t, i% |% o+ c, ]% N3 O' W$ C
  344.     UpdateFile3.clear();. ^: z# F9 G0 [6 A, ?5 ]
  345.     UpdateList3.clear();  R; e- v$ C% F1 A& K
  346.   }7 q& J, |8 D" P4 n7 Z& C
  347.   if(UpdateFile2.size())
    1 B- x9 Y# f& }3 o, K' o
  348.   {' e9 ~: ~& i" F. x" x- l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- A! ?1 A3 w& v. w3 Q; e
  350.     {
    , a& q& N  W7 U  @! M; L* ~
  351.       file=(*p).second;0 z# z& T- A+ ?  e8 o
  352.       free(file);1 O. H( ]& j4 J
  353.     }# p2 h; b- }" G$ }+ R/ D$ ]8 P
  354.     UpdateFile2.clear();
    / Q# v* Q9 V7 i# i; @  u
  355.     UpdateList2.clear();
    ) b; \0 p, o8 D4 H
  356.   }. Z7 p: z/ x3 o- S
  357.   if(UpdateFile1.size())
    6 q& i5 X8 U9 |7 P9 v
  358.   {- D3 M& u/ P0 Z4 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); u+ p" G' ^/ O! [/ y; Z
  360.     {
    - G6 r& p( e/ f  {% k
  361.       file=(*p).second;* C- [6 ~7 U& B& B; K* k3 c
  362.       free(file);$ Z$ I) w1 Y/ W# N
  363.     }
    " D( _! ]+ w0 P& {! i5 G6 G
  364.     UpdateFile1.clear();
    & E3 ]: Y" ~% z' F; h
  365.     UpdateList1.clear();
    ( F; {' H) M* V
  366.   }" s6 }& T1 j7 Y- G$ z" d
  367. }  
    % }( Q8 [% @5 Y% X2 s
  368.   
    . f: h8 I2 N  x
  369. BOOL CRevAppApp::CheckLocalVersion(void)  A6 x6 w0 u/ X2 L. }0 I0 x, G
  370. {! Z% S" T% ]# u) m: H, y
  371.   int c;
      H# Q+ ~" P$ `2 j  b* Q
  372.   LPUPDATEFILE file1,file2;4 ^$ n9 X- u( W( _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ x/ j- }( {# x) e( K
  374.   std::list<CString>::iterator l;3 T% @* k+ |) J  i, P

  375. 2 q+ _( D, K! ^
  376.   UpdateLocal.clear();
    # g0 e; D. g( h5 o6 L5 A& s
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. I( m0 T2 j4 n( A3 v5 _
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# S+ @; I; N- V( E7 f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! n) `2 P: A+ W- x3 T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' s8 N- K* Q# G7 u% ~( f
  381.   if(UpdateFile3.size())
    4 |6 k0 q, N9 r0 \
  382.   {, d) j; j' r; |  z9 t0 G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' M, p$ o" {( @8 _0 Y
  384.     {
    3 R) M( h- n' K) `6 ~% p- I* u, S9 s7 J
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( Q5 R: r9 w. P: _( {2 \2 C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# I, F2 ^# L! n! C; }9 G5 i
  387.       {0 D! m* z) A" X( v& L1 [0 N% @
  388.         file1=(LPUPDATEFILE)(*p).second;- ^$ l+ W2 O7 B' V( V  l/ G* _
  389.         file1->vers=file2->vers;# N2 n7 k& z" E* c2 S- U$ l
  390.       }
    ) R, B0 e. f# N$ M* e! c/ M( k4 @- i3 l
  391.       else
    0 I. m. g' N& p3 S
  392.       {
    6 v( {- u0 W8 m8 d6 }1 J* [) x" @" O- r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, B! b& ~5 M( Z! U
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  L8 s+ I& L# m, w3 a- ^7 Z8 Q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; o# k$ n: c/ S* Q
  396.       }
    ! e6 l9 F" ]3 t+ d$ V
  397.     }
    / K! V; d9 v4 H
  398.   }2 O* i5 B) [# }, K7 D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % E3 a0 L; P. ~( j& m9 A& x9 x. R
  400.   {
    7 E' ~9 W8 \1 c# q: H4 w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 i" J# C5 O, W
  402.     {2 H6 L/ U4 [2 d6 u# \7 e  T! H1 C: J7 w
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! d# p" h6 M  }& T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; O& a$ |% r) l& h1 C/ G
  405.       {% H- F" _5 B# S7 F$ Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 l  _0 _# i! h! @1 x9 c% I7 g% g
  407.         if(file1->vers!=file2->vers)
    $ ?  E2 s& U) v
  408.         {
    ( e1 ~4 t- l! c4 F3 I$ w# Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + E! n; ~  o' a% g
  410.           c++;
    , G4 ^* H9 w- Y: {  Q
  411.         }
    1 `6 f! q2 R8 u$ H2 j
  412.       }
    ! |: d  v/ l  a/ x
  413.       else( p" `4 X8 M  k0 w
  414.       {; U+ L  k( N) d
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + P0 u0 c1 n1 Z
  416.         c++;
    $ e5 o- K  x6 `! y. e8 S
  417.       }1 W! U- L" |- x
  418.     }8 y; o4 r1 d9 w6 ?. X
  419.   }
    ) a3 w4 k. ]4 \% E& G' U; H; L
  420.   unlink(".\\DownLoad\\update.txt");9 x0 |. L0 k& p3 ?5 A2 P" f
  421.   if(UpdateLocal.size()) return TRUE;
    1 w( L$ G8 }8 X6 V$ K9 c
  422.   else                   return FALSE;
    ( C; f& o/ `! r
  423. }' z* U* ~8 c4 @* Y! Q+ _5 K
  424. $ s  {  S+ t  H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    6 |; K$ L/ W  h4 d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 Z" w! H: M& K0 B

  427. 6 O* D/ a2 o6 Z* b* v9 G8 e4 a

  428. 9 d" V- H& E& {
  429. $ a7 t# F1 S, O* {6 v, ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! }- S* f4 t: i% x& _3 f
  431. {
    9 F: D1 n5 g% L! y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( c0 X  N' K; S% I# I+ w0 H
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( E! y/ U- U2 N  v8 a" `+ V
  434.   {
    / G1 a5 j4 k% `2 c/ G& z
  435.     char szLanguage[50];9 S. j/ Q# j) c; P0 G9 n0 E. O9 L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 O% r0 }. N" s9 R' P* z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 ]6 t+ a) V" c# s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 z& ], q$ v% l5 U3 @; Z1 J  Q# f4 v
  439.     else                                   m_iLanguage=ENGLISH;
    , m# I8 l. X; G" i7 `2 P7 A
  440.     char szRegister[100];- o3 v0 a  k( w" P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: ~: h4 p3 |' v. }6 I6 K. d
  442.     strRegsName=szRegister;. i6 u3 w8 O* e/ A; P$ k8 A6 Y# @6 l
  443.     char szPatchURL[100];- a" M# Z1 j: X2 y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & j; D! n$ S) E# x$ C" i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + K, Z; ^8 N( A1 W0 ~. X
  446.   }
    - B. f: `8 |, t# v7 [  i& ?
  447.   else
    ' ^) f6 g4 S7 c6 d9 J
  448.   {
    2 p; \8 t6 k9 @: M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, W1 ]8 f  k0 x+ v9 Q
  450.     strRegsName=DEFAULT_REG_URL;
    - K& z0 g8 X& s4 Q5 d0 ?. u" b6 V
  451.   }4 ^* Z, [6 }% m
  452.   if(GetFileAttributes("hosts.ini")!=-1)) Q+ S% o0 W9 c3 Z) R# B, e) Y
  453.   {1 C0 ^% B, L' ~  z1 m0 x( a$ M
  454.     char szIP[50];3 V1 ^- ]: j, H$ S1 b
  455.     char szDIR[300];
    ( p; v% Y% p) S. k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* y7 Z% G1 `) E$ J; B+ n8 N' m9 V
  457.     {
    : i) M7 }3 l) f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! v: d! W2 E# b5 ^" ]
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 {  I7 T  l5 P( y$ x! P8 ~; K3 r
  460.       strHostName=szIP;
    0 A2 L* y2 J5 x+ y
  461.       strHostPath.Format("/%s",szDIR);
    1 {' @# F8 ~9 k0 ~) x
  462.     }& `& _6 y1 b4 F+ j- {8 s' t* F' r
  463.     else) _* X% ]# E3 n9 d
  464.     {  ^, B9 F9 @0 p0 j2 c+ _# D' b: a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 U) u7 O# ^" i9 Y! A
  466.       {
    6 k6 U8 F$ u0 B6 B# m
  467.         char szLanguage[50];
    * p3 q& H4 N& a4 A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: ]0 N( \9 m( O; x. T4 Q: T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' U8 X- z* c# c/ b5 [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 K% P* [$ y+ `6 M8 [. u  C
  471.         else                                   m_iLanguage=ENGLISH;+ ^/ R1 K' D, |4 \" w" ]& \
  472.         char szRegister[100];
    + s* E8 w# p, t' _( u/ C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 @0 C1 W7 \- a0 ]9 i: m
  474.         strRegsName=szRegister;
    0 e0 h7 m* ~/ x: C8 c* R/ S& Q/ q
  475.         char szPatchURL[100];
    # C- s, o+ M7 ]+ U+ k, L0 `# [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 a0 V) J/ G8 e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& c' V7 Y/ J/ T& j  i
  478.       }
    & c3 f( X8 X5 J. E+ Q7 C& a! e
  479.       else7 `6 ~" G( ~  m, e2 V0 \
  480.       {! E0 L( |6 v) s* ?3 c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  K4 L1 H4 f+ ]
  482.         strRegsName=DEFAULT_REG_URL;! S( w1 b* J& j: M
  483.       }
    " \3 n7 ]2 C+ h4 S8 m1 c" l2 R
  484.     }! T) e. }0 H6 C6 v  O% o
  485.   }; ]2 o( B# n7 C; b/ X) P- W4 z
  486.   return true;% W; T6 x) F. c. o
  487. }1 ]2 ]! T" n# _- e# @
  488. 3 {. K: O( g; [- M' y& K
  489. #include ".\ZLib\unzip.h"  X4 R, L6 a+ r1 m& R5 w- L+ C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 T1 q- ^, f2 F* ?, m+ e- V
  491. /////////////////////////////////////////////////////////////////////////////- C2 P7 r* `& I% o( W  l
  492. // CRevAppApp initialization
    " [; _: N5 x' |& ~
  493. , U+ g3 C  G- S! I: ?
  494. BOOL CRevAppApp::InitInstance(): ~& n4 C. W5 G  ~1 u# }- a* L
  495. {: r& ^- ]2 u6 f+ Z" e5 J' a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 {8 `2 R( L/ T3 R( j4 ~' R1 e
  497. 7 }$ c- ^/ T- Q8 q2 {& ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : s3 U# E+ P- I: w5 _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % _8 ]! Q8 o3 d" W; b9 P
  500.   {
    $ ~6 z; `: F6 J! W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. M- D( i# K$ s* g# P5 @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);2 V, o- k" f/ h9 V
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " T& G3 r3 m0 l9 F- W
  504.     {% z% S. s( X8 q; x
  505.       strcpy(szPath,szPathTarget);
    & {3 o# [& P) {3 ]" k
  506.       SetCurrentDirectory(szPath);
    0 y# Y5 {. u, x1 X( V2 M
  507.     }3 \6 }2 n& i& \. e
  508.   }
    - O. P# O5 q/ d) S" X# ?
  509. #ifdef _DEBUG9 \3 {) a( k7 t( W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& w0 f2 |) `( [$ n/ x
  511. #else, A+ [' w- l/ ~9 ^$ r. a& e( I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 U* r0 t/ X" f9 ]" f4 _3 }
  513. #endif
    ) Z( ]. u# a% Y& H
  514.   {+ M7 J# t  h1 @" _
  515.     char tempFileName[MAX_PATH];
    / c# k% `6 p) h9 a: i/ N
  516.     strcpy(tempFileName,szPathSource);
    # F* F) N6 {& k: v. r5 F* C$ h; Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( p0 h9 R4 W- ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 O2 @5 a$ o! n+ o+ N% L( t7 x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 s! R" Q+ }- a9 b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # I! c* u- d0 \- A
  521.     return TRUE;4 B2 t+ q2 `! Y% t
  522.   }
    # r$ r9 c& C, Y' `& V
  523.   // Nuke 0118: Delete run.exe& _& K# b7 W# n# I  @: a) T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# j9 Z0 d& J3 q: y9 c# t2 W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ( u: n( E5 B9 b9 `/ K
  526.   if(!ReadCfgFile("Config.ini"))/ L1 n# S6 |( P  V( @% E
  527.   {
    1 I! V) s. m; v  `, `' a+ ?  M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 m* `: {7 z4 v2 X/ Q" v' z
  529.     return TRUE;
    ! v3 \6 ?" {9 p3 y
  530.   }) k! L* A5 k9 q5 ?1 k2 I9 V
  531.   HANDLE mutex;# T9 h9 u( h% i) V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 f& m  ~  h! h# q4 A" D
  533.   {
    + w- |8 H4 f2 u' g; u2 r
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " L* A0 z/ {8 v" a- ~
  535.     {( n6 c: ~, M  P9 m
  536.       CloseHandle(mutex);3 w  P% X1 h+ e0 U5 W( g; g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# g* E: i% |  g6 _- X- D; F% A  c
  538.       return TRUE;& {$ Y8 j! _+ Y1 H$ h6 o
  539.     }$ l4 f$ h% g( }
  540.   }  2 F% j' O! j; Z# f" y: \7 [
  541.   CloseHandle(mutex);
    3 A' g4 @1 Q9 M: [

  542. 0 o1 \8 i7 M# I3 z; }! Q+ M: L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - l! C( W# V# }& a6 R
  544.   u+ I9 Y6 I, b$ U  Y( c. N+ R( E; @$ a( d
  545.         AfxEnableControlContainer();; \$ H/ N" I0 U$ A6 I( s( t1 y9 f9 E
  546. ) \: U4 m9 U4 l- \$ ~
  547.   bCanUpdate=FALSE;
    ( C, r  }7 a( `6 V3 \+ F, H
  548.   dwStartUpSteps=1;  M; x  d! U# w7 H
  549.   dwProgramState=AP_NOTHING;; ~! P8 Y9 Q0 E9 v* i& C

  550.   ]& G  Q/ Y: U/ }$ U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 v9 O! z! L0 f! f

  552. 5 n& \8 V9 f/ V0 F8 @9 m( c+ c
  553.         // Standard initialization
      r+ T# p7 h6 P4 H7 K
  554.         // If you are not using these features and wish to reduce the size. T5 \) u# Q" c) X% j. b% ?
  555.         //  of your final executable, you should remove from the following
    , b5 m4 l) A. F/ n8 O
  556.         //  the specific initialization routines you do not need.) C9 s5 q7 I& P: \# a+ f9 F

  557. 9 X  ]9 W( F" ^* b& b  {
  558. #ifdef _AFXDLL
    . ?8 z, B  G0 N+ x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 s2 H9 Q7 D$ K( f# \" g) `( w2 h
  560. #else
    ) K7 u5 z& ~0 b) l5 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 H$ b. j% Z7 \
  562. #endif
    ; p3 F8 x, N4 d" Q/ @& x5 q( J" V( N

  563. . Q; |( C3 n6 p/ x; g& r
  564.   dlg=new CRevAppDlg;! v$ q8 C" l) K, {" B4 L
  565.   dlg->Create(IDD_REVAPP_DIALOG);! H! U, q# B* g% q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* T) b+ {' F! {1 v4 ~
  567.   m_pMainWnd=dlg;4 [# x( ]5 K& C  }/ L6 Z& e

  568. 7 c; S, Z1 E# {) C) i: [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 G' m" w+ O7 |  |7 I; o
  570. 9 c! l6 C4 D* y/ L3 a
  571. //  GdiplusStartupInput gdiplusStartupInput;3 i" e- r$ C% o" d* x. j* o
  572. //  ULONG_PTR gdiplusToken;
    - ~6 n: l; i" R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& i5 i- I7 E/ I5 g7 i6 a- i- e) O! x; I  U
  574. 3 H, V) Q4 ~/ h% r
  575. //        CRevAppDlg dlg;
    # C. d- {1 F7 @) Q* t
  576. //        int nResponse = dlg.DoModal();
    3 A  g* `. {) a
  577. //        if (nResponse == IDOK)+ X3 O0 r6 z3 e8 |6 T6 V
  578. //        {, ?) f% t! T, L0 q
  579. //                // TODO: Place code here to handle when the dialog is! V/ z* U1 V- }) u& T$ T+ S, P
  580. //                //  dismissed with OK
    / Z6 C+ V8 m+ `
  581. //        }
    . `- c, {: C3 p& E1 Q. `
  582. //        else if (nResponse == IDCANCEL)$ V- f* [. T! |
  583. //        {& _0 Y& Q& g/ c3 g) O
  584. //                // TODO: Place code here to handle when the dialog is; s; V5 f5 |5 L- K6 \7 L
  585. //                //  dismissed with Cancel
    ' B4 k$ q' L6 S' o
  586. //        }
    ) ~- @% X/ O( X- e& Q0 `

  587. 8 t6 k* l$ D$ \
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " G( `0 z6 \4 N9 W
  589.         //  application, rather than start the application's message pump.
    ' b+ A: z0 p& @$ q% Z0 ]
  590.         return TRUE;
      n  @6 s9 A+ \6 a* Y+ i
  591. }
    # c6 t4 ]; o" Q; z# ~+ a
  592. . @% M) A& d0 T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 w$ z. `- z( O$ u" V, M/ X
  594. {  W) ?& ^, c% K7 m
  595.   int i;9 |- N2 p$ t, ^! A9 q* f2 @
  596.   char *szRet;0 U, p. v/ B) e- r% C0 y$ V

  597. 4 @  \  e7 @4 F. I( B( o6 Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }) I6 p9 V% i6 k% i7 `# f& Q
  599.   if(sztoken)1 T# n6 O- k7 M1 A1 T/ t
  600.   {
    $ K8 G$ q3 @$ L* P9 \8 `& D
  601.     szRet=&sztoken[itoken];7 [% S2 b# V, A, ^
  602.     while(sztoken[itoken])
    1 @, [  N# w* x' Y' |/ _6 k
  603.     {
    9 x6 R' k$ g2 n
  604.       for(i=0;i<(int)strlen(token);i++)
      x) x$ A9 E# y. ^8 |7 f
  605.       {. u1 r1 h6 q" T7 P" g( x5 Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 W) u0 J; ]# T9 y- \. H" D7 {" o. ~: i
  607.         {( ~7 S) h$ E3 |1 X: l# G7 |8 ]" g
  608.           sztoken[itoken++]=0;
    1 O/ k9 ~* N5 Z' X
  609.           sztoken[itoken++]=0;. [- \; N& P/ g2 s5 Z, M* G/ U* S4 D
  610.           return szRet;' v1 g. C' d: v* t: y: U
  611.         }/ N: P+ P2 p3 J3 m+ v- y$ X7 L
  612.       }
    & A9 U8 b: o, z1 t
  613.       itoken++;
    ' X5 J, P$ L9 Q& X2 J7 ?% @
  614.     }
    # o( |; _4 [* ~2 A
  615.   }1 f9 f1 X0 ~0 K5 i; X
  616.   return NULL;( i# H% L. O$ q- Q5 {* ~, S' `! M9 E+ j
  617. }
    ) K$ G4 `* m/ t4 d' l
  618. 4 e( M' Q; V; ^+ }1 C9 d
  619. void ProcessProc(long Total,long Current)
    7 o" {8 {% B- G7 {
  620. {
    - A& n8 Z' \) E2 N( Y; n
  621.         MSG msg;
    1 B, q. N: C5 ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 X# L; ~3 X1 f3 ?% r; U  Z! N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ G) J( J2 B* p  d
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 N9 @2 o5 A1 |/ ^
  625.         {
    6 |7 K2 B, ^2 Z
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ q8 n3 V4 q0 R4 {# K8 ]- N
  627.                 {2 `4 W4 J/ E. n7 l
  628.                         return;
    - A$ K0 U  V  s) }" Q  V
  629.                 }+ r) Y* U3 k1 U$ ]
  630.                 TranslateMessage(&msg);, l$ N9 V; ]" C2 {: w
  631.                 DispatchMessage(&msg);
    * P- X7 p1 Y, S6 W1 ]- V0 d. o8 [
  632.         }        # V" `- {0 I& G) C3 {1 M5 h
  633. }
    0 S2 T" j4 O) d. Q% ]' Q$ b0 k
  634. 1 B( \& h/ K. s$ f) l
  635. BOOL bFirstChar=TRUE;/ H7 j* F' K3 F$ X2 f( `

  636. 0 C+ N: u: A& }" d% N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( @* B9 w: |* Q( c: g6 Y" U
  638. {
    8 t; s' w' S2 m. }* b
  639.         // TODO: Add your specialized code here and/or call the base class6 V' p% ?. y+ [' _3 x+ B
  640.   switch(dwProgramState)
    , t, B. E1 o# P* w: Q6 U
  641.   {
    % {1 {, g  W! W6 m, ^# R
  642.   case AP_NOTHING:
    / A" F( R/ f  o0 d7 v: ~! v* I
  643.     switch(dwStartUpSteps)
    9 I3 o: v& v: o/ I/ g
  644.     {
    1 x2 B' R. M6 ~( j* D. ]) j4 d: o
  645.     case 1:+ O- p# N1 d- c, n% s
  646.       {
    ' F8 l* V. V: ^7 S7 C! V
  647.         int i;
    2 `( K" |4 @1 B! |
  648.         CDC *pCDC=dlg->GetDC();
    ; s5 S: a) Y; P( y/ x
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 v2 s, o7 b5 D: l6 T. m2 S
  650. //        Graphics graphics(hdcwnd);
    6 ]3 s" m( b; m2 u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      b3 o8 T0 s  k/ f0 ?* _# b3 Y
  652. //        INT iWidth=bitmap.GetWidth();
    # H) c- F* `# w0 h: n
  653. //        INT iHeight=bitmap.GetHeight();2 D. e4 u6 s9 G7 t" g, }' ]2 r
  654. //        Color color,colorTemp;
    ) e- L; \) u0 j& {+ A9 \/ n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 G4 d8 u) |0 R; {; ]
  656. //        {
    3 x) S! l7 a7 c6 ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 U: H+ }  u) R9 B/ C# N, K1 L
  658. //          {+ n, V/ r" M* a) x% j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ M. g$ J+ f+ O- Q4 }
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 Z% d1 n1 h9 h1 R# J  {+ O
  661. //              (BYTE)(255*iColumn/iWidth),
    5 }, K  a3 h0 R5 S8 h+ ?5 o8 V
  662. //              color.GetRed(),) w% Z- B- T1 n7 U* Q# Z+ e  [# S
  663. //              color.GetGreen(),0 M& Z' c4 k2 Y# X
  664. //              color.GetBlue()));7 |3 {) L+ l- v; O) s4 S3 Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 p7 M9 y0 H; e% h
  666. //          }  N. q' N& q  N' |! v
  667. //        }
    - z  ]+ X. ]" f: j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: B' [* _- a6 D3 @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & e7 w$ @8 S9 o/ ], L5 n( C9 B# g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) L# q; Z: ^! V, `; j+ N4 E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 g" F, p1 L& }; M
  672.         for(i=0;i<240;i+=8), F% E  I1 `; Z6 K5 x
  673.         {
    ! H% N$ n6 R: w1 k2 N% l8 [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: u# r  P" A$ @+ ?# t. w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 ^2 M$ A+ c% Q2 t" B# Y+ w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / c0 @1 @: L/ u& V6 B+ {, F
  677.           Sleep(33);- k6 \! J! M1 L9 A( p; y+ z% t
  678.         }
    5 W" x/ D( d6 N# ?0 p
  679.         Sleep(1000);0 C1 t" ^2 q# @% e; q/ y
  680.         for(i=240;i>0;i-=8)
    9 D: n4 c* r6 a2 @, U$ g1 _
  681.         {* W# ]6 U: K& ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; U! m. F5 ?) O8 L5 `. T5 O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 q) f/ I* B  O1 }1 u. ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 Q, l1 [0 b) K$ p$ Z
  685.           Sleep(33);
    1 X" N5 V" r* U; a  ?$ L
  686.         }5 L8 }0 q$ d/ q( t& q0 l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 I$ v, @2 {. k' R
  688.         dlg->ReleaseDC(pCDC);
    1 i, ^1 _' T* u; b% h0 R
  689.         DeleteDC(hdctar);  ]+ Q5 {* O$ {3 P
  690.         DeleteDC(hdcsrc);
    1 R, V8 s1 y/ i4 v
  691.         DeleteDC(hdcorg);
    4 ~" G6 e- g- }+ G' j! X
  692.       }& e4 W. |4 o1 r0 b) O. m- A% h: @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , k: R0 \0 S0 U* p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 r' C5 V9 p% a, m3 \. E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");; Q( _1 m( t/ e" V- y8 p' z7 i  X  p& d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  i7 ^) X. E% Z( g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 O' C2 q! M3 c9 ~6 S0 Q+ Q
  698.       if(!Dn.Connected())
    ! N' T- a1 q) ]5 q& }! ?1 Q
  699.       {1 B) V) k: h) N1 d& O
  700.         dwTotalFiles=1;- d# ~2 w7 B" q5 j" U2 k
  701.         dwDownLoaded=0;
    7 M# ?3 t8 {* D( g
  702.         bSilentStep=TRUE;% Y7 j- f4 l6 K: s
  703.         bCompressed=FALSE;6 N  D+ [& H$ r# A2 X# l0 a; Q7 V( B
  704.         strExtLocal.Empty();
    ) I( I7 t; M- p. `- |* s
  705.         strFullName="readme.txt";/ S% E# i; a& T: ]  I5 c$ c7 e! o
  706.         dwProgramState=AP_CONNECT;
    4 }1 a2 e4 A; f  E7 J! t" Q
  707.       }4 A1 a' R0 X! E+ K8 _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . ?; N! h# H! F0 p& \7 Y
  709.       dwStartUpSteps=2;' B! k4 S! o9 c& F9 ?, ~
  710.       break;
    : }0 i( T6 X+ _" d' f, E
  711.     case 2:
    7 T' h0 P  I# X4 Y* F: f( S4 E( z; {
  712.       {, N. }! T$ @; E* W. t; l, A" h' X
  713.         int iEOF;7 Q* D  r/ A" F  ?5 P
  714.         FILE *fp;; u7 G# P1 U" l! X2 R) q
  715.         char szString[512];( y+ m  [' X# s' w) Q2 W  k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      p' r. t/ j( P# y& W3 [% X
  717.         if(fp)
    ' Z5 v& S7 J) t5 J. d* v6 v& Y- E
  718.         {
    . z. J/ ?+ m6 J
  719.           do' j; F0 {0 x( q0 N3 e
  720.           {
    " O  `8 C3 F+ ^+ ]
  721.             iEOF=fscanf(fp,"%s",szString);
    / o( x6 V' I: _$ m/ m, o8 a
  722.             if(strlen(szString))
    % i( l/ \- k( [0 t7 ?
  723.             {7 O( j. Q7 d1 L  @- _
  724.               if(bFirstChar)" D3 r( I3 [! `7 N+ z
  725.               {7 C4 q9 c( p6 M. P, W
  726.                 bFirstChar=FALSE;
    $ e- Y7 ?2 u" d5 _3 b
  727.                 bConnectIsBig5=FALSE;/ z. _3 l/ a5 C. k  I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;# s( D: p+ T" H" O6 z" k+ E
  729.               }
    7 h& T) P. F# X# D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    5 a+ ]2 A% M7 N, r  {
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# E3 S& w! R7 P" g4 z7 O0 ^; Q
  732.               dlg->m_ListText.AddString(szString);
    1 q& s) D0 v4 ]( Z" t4 A; T' C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" X: ]) u3 }/ g. J9 K/ e) O
  734.               *szString=0;
    7 l# g, @) P' z
  735.             }
    ; X" k0 b, j3 ]0 D
  736.           } while(iEOF!=EOF);
    , I% ]2 t1 W$ z+ g7 W( h* o2 l
  737.           fclose(fp);
    0 E- H5 \) K0 }- U2 G4 E
  738.           unlink(".\\DownLoad\\readme.txt");
    ! {3 g5 h  p, f8 c/ N/ E8 y* w
  739.           dwStartUpSteps=3;- B. P7 S7 K' c! v
  740.         }) m) q6 T  k$ ]& ~' D
  741.       }
    ( J- E) ?, T5 S$ E) `: M9 T* I
  742.       break;
    3 O0 o8 C- I- m! V0 v& Q3 C
  743.     case 3:
    1 j1 n! v2 R( q3 @$ \8 O
  744.       if(!Dn.Connected())9 v* G- Y- p) ~. h; r/ C7 t
  745.       {
    & P# K3 K9 ]0 p0 d# h2 {( A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , x- F' E$ Q# W: |# J
  747.         dwTotalFiles=1;
    , M2 L% y, x* e0 R
  748.         dwDownLoaded=0;
    3 t, r+ k" R( K3 Y( T8 r. p
  749.         bSilentStep=TRUE;5 w5 W( Q! X+ |: R
  750.         bCompressed=FALSE;
    9 |' V6 n" K( o4 v( q6 S. h
  751.         strExtLocal.Empty();
    + s: e4 K0 {' t$ O: |
  752.         strFullName="checkversion.txt";- C: k/ Z; O7 b# ~
  753.         dwProgramState=AP_CONNECT;
    . ^; h& s+ X* q- l  O6 h0 R2 y8 I
  754.       }3 ^! b. R5 `) h' ?
  755.       dwStartUpSteps=4;
    1 \0 Z* k, s3 B/ Z2 d% j
  756.       break;8 Q: K, K* `* E9 `5 V* _% t
  757.     case 4:9 r5 r0 C6 @# r
  758.       {/ C' q& t3 c. A5 F$ \7 e6 h( U
  759.         FILE *fp;
      B9 a" s1 o; f; |
  760.         char szString1[128];
    # c+ V2 I2 E$ @0 E! c
  761.         char szString2[128];1 L$ t% z: P8 z+ S+ K" [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & w$ ?+ r7 Y" e, r$ b
  763.         if(fp)
    ' r: x  ]: D% p& C
  764.         {
    - x0 v- i+ i' Q/ m/ n
  765.           fscanf(fp,"%s",szString1);
    , p8 @4 `; u! o  _
  766.           fclose(fp);
    ; p* o$ G) _! Q! ?: g( h
  767.           fCheckVersion=atof(szString1);
    ! [: x2 E* y* h4 Q
  768.           fp=fopen(".\\checkversion.dat","r");
    ) a9 p3 a! ]: _) o
  769.           if(fp)
    * W( I/ J9 C: i1 T1 P" N# X  l
  770.           {% D, P8 _  P3 W: u2 o: A
  771.             fscanf(fp,"%s",szString2);
    2 Q6 {( I2 V2 m1 L3 O
  772.             fclose(fp);" O- j. @# {6 A& V) w
  773.             if(atof(szString1)!=atof(szString2))
    3 B7 U; z$ s# \
  774.             {
    " B  M, c  f1 B7 a8 Z
  775.               if(!Dn.Connected())/ `" r$ Q0 C9 [
  776.               {
    $ m' P. h% `# @0 A# S
  777.                 bFirstUpdate=TRUE;
    - l- _( z9 w. `
  778.                 dwTotalFiles=1;/ r  R. u! L- {& Z( p! l
  779.                 dwDownLoaded=0;9 Z" n3 `1 n- \; M0 {* P. {
  780.                 bSilentStep=FALSE;) X4 U, g! [* l) G9 Y
  781.                 bCompressed=TRUE;
    - T  M: @) p0 T* Z' Y+ ]2 h
  782.                 strExtLocal=".\\DownLoad\";/ s; F9 L% j0 P+ B! B
  783.                 strFullName="update.txt";0 W: N# U" D4 |8 M
  784.                 dwProgramState=AP_CONNECT;# h/ |  O3 J/ l" d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 K  I# q/ s6 b9 `* V0 y9 W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" m+ }$ Q9 t' D6 A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- [2 z: f6 N: s: v
  788. 2 g- p- ^' q0 t3 G- Q+ M# t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      `  {4 a1 q& n6 o( l8 `$ H8 l6 m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % M0 M! M- H/ _$ P! ^7 A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 Y% j4 n+ p  _7 g9 C- B, y
  792.                 {
    / {8 h; `/ n9 E+ b2 V! J. o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 }3 ~& U* |# S, S+ S: K3 L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 Z) ~: l- J2 z; ]. C; a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " c+ T% B5 N6 C" ?. a1 O% `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 Y- [& X  v: ^+ ]* ~- p1 @
  797. 4 o# q- n2 \- P* y4 u/ d9 }, s6 t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- F1 ?  r( N$ K! L, s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 \7 Z- O6 f8 v- r/ N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% o( ^9 R" D' ]6 i# L: a; c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: u, n* M+ q' z# u/ `3 \3 U6 O; h1 p
  802.                 }
    $ G% e4 }, U$ @  S& `$ f9 Q
  803.                 dwStartUpSteps=5;
    / C' l8 X- |) m- Y' K3 B
  804.               }- L: }/ S- _$ P
  805.             }9 o, m$ o* |* b7 D5 M  {6 t6 }0 B1 R
  806.             else. p* n" J. H- ^; M+ `" {
  807.             {/ D8 _& G% e7 P
  808.               unlink(".\\DownLoad\\checkversion.txt");
      ^5 P' F7 O% \: O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! P# P7 W$ p9 T% l, C7 u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 v  X& B6 n5 ?1 Z' }' ^) c1 z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 Y$ V; F( Q' @0 S9 H7 r( b
  812. * Y" q9 h! [8 H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! c0 U; b7 w2 e8 ]
  814.               dwStartUpSteps=99;
    . g3 ]; A4 f2 [
  815.               bFinishUpdated=TRUE;7 n- s" c( e4 n! O
  816.               bCanUpdate=TRUE;
    ) d: L+ J' Y1 W# y4 |9 @% `+ u
  817.             }" V. L) j) l. }
  818.           }# B* |  x* Z6 d
  819.           else
    $ P6 y3 |' ?& P9 d( a. m* g
  820.           {
    0 o# o5 r6 ?7 K  e9 Y, B
  821.             if(!Dn.Connected())+ g* U: }' V6 z% o
  822.             {$ y- y# i" L, q1 H0 z6 |$ O
  823.               bFirstUpdate=TRUE;
    5 c9 J/ H% @6 i. `2 P0 `, \( r
  824.               dwTotalFiles=1;
    + Z) u8 H; M9 A+ i- T* V
  825.               dwDownLoaded=0;. @0 @7 a3 q# ]' d* d3 R& @
  826.               bSilentStep=FALSE;
    % d8 J4 U9 z& o4 @
  827.               bCompressed=TRUE;# l' _$ ]* `# u, r
  828.               strExtLocal=".\\DownLoad\";
    9 n; D+ Q& e! ?- q! n
  829.               strFullName="update.txt";- @0 t. R# k+ j9 e. V" K" }
  830.               dwProgramState=AP_CONNECT;) z7 a, D) V3 {$ A* @& A9 D5 a
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( [5 F( B) f; ]% b/ B, F! d8 e$ K) N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# k. n) y5 J& V, d7 ]6 C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 a9 j" N6 O* x( m7 w7 A
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C! c* S+ w! ^7 s; k, Y. P
  835.               unlink(".\\DownLoad\\checkversion.txt");* x* K" Z  l$ `$ A1 C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 c! Z7 o/ \4 y8 L
  837.               {5 ?  r7 x# V' N% j. }+ I" ]% B
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( a9 X3 a& @$ ~+ u, e7 C. T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- l# ?, s# m: v3 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ' U# V& u& c$ I( r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, ~* x% P1 `: O1 J) S* G* `- Q
  842.                
    : e9 A; }: v8 z# f$ Q6 D' k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. e8 w6 S7 i5 ?0 k% K, Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 ?0 B1 K# r9 {7 h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . H& G, v, I5 V" \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 U+ h# i' x3 C. j5 W8 K1 T* R
  847.               }
    ) ?  N" [: [; ]  P) f% M
  848.               dwStartUpSteps=5;$ U- t6 s% b% @, o. D4 ?+ M
  849.             }$ m9 o6 g& r4 Q' H( j1 d/ e0 R
  850.           }
    ( O, l) k$ S, t' ]) {. P7 J! r
  851.         }& ]; b' @5 n) K7 o) c
  852.         else! S. m. j! ]( I5 O0 l4 k( \4 I! Q
  853.         {& V7 h/ k, }$ g7 B3 L- }! ^) ?5 o
  854.           dwStartUpSteps=3;" ~9 W6 Y8 G9 Q. L+ l
  855.         }% C, ?: K; r" t) k! D! g/ o
  856.       }1 y9 \: \8 @2 u  m  S
  857.       break;
    * ~# `; k; t& \2 n
  858.     case 5:" O: b2 X! O6 m# [# J: i
  859.       {
      w3 U' v1 Z# @2 p; I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); u# w' H/ {! i/ v0 b4 y7 C7 {
  861.         {
      O# F# ^8 f/ B2 S; t
  862.           int opt_overwrite=1;
    ' t8 }# p+ [6 e* s7 T2 A" R! l
  863.           int opt_do_extract_withoutpath=0;
    ) y2 a  P* y$ l  ]/ v
  864.           unzFile uf=NULL;3 U8 ?- W; y  w/ D
  865. % A( f3 Y8 N' S! l. b, q. k# L6 B5 K
  866.           uf=unzOpen("Wsa.zip");
    0 _5 H' K/ H# d1 z
  867.           if(uf)9 p  N3 \! e) J  p2 |" M/ ^
  868.           {
    $ k. R/ n1 M" ^) @* ?% m
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# E9 i) z( B, A# Y
  870.             unzClose(uf);# Q0 y8 @1 }# [9 H; H$ X* i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 e2 U, N: c* a4 K/ n2 p! j
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " X4 Y% M8 ?4 m8 i! ?' N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: c; S" y5 Z7 {+ f
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 r3 K( A) `4 p- n: F/ m, ]
  875.           }% W2 G% L' @8 y* X
  876.           DeleteFile("Wsa.zip" );
    # Z; }) @8 ?: L( W# V8 H2 A
  877.         }
    1 g( e8 u% n- F1 w

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

評分

參與人數 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客服返回頂部