CSUpdate.exe源代码

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

6 J  z; E6 W+ E  M7 n) R* G9 [
  1. / RevApp.cpp : Defines the class behaviors for the application.8 E# X7 c, B' g3 v! {$ G6 o
  2. //# G5 h' [2 x  `8 H; h: @1 F
  3. / S! m8 C8 r5 t  ]9 n
  4. #include "stdafx.h"2 n( s) M7 L( X$ k( Y7 ~$ j/ z

  5. ' y# B6 R9 t2 }
  6. //#define UNICODE
    5 @: A1 @% x0 B: m0 G& o
  7. //#include <gdiplus.h>
    0 e5 D# T' W' [; b% M
  8. //using namespace Gdiplus;
    ! R! J) E) d( L, K) B& V9 x0 o

  9. 0 y4 p/ }6 Z7 j6 D) h" x
  10. #include "RevApp.h"7 j; o6 w, S" Z& e# x% y3 z/ v
  11. #include "RevAppDlg.h"
      G9 S9 `" w* E: N; {: ?
  12. 8 i( E% v" n7 E: C" _& `! b
  13. #pragma warning(disable:4786)
    , w! [; X# f& d! _/ r1 N4 p
  14. #include <map>2 N5 n) R; C/ s" Y6 _4 c* ]
  15. #include <list>
      z( j; y: l' R7 Z" v' J% [! h! q
  16. #include <direct.h>
    # v& {  E$ S8 q4 J0 D2 i+ ?( I

  17. 0 g8 d4 c" J/ K# c8 ?
  18. #ifdef _DEBUG4 m7 R. Y: f; [( a( `8 @2 ]
  19. #define new DEBUG_NEW
    2 |2 n: r6 }: J0 k: l6 Q& ?6 ]
  20. #undef THIS_FILE
      m1 c* g) O& Q  h8 _. U
  21. static char THIS_FILE[] = __FILE__;
    $ N2 x0 t1 S: b4 M
  22. #endif( s3 v$ x$ b8 s/ e+ C1 m/ _
  23. #include "SkinResDef.h"
    5 C/ U% q) R: r7 l
  24. #include "ChangeBG.h"
    & O% \$ E0 p- M$ E
  25. #include "AFXINET.H"
    5 w7 c& g* @* F/ J& _$ y. u

  26. ' A7 u' O4 J0 V: s$ i
  27. #define TRADITIONAL_CHINESE 0
    " W. ^4 p* R! }& U: W
  28. #define SIMPLIFY_CHINESE 1
    4 J) h1 w4 X$ F- s
  29. #define ENGLISH 2
    ) e2 q, c& O% r9 G: A
  30. int m_iLanguage = ENGLISH;
      p1 ~% m: G8 N6 h, B! G( b
  31. /////////////////////////////////////////////////////////////////////////////$ e' E/ ^$ z1 ]" E  V/ d
  32. // CRevAppApp
    # H& H* M# o# c% F# w$ t3 B

  33. & C3 A5 E, n% I2 l7 e# S" y. ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); j+ |. ~) f  Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ D8 B& W) m2 l8 T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 C8 h0 K3 G" s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( }# \" R9 u3 ~1 D. v
  38.         //}}AFX_MSG
    ' |, C# m! F1 K4 N+ o  `* V% @2 y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), `" S7 K  a1 z) t# N1 I4 y; P$ o
  40. END_MESSAGE_MAP()1 O: X/ o- \$ u8 X1 U5 ?
  41. % `% k$ w& w, J# R* c
  42. /////////////////////////////////////////////////////////////////////////////( A7 m6 X* i. K+ @; o" _
  43. // CRevAppApp construction
    0 B4 [( ]" w# U5 {
  44. : w& u" t1 T# y) i3 Y0 S# ]) [
  45. CRevAppApp::CRevAppApp(), c3 u4 Z% r9 Y" [
  46. {& l& K0 j* u3 f! s6 e
  47.         // TODO: add construction code here,  c9 f* A6 D0 c5 \9 r  s/ X( Z
  48.         // Place all significant initialization in InitInstance
    # S5 _4 ?7 t) ~2 E1 r! s! S0 N* o# b$ M
  49.   bDisplayIsBig5=FALSE;' Z; E( m% s  t5 n
  50.   bRestartUpdater=FALSE;
    " P9 a& n' r8 U
  51.   bFinishUpdated=FALSE;
    * w( V# ^0 O9 _  W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & r0 V2 m" ]3 i+ Y  y- M- T" }
  53.   InitChangeDataBig52GBKS();
    6 ~; y- I; _9 l8 i3 e& j& C
  54.   InitChangeDataGBKS2Big5();
    0 W+ j: E: F9 [) Y( j* l/ E) a
  55.         //# i; M3 s# B6 R& b; l9 J
  56.         bClickRunExe = FALSE;
    & s7 r* h- H% w: B
  57.         //. u4 ~  q- b3 R; V+ k
  58. }
    $ x$ u) x7 D, _3 o
  59. 5 a! m" v. N4 }  J  W# K
  60. CRevAppApp::~CRevAppApp()6 m' L' Z0 U! @( J/ M
  61. {" W; Z9 ^7 L% G3 [5 E
  62.         // TODO: add construction code here,7 z* X. Y1 B9 Z. L2 t* r, p
  63.         // Place all significant initialization in InitInstance
    7 T; z1 Q; C4 j6 @' c
  64.   EndChangeData();- S! M2 `- H7 \$ R3 C
  65. }
    6 r: M# Z* U+ v% P! M

  66. 4 c8 M( A+ a: B
  67. /////////////////////////////////////////////////////////////////////////////, S) G8 P3 A; I
  68. // The one and only CRevAppApp object
    ; V) }4 r/ U% j

  69. 8 r4 j8 }4 X4 Z$ v+ Y& p
  70. CRevAppApp theApp;: q! {- K5 `2 ]; a
  71. 1 h- N( V. b4 c/ d& Y1 t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 n7 }: @! P/ i5 A
  73. {
    # _( s) h3 z  s# i8 |
  74.   int iEOF=0;
    2 k. F2 E) w# U- ^. D3 G
  75.   char szTempName[MAX_PATH];
    3 `! I; G% W0 K5 X- P' n
  76.   *szFileName=0;
    0 U! i6 d$ U* X, l
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & r/ y  m) e( T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * h/ y, q( i$ l# F8 d. G* d1 H
  79.   {, o' l2 z( ^* c+ a; w! c; D
  80.     strcpy(szFileName,&szTempName[1]);
    ' h( F( a/ N% c1 O8 z* q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): k! J% r/ ^7 D9 q3 d! S; K
  82.     {' @0 K1 m. t; {- A
  83.       iEOF=fscanf(fp,"%s",szTempName);, b( O# p' ~7 n' v( D4 J( K; }
  84.       strcat(szFileName," ");
    ) x% R3 o# M8 p! @5 b& C( s% A' S' V
  85.       strcat(szFileName,szTempName);, Z2 L2 V6 P2 h3 d/ K# V# o
  86.     }+ v8 s; {; h. z8 O, j$ h" f4 U- y
  87.     if(strlen(szFileName)>=1)
    $ V5 H$ d$ O4 E6 t+ o
  88.     {
    6 Y7 @3 {1 t" n  G- _$ o9 v8 ~
  89.       szFileName[strlen(szFileName)-1]=0;
    2 K0 J9 e2 m' N! p, W! U( C
  90.     }& n& ]$ D/ T  a; Z
  91.   }) ~- ^) G& @& M( J6 N7 D" |: E
  92.   return szFileName;! }/ r/ o# j% x
  93. }
    $ S3 Z9 M% K7 e

  94. ( t3 N9 p( H2 C" E8 q5 H
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) \. q, X4 l' x
  96. {/ i+ i; x$ _" Y( Y0 A, T$ v
  97.   FILE *fp;
    1 G/ u: o; ^( v7 ?5 O
  98.   char *key=NULL;
    " f: t: o, ~6 K1 ~& _. x( d
  99.   char version[MAX_PATH];1 G$ L) O5 ]- J9 b, Q: M1 r
  100.   LPUPDATEFILE file,olds;2 F5 k0 w: {* M; D& n! i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" B2 X3 L  D* C5 I

  102. # ~& ?' S! l0 X; [
  103.   UpdateList.clear();! d; a2 l$ k* u# w" L' ^! ~/ J
  104.   UpdateFile.clear();
    ; T+ m1 ~) g- y: h, M8 G
  105.   if(GetFileAttributes(filename)==-1) return false;1 u# K( U- U6 L6 q! V/ L& |% ~- s
  106.   if(!(fp=fopen(filename,"r"))) return false;1 ^, y+ |5 M* M7 ^  [
  107.   fscanf(fp,"%s",version);3 v# b( Z( y6 z1 e# O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; g  s" |0 r" D" |. V: j
  109.   while(fscanf(fp,"%s",version)!=EOF)
      X% Q4 }8 R. b; x1 F
  110.   {# |7 V& A5 K4 L9 H/ ?. l' P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 y2 f# h) ?( g/ F  p5 l( l! p; c& X
  112.     fscanf(fp,"%s",file->path);
    3 S; v4 Q( E9 v* e) v
  113.     ReadFileNames(fp,file->file);) w; e/ I7 s; W, l3 e# ~
  114.     strcpy(file->full,".");
    3 w& ~8 R% k' z, |
  115.     strcat(file->full,file->path);
    & g5 G  L) M! K; X
  116.     strcat(file->full,file->file);) a! J4 Z, i, S6 X" m' Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' p- w. s/ a" a! U- |
  118.     {
    8 g; C" Y4 v2 r2 F: C, Z# y
  119.       file->vers=(float)atof(version);: J1 N4 v3 }- B
  120.       UpdateList.push_back(file->full);
    ( L2 |; e7 N9 a# r/ L  c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, H5 r: X' R, D$ O6 A4 O
  122.     }
    % D% ?2 t1 H) y2 y  o; {
  123.     else
    " X! L& X, X9 q' @) v( O" Z
  124.     {
    3 e! [" w' A1 ]# r* I
  125.       olds=(*p).second;
    + o  S, B  _2 L8 V' t3 Q
  126.       if(olds->vers<(float)atof(version))
    & b) B! `: H1 K  [: e: T- i( J
  127.       {' m0 T+ K. p8 n) ~: Z1 {
  128.         olds->vers=(float)atof(version);" [3 x! f$ |. Q; v0 u" c- s" I
  129.       }) i: {6 i+ @( ~% \1 H3 I
  130.       free(file);
    * m4 L  w. f( u$ o
  131.     }3 a1 f9 ^1 F  q3 I7 k2 j" X
  132.   }3 q! q8 w) W/ s( n" v$ |
  133.   fclose(fp);! A( k% B+ w( T) n& M1 ~
  134.   return true;" h6 i+ |6 K/ X; a5 T% D6 z/ [/ E, I, _
  135. }: {9 u! C! d1 J6 q' L: B8 f

  136.   d3 V" M  H) m1 i) H6 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 R! b5 ~. o* D( @" C( M1 U& ~' O3 Y
  138. {
    / B+ C0 B' Q3 n
  139.   TCHAR  szFull[MAX_PATH];
    ; Q1 ~$ r3 N0 l; |+ ?
  140.   TCHAR *token,*inter;
    0 l; z5 A9 S) ~. z  z; p
  141.   *szPath=0;
    3 F$ n$ B1 s3 o  d: U6 i# ^1 z9 W
  142.   strcpy(szFull,szFullPath);' t, J1 F9 o5 M& h
  143.   token=strtok(szFull,"\\/");9 `0 K8 R# P; O1 E9 R7 a
  144.   inter=token;
    / o0 R5 R1 Z2 R4 I$ \, S( b' o: E, N
  145.   while(token=strtok(NULL,"\\/"))+ O* ?- }- p; K$ V% J9 [- ~: t2 V9 d
  146.   {. b1 Y3 n4 k8 o1 H7 V
  147.     strcat(szPath,inter);
    + o8 }0 D* h. D
  148.     strcat(szPath,"\");: `+ n6 k" T. C  t
  149.     inter=token;% R2 |( \% N3 s
  150.   }. A! o0 \" d3 o2 [4 }
  151.   return strlen(szPath);
    # ~9 {6 ~4 Z+ N+ Q$ ^2 f
  152. }0 r( x% z, i5 M  W
  153. 5 k6 o! Y  P. I# L  ?$ h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 E2 `- C& G% K9 A( x/ b
  155. {, T, b# F& J! f; K
  156.   DWORD attrib=GetFileAttributes(Target);8 B9 m. z4 w8 c; m- `' f  l/ p
  157.   if(attrib!=-1)1 u9 A6 w5 R% ~( E4 U& T
  158.   {1 b& ]1 g! O. J' Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& }* H, Y1 m6 `" F+ X' F
  160.     {
    - d/ h; b4 l  W$ u$ E7 G' I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ Q( `/ V0 N7 z5 D" L) \% X
  162.       SetFileAttributes(Target,attrib);7 j: [" q6 F( z% L  P
  163.     }% v7 d: J- Y# f8 U; Z
  164.   }
    4 o  p" k0 D. x& v9 o' C
  165.   CopyFile(Source,Target,Erase);
    9 I. V, D$ D- L* D+ N2 Y
  166. }
    / R/ z$ i6 M# H# I

  167. 0 ^: \! I8 j4 B+ P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); C) ?) l: M2 X0 D
  169. {4 t9 u& @& J, K& i8 T
  170.      FILE *fp;5 r( r# a3 a& {7 y) ^
  171.      char  szBuffer[8192];
    / k' T- J4 Y1 W5 V' X  J& s7 ]
  172.   va_list  argptr;
    , x1 g" z2 a2 |9 [0 v% q
  173. & V& F+ X/ T8 Z0 t0 ~) {) w
  174.         va_start(argptr,message);
    3 I0 ]6 _9 u4 U: r; z: `" q; k5 u
  175.         vsprintf(szBuffer,message,argptr);7 b  A& \7 f; L2 v8 y
  176.         va_end(argptr);
    5 x, t& K% o* b3 p
  177.   fp=fopen(FileName,"a");
    1 p8 `3 N# e4 s9 Y# e) `
  178.   if(fp)3 v# s! y0 S$ u, @5 j- I" B
  179.   {
    ) I9 ]9 m: T8 m0 e% S; Z4 H% A
  180.     fprintf(fp,szBuffer);7 R, ]8 k- a9 P( s' J! X
  181.     fclose(fp);
    1 I$ V9 q" T% g3 |& `: b" \
  182.           _flushall();
    ' K2 d0 y0 A) I1 @- |1 f
  183.   }
    5 R- L% D9 w0 l' o6 o
  184. }
    & j. C( n4 N9 M6 p

  185. 4 }! f5 e: E; n" p# s
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    & M' a' }) F! @; W& W
  187. {
    3 {) o9 G7 {/ l0 u' ]& I2 P9 \
  188.      FILE *fp;$ c! _: Q: c/ L/ ^
  189.     DWORD  attrib;- L  d' N2 f6 r; D& Z
  190.   attrib=GetFileAttributes(FileName);
    5 W$ z, z# b' d+ L$ c; K7 n* R
  191.   if(attrib!=-1)
    $ r: N8 h9 I1 O
  192.   {
    % [# |; _/ s; W* Q, \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 x8 _" W! L$ r' }( b9 `
  194.     if(!SetFileAttributes(FileName,attrib))# q& M! v3 H( j8 ]1 l! s) z7 \
  195.     {; P9 W' h" _9 A; K4 W
  196.       return FALSE;
    , `) S; a9 ]& |% [- f* q
  197.     }! A' Y7 g, r5 _$ p, ^. t6 g1 p+ x
  198.   }
    + M9 y: Z8 }! L- ]* \9 O% E
  199.   fp=fopen(FileName,"wb");+ v& D" R( p& X" K6 _3 w
  200.   if(fp)
    3 _3 S) O6 H0 |) K1 h7 T
  201.   {
    2 O8 {/ [0 h' C7 k: ~  _
  202.     fclose(fp);
    2 @3 z6 D- j8 c# ?& h; S# B; d+ q
  203.   }4 H1 [& Z) N( r9 n8 f
  204.   return TRUE;
    ) r- i  j% ~1 A  y' q
  205. }8 R# a0 O0 B; O9 ]: X

  206. 7 y+ P) J' g6 P( K
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( ]1 I7 N6 s1 @# g. }/ A
  208. {3 S0 X3 B: E! q
  209.   char filename[MAX_PATH];
    " [  s$ j: I! s) o% h2 k
  210.   LPUPDATEFILE file,olds;* r# k6 y0 O* J8 F8 [) ?
  211.   std::map<int,CString>::iterator i;; o2 e' o$ G; W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 Q8 P/ x* {9 x9 ^/ Q5 s
  213.   std::list<CString>::iterator l;
    . H# }) O" C( {" N
  214. . `/ z9 W0 g( ?  }5 n4 a  }! R8 _
  215.   if(bFirstUpdate)
    % z$ B3 g5 T' t3 _4 e$ S
  216.   {" j. }" Z3 V8 C+ Y8 F  z( x5 d
  217.     dwCurrFile=0;
    ; I1 l% S* Z  w2 |% p
  218.     bFirstUpdate=FALSE;$ U  n1 P' L. f8 @0 d% p/ X
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 t' C) ~9 X& g* s
  220.     {4 D. o0 t; d' K
  221.       dwTotalFiles=UpdateLocal.size();3 F  |; ]- ~$ c5 i/ ]$ i
  222.       dwDownLoaded=0;
    . V/ q+ t2 M0 O0 b6 h- V! Y
  223.       bSilentStep=FALSE;
    ) w& ~8 n& |- b. Y" _" s" }5 w* \
  224.       bCompressed=TRUE;
    ' N8 y+ s8 u" S4 Z: K+ P
  225.       strExtLocal.Empty();
    ' z: ]2 P5 Y" R5 c% `' j
  226.       strFullName=(*i).second;
    9 `% @2 f" z: K/ d: Q: k' F' j
  227.       dwProgramState=AP_CONNECT;
    9 C! }3 E5 G8 D; s, M
  228.       return TRUE;% V/ n" x8 l$ u6 `- J& S9 K
  229.     }! @  a( V4 G7 T
  230.   }+ q) H& s/ U$ c$ [
  231.   else if(bRestartUpdater==FALSE)
    3 p1 n0 h7 Y* }  v( H
  232.   {, B9 C. x: J9 p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 u: k3 k+ o, [, [
  234.     {: t. f2 w2 z: `/ p& ?: z0 E
  235.       file=(*p).second;
    8 K, J9 f& o! I7 E3 y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* }# }! ^" P% _; S. i; x1 S
  237.       {
    % y$ Y1 v) o0 A
  238.         olds=(*p).second;; S8 c! y' ^) Y9 y- _
  239.         olds->vers=file->vers;6 T) v% R8 V+ h6 d
  240.       }% R, l0 ~8 q/ A+ f% ~7 `" {, L
  241.       else2 O9 h: ~+ L; I& Z9 ]
  242.       {
    5 e- B9 t  I7 t4 W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. ]0 Y" B+ r' c4 o/ r; k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' m4 J+ {' Z' O* l) @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 J0 e- Y$ M6 e: Z8 W; Q
  246.       }
    ! |7 c1 x4 n6 q4 _( w# N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 J" o+ _7 A5 p2 |1 M
  248.       sprintf(filename,"(%s)",file->file);
    % t) }: ?0 E# y1 k! J% F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 d. a# |5 H7 A! Y- v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& R" @& x* T+ W2 _$ S
  251.     }1 W1 ~, f  \4 ~5 s; r* b
  252.     dwCurrFile++;
    + Y" z7 x% D+ p* ^+ L5 E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ G3 _9 Z1 v0 H! [  d
  254.     {
    * C$ S' [3 P$ o+ r# x
  255.       bSilentStep=FALSE;
    ) w# a* T: s5 C9 m. c( S) n2 s9 B
  256.       bCompressed=TRUE;/ u0 N" f' R" b4 e9 P& g
  257.       strExtLocal.Empty();
    & ]! V* t8 V( ?
  258.       strFullName=(*i).second;
    ( p0 F6 @& _+ W  A
  259.       dwProgramState=AP_CONNECT;5 U& d# O, ~- l
  260.       return TRUE;
    / G5 |- x" C% E3 y5 }0 l
  261.     }3 j( w0 ~+ v9 g2 l: K, v
  262.     if(!bRestartUpdater)
    6 H7 H) i6 [4 r- O
  263.     {- }' k; i1 m# ]* N  n1 |1 a
  264.       int iCurrSize,iFileSize;' N; D1 H+ ^# \! ?& u( ^+ m
  265.       iCurrSize=0;
    ' w& M& J5 e3 u7 m6 H: e
  266.       iFileSize=UpdateList2.size();
    : E$ {' k7 ^/ i! ]/ a1 v: G" G( m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - Q- J6 M7 y  `" S* e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : }' M4 h$ a) }( p1 t0 e5 v) R
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 O0 t0 I3 @' [9 ~) k
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 T3 O% b* G& |5 z- U$ {  c0 R
  271.       Fclearf(".\\update.dat");
    $ l4 C- B5 l* l& V. a2 p
  272.       Fprintf(".\\update.dat","Bloodyf\n");, i( W' @$ e3 v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % j1 U3 x; _- G1 w/ K" O  Z
  274.       {
    # v4 Q; d; b' U+ @" v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! z2 M" U  n# b* U* n
  276.         {
    0 p% x  g9 N' Q2 [1 U
  277.           file=(*p).second;
    4 l7 d4 o3 C6 f' ]
  278.           sprintf(filename,"(%s)",file->file);& j5 F( |7 D  w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ y. |  W* L4 F7 ?8 F
  280.           iCurrSize++;
    ' r6 t" |4 U7 I% S% ]( A8 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( ^0 s2 p6 M  D- U- n7 a
  282.         }8 ~- \- p. `: ~" h- @; a( h& _
  283.       }
    / v, z! [$ F7 M) j3 A1 |
  284.       unlink(".\\update.txt");5 O* N: O. \, m6 l/ b; Z
  285.       unlink(".\\update.tmp");
    & |6 ~* J2 n' f
  286.       Fclearf(".\\checkversion.dat");
    , J& N/ o$ x) w3 q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ I1 O. q  w" s
  288.       if(UpdateLocal.size())7 V- I* s* K' D/ K5 w1 M# ?) t
  289.       {) r4 L; s" R2 e9 U
  290.         UpdateLocal.clear();. }, Z2 ^! `0 ~1 Q" ]. r) m
  291.       }
    : c' s9 U" P5 W4 a8 ]* Q
  292.       if(UpdateFile3.size())
    ; O; `6 e7 u9 k' Q7 ]+ R5 @2 Z
  293.       {
    + L* w; i1 v2 Q0 C& a* T8 D+ y" Z) M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , |1 G, _6 C! ~3 ]. H
  295.         {! }7 B: B9 L# g8 \
  296.           file=(*p).second;% A8 w+ G+ l8 c) B) I
  297.           free(file);
    * h; E) c) I8 K; q' j" E* h7 H
  298.         }
    0 }  [% a$ \2 g! ?" |
  299.         UpdateFile3.clear();
    1 T3 p% |( K/ @
  300.         UpdateList3.clear();" q& U. h4 y8 D
  301.       }  W" p4 W+ G9 |4 |$ x
  302.       if(UpdateFile2.size())& }+ `. V2 ]0 t6 j, P# n, O! t
  303.       {3 ]/ E) c  ^" f; _* w) U) g- m" D% a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 x$ G% z+ j7 z/ Q5 q5 E9 e9 k
  305.         {/ G3 p) A) c& p, Y
  306.           file=(*p).second;1 g! L$ z: j; o2 J- O+ D
  307.           free(file);
    / d4 W3 N/ @9 L! q) M9 a$ ]- j
  308.         }1 [5 _# K  j1 V6 f0 U
  309.         UpdateFile2.clear();
    ( _1 y: k+ [6 V- l) |
  310.         UpdateList2.clear();. L, h) i  g* d4 a  i6 G
  311.       }
    4 J; f; N. M3 m# W
  312.       if(UpdateFile1.size())7 v  Q$ d- X- M8 f- c6 A* m
  313.       {% l/ n0 e( p6 d: p0 p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- A* q8 n. X! I8 M- w; `
  315.         {1 }% W3 d( j/ m4 |* c& d
  316.           file=(*p).second;
    ' M& G* K! Q' @( |" @  f
  317.           free(file);
    4 ?  J' G% C0 P9 S  x
  318.         }
    & C3 L; q; Y4 n1 }; c6 \
  319.         UpdateFile1.clear();
    7 R' C! E6 T$ D8 o7 J
  320.         UpdateList1.clear();; U1 D7 Y! k& M9 f8 V
  321.       }
    2 G7 b, Q, |8 @) e$ h( q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' X5 L7 @( F+ B3 K# A6 n  v6 k
  323.     }
    . {% `; S4 R5 A$ A1 o* G" J6 W
  324.   }
    2 u1 ~8 I+ I: F7 K& ~4 t; s
  325.   return FALSE;
    ) d( U( `9 e# ^
  326. }3 B9 ]- ^! p  I, \7 \/ H

  327. 5 g" ^; ^$ ~3 w) _3 e
  328. void CRevAppApp::ClearAll(void)6 p5 k" _2 G5 v2 \$ x; O
  329. {
    5 z% ^8 s/ N4 g  A1 t% U7 N
  330.   LPUPDATEFILE file;& k/ `  o: v' p+ H( _1 V( j( Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 c5 d3 j" Y7 Q1 j1 y
  332. : X8 z( i6 E+ X1 K; [! H
  333.   if(UpdateLocal.size())
    & n1 }( w% t& ]) g: n5 j
  334.   {4 D- i3 g- t" Y* o
  335.     UpdateLocal.clear();* {  L. T  L' }4 A
  336.   }9 J* e, e2 z9 z
  337.   if(UpdateFile3.size())
    - m' _. m$ G/ b8 ^- T
  338.   {
    * p' S( u6 d8 I' d
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 e/ n1 W' }9 i) h% ^# @; H* E
  340.     {
    * ?1 m- g4 h: T5 J% O
  341.       file=(*p).second;
    ' U$ @9 l% }% @9 Z/ u- M# {
  342.       free(file);- B9 J' q- ]6 \6 L7 v3 U
  343.     }
    5 i# \' F$ A+ A8 w- q4 Y
  344.     UpdateFile3.clear();; o+ b$ C+ D" m) }
  345.     UpdateList3.clear();
    4 B  E0 R" d' L
  346.   }
    7 r; V: t+ r# N8 I2 X0 P8 l
  347.   if(UpdateFile2.size())4 D# D; u3 n+ G; B- j- I3 \
  348.   {
    5 L' T( Z" |9 n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 o, b+ C: B( o# a. j  j( B% N* N
  350.     {
    4 R, _/ ?( G% _0 ]3 c4 c+ g9 |
  351.       file=(*p).second;
    0 R  Z; S; G) i& L& @' k
  352.       free(file);2 o' J& A' t' h; i' E" D
  353.     }
    " _  f* e+ Q* Z  w7 }
  354.     UpdateFile2.clear();: m+ W4 a) @5 S* N, m. R
  355.     UpdateList2.clear();9 h8 d6 }! h0 L( p' R* W
  356.   }
    + K* ?+ ?2 T% }4 p' h
  357.   if(UpdateFile1.size()): W% U1 H6 `- _, |0 C' w) r/ A4 V" ~
  358.   {# n# D3 f% w( P! _" @- h3 j) J9 H+ B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % Y: w; }- X1 J1 \: k. U, l
  360.     {
    9 r' o3 R+ v% y) v+ V
  361.       file=(*p).second;
    ) N0 Z* T$ T0 ~: z" h, [6 C
  362.       free(file);; t3 g" B+ l. m6 j2 p& e
  363.     }
    / f: u1 Y6 q; Z7 o
  364.     UpdateFile1.clear();. ?- ~4 r4 c6 u4 @' y" c
  365.     UpdateList1.clear();3 T& n, E& {7 J1 c9 {
  366.   }3 A' t% y3 {% I3 _' {. F- |
  367. }  
    ( i2 t; v" C; x$ h  r9 H' K
  368.   & S5 c' @5 J( D
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # c, i& L- U- _
  370. {
    & y( {6 N$ B) I7 o8 F
  371.   int c;
    ' H$ `# _( e5 \- u- b3 g
  372.   LPUPDATEFILE file1,file2;
    ) H0 x; i. V% W9 C( w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 |3 @7 `" F( M# ?  h5 |
  374.   std::list<CString>::iterator l;
    - k3 K, L, F. o
  375. ! n  C! o; k5 w6 s0 k
  376.   UpdateLocal.clear();
    # ?: d; F" ], k+ i( v: t/ w1 B4 L
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 G- W0 n1 k5 R- C& V: N/ E1 f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # u" N) Q/ `+ n  B( z  K+ H- H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! y3 [- W. I. X4 K3 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " i1 I) D7 T+ b; _
  381.   if(UpdateFile3.size())
    6 |) i6 I9 K' M& B% N$ h. p, E
  382.   {; f2 S5 ?" ~5 s) S, y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 V, V4 V3 k8 Z+ g$ r
  384.     {
    0 r( g' s+ \, v$ T: S. i
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' f+ G7 i. f# `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 g$ y4 ^2 k! ^1 F& i3 [  C2 J
  387.       {
    0 p0 I; K: u5 f' G
  388.         file1=(LPUPDATEFILE)(*p).second;
    - f8 {5 U  ?: p' i  c# e& m$ Q8 J
  389.         file1->vers=file2->vers;
    : }8 @% p7 }% G% `* F/ n
  390.       }% t1 |- |  k! g" T6 n# |9 b9 m
  391.       else
    # [( K/ f& k) y. T! E
  392.       {" f! j. Y! s  }! `5 ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 ?1 ^+ y; x5 I3 p! @7 A" O9 j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, e( V3 m  W8 a# \% |7 {6 h
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : h* |( k, ^/ P4 @/ a  A3 [3 `/ f
  396.       }
    ) j1 v# T( U$ _- [
  397.     }  A6 h$ y1 g! q" T/ A
  398.   }
    * l" p6 ^2 g) F. W/ K7 ~3 v2 @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & P$ {2 ]4 P* B- }) N; _( @
  400.   {
    - V1 ?/ M1 T9 l  f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 e; ^- \* T5 n/ P' A
  402.     {
    : R6 O9 X' b' E" N' w$ n1 }6 V
  403.       file2=(LPUPDATEFILE)(*i).second;1 G" I) E7 [3 j% k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' K' i7 S; n1 m6 N
  405.       {
    ( Z% Z7 E! e; c+ b9 D
  406.         file1=(LPUPDATEFILE)(*p).second;+ O- A' D6 j0 Q$ T8 x# g
  407.         if(file1->vers!=file2->vers)
    ; ~) s- ~8 z; m8 [8 a  n
  408.         {4 J( p7 p( w$ g1 A9 b
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + T# _0 I+ K3 }7 G/ {
  410.           c++;
    6 D! i* K6 [: d+ r
  411.         }
    8 z9 ]1 W5 v  y5 c/ Q) q  p
  412.       }* H  a# Q% b' _  E
  413.       else# f  a5 ?5 M( P9 J) v. ~  o/ q6 _
  414.       {, G9 m( c: r3 Z+ @+ n' [! u" Y5 ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 x' L2 A/ B& f1 I- [3 ^5 T7 H
  416.         c++;& J' @; i- G5 t" v
  417.       }; Z0 s0 Q& ~  P* B, ?$ L
  418.     }4 h1 A1 R. E3 X) _  `5 Y0 T) d4 D
  419.   }% `4 f5 r% J! k# d1 L
  420.   unlink(".\\DownLoad\\update.txt");
    ( n' Q5 Z. I+ ?: R
  421.   if(UpdateLocal.size()) return TRUE;/ `* @+ W. k5 L+ v# `4 L+ S
  422.   else                   return FALSE;
    4 f: \, v0 f1 e  H
  423. }
    ; Z: g* ~& @" i+ B( P
  424. " y, I9 a+ |0 y. k: n5 V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) W: o! D+ G$ Q4 P( ]8 Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * M  t+ f) Y/ b2 ]! W3 p3 y

  427. ; z6 L" E1 Y+ v2 D$ A' h; C5 j, o
  428. 6 ~7 F! Z' B' K8 D3 {

  429. ; u4 @* \- k$ J: x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! v- p6 k2 V8 D* y3 C  k9 ?, T
  431. {! X6 O) I9 R$ z( X; r3 ^5 h
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 d0 R5 f7 y+ B, i) @6 ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( o: U( T1 J2 A' W* O
  434.   {* R( n; d1 @  [) z0 U
  435.     char szLanguage[50];
    / k% @  @4 f3 G! @2 P5 j9 n* P/ ?# A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* m6 P$ \6 V+ q$ F8 u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 u8 d  c. L: A- l+ Y; `/ Z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ }5 E3 P5 b3 O) }
  439.     else                                   m_iLanguage=ENGLISH;
    , I3 v: V8 |6 {: g2 |! g, l1 |5 Z
  440.     char szRegister[100];4 v. w% T9 p* X2 R) X* y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 a. E5 V( t% ?0 K) U6 v% V
  442.     strRegsName=szRegister;
    3 O- Y, e6 C+ M  z
  443.     char szPatchURL[100];
    + ~  a7 |$ ~, A! I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 q- Q' M: ?; Y8 E/ S0 [9 P% C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      j# P  v7 Z$ W* F& _7 T* Y% T+ p) Z! m
  446.   }) {; }9 F, c: c2 J
  447.   else  W8 Z6 a. p6 n8 J; _, `! Q* h
  448.   {) v. J6 r5 i; K; H6 l0 \0 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( m4 h4 B! Y5 _) A6 [
  450.     strRegsName=DEFAULT_REG_URL;
      w1 e0 Z" B8 p. z0 K: _% B6 R
  451.   }" M( B5 M: n" E% k6 R. Q( ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 ]# o8 M# K4 n% L
  453.   {
    / ~7 P  ?9 E$ g0 |$ m
  454.     char szIP[50];7 Y: {+ \8 C+ _$ m
  455.     char szDIR[300];8 ^# b9 Z5 n7 D, b* B: {. u1 {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & M! Y0 K5 l. @
  457.     {
    5 V# b' l' z4 F, S- q- \  F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  T: E- I+ ~1 [( l& Q: N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 {3 f  U: m  Z. P/ \
  460.       strHostName=szIP;
    3 d3 b; k7 @- f" U6 S
  461.       strHostPath.Format("/%s",szDIR);6 v$ {4 G" l5 f) S5 K8 N$ L# \
  462.     }  s  K% [( t: t
  463.     else7 ~; u- t: P! b, I  q
  464.     {8 f8 _) e0 ?) o; ]' p% U) K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 Y  V/ n, z8 @* \% d- C# x
  466.       {/ J) k- S) \# b3 N2 y; I  l
  467.         char szLanguage[50];8 _' d  L2 f# n7 r5 F0 D5 n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ _" z( h' r3 [2 A: j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  {: p$ ~: @# g2 X: I  {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  B5 {2 g+ _0 K; Z. [; R
  471.         else                                   m_iLanguage=ENGLISH;
    & T8 d, O: Z. E9 h6 i) F% u9 K" A
  472.         char szRegister[100];, C4 o; Q" ^7 |6 V# J. E+ n: d6 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& V3 B# u8 r; r, B
  474.         strRegsName=szRegister;. E1 m3 l7 _! n0 t) J& L; v1 o7 f" y
  475.         char szPatchURL[100];
    # h; g$ m* a2 i; T3 G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ B- J3 w8 b. u9 A
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: n5 ?5 |, U8 J0 i7 M
  478.       }2 C" z# Y+ A  c* b3 `
  479.       else- K! U4 n6 ]: t6 ^+ D
  480.       {
    " K$ D  B- o# w" `" @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! \( S2 K5 X% o4 J1 j* k% u
  482.         strRegsName=DEFAULT_REG_URL;
    * V1 A4 U' N2 }) Q
  483.       }. z( h' y. M' ^$ @
  484.     }
    3 u" [6 H$ W6 O2 v' |
  485.   }
    4 N8 a( s0 A8 v6 F2 ^4 T
  486.   return true;
    & d. u' Q  |& ]& N1 |0 _
  487. }7 ]; q$ c  t- ^% l
  488. 0 z9 K0 M0 s& n% z6 ~5 F
  489. #include ".\ZLib\unzip.h". m6 e6 ~7 ~4 ~* p1 T9 m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ b- r! y. l- \( ?; \7 s" D
  491. /////////////////////////////////////////////////////////////////////////////5 T% f/ ~; f9 V  j/ X1 `  ?
  492. // CRevAppApp initialization
    ' x" {$ I; J7 C% N& a. T
  493. ' e- z* Z8 v: D2 v. U* U
  494. BOOL CRevAppApp::InitInstance()$ Z1 c! r" @% g" y( t( {5 X
  495. {: E2 r  d4 M2 R# p8 |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ a' c! f% F6 b/ F
  497. 2 f8 _. [( x4 H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, K: z. s4 v4 j# O$ y3 b, l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ d5 g# S" T& i" e0 X. Y, X5 i$ Z
  500.   {8 s  t# ]) r1 x/ c2 l% C; C" I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 J, t, t( o& L3 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 d5 ?9 d' g4 [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 A/ v6 x/ S- A- D
  504.     {: E# \$ s5 x; i) r
  505.       strcpy(szPath,szPathTarget);
    * m$ y  m# q9 c2 y
  506.       SetCurrentDirectory(szPath);
    " ~8 r  G1 z" f" ]& A0 y
  507.     }
    $ ~) x9 d/ V4 t
  508.   }- F& L# U3 d6 {. n& i) z7 V6 w
  509. #ifdef _DEBUG
    8 P2 n7 S+ U+ y% i5 @
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - P6 G/ l0 Y# K- c, y
  511. #else, v4 [( `7 [8 F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  m9 O& o- g6 \. D$ d* h
  513. #endif9 T0 c* R9 [  U5 \! Q. [6 E" X6 K6 x
  514.   {
    ' u+ \6 Y- q9 O1 x5 w. G
  515.     char tempFileName[MAX_PATH];
    9 `# o; k0 x0 {
  516.     strcpy(tempFileName,szPathSource);
    2 q8 {/ s. ~5 H+ ^
  517.     tempFileName[strlen(szPathSource)-12]=0;6 ]  K7 l) I) W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & M. v- C/ [7 w5 |5 F9 I' s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * ]4 j$ V3 B+ M6 {8 u5 Z4 B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ Y( B/ X8 Y' J7 s% I) ^
  521.     return TRUE;
    % u! e4 }: F2 M" X, W( j  r
  522.   }
    0 D) i/ _2 f$ Q5 ^) V, P1 n# I
  523.   // Nuke 0118: Delete run.exe
    & N9 m! I2 j" q3 r6 Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );5 h6 D# X! I- c$ ~) U, h$ A3 b1 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . [" U8 C/ ]0 W0 G
  526.   if(!ReadCfgFile("Config.ini"))
    7 b1 {, u9 `# g
  527.   {  q7 j, v! C) J; }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + L# v! L9 r  y* V1 J% j& B3 H
  529.     return TRUE;
    ( H9 b0 G2 p' ^
  530.   }% ?: U( p4 I: o  Q% _
  531.   HANDLE mutex;% S0 J6 h- R, d# l( ]+ e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  }. r. _/ r. D# p. I% g
  533.   {5 t. u; m9 W3 w/ V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 Q' R, z2 I; g) x1 R
  535.     {% M8 Z8 {+ ]" A# o$ W; g
  536.       CloseHandle(mutex);5 g' h& S  a* q% C1 C; R: h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # }; ^" l4 @' M$ L- k/ d
  538.       return TRUE;2 b3 n6 E' N4 ^2 ]8 b* L
  539.     }
    8 U2 b4 e* [; ^# j* U  X" b
  540.   }  % a+ Q% y9 \/ ?/ m" J# ~
  541.   CloseHandle(mutex);
    3 e3 L% {- Q; S

  542. 8 F3 g+ G& |" b4 Z5 H. b4 X- n+ _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 B! G; z9 {0 @/ F0 r# t

  544. % m3 B+ z& t- e# o' x
  545.         AfxEnableControlContainer();
    * T& Q7 H- i( [' E% T/ r
  546. 0 w4 ]$ w( J) i
  547.   bCanUpdate=FALSE;) i. P  P5 d4 z
  548.   dwStartUpSteps=1;
    - |2 U* w5 W7 g. V) u4 O
  549.   dwProgramState=AP_NOTHING;" ~& L" K9 D9 W  I5 ]

  550. " h" @" e) R; x9 |5 {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 h/ J  b1 N2 r0 K. o3 N# x

  552. % y% H8 q- L# Z
  553.         // Standard initialization
    0 T8 J- ~* a4 i+ Y' C# ?- t- Y5 b  m
  554.         // If you are not using these features and wish to reduce the size
    - i* k" `( w0 x. U2 d
  555.         //  of your final executable, you should remove from the following
    % A, D. e$ `' @8 p9 z7 Q
  556.         //  the specific initialization routines you do not need.
    ( L& z: C) E. b8 S

  557. ! t8 U, b# j7 a( ?- o  Q. M
  558. #ifdef _AFXDLL: d, c. I8 {; l) F
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 E8 h  z8 w1 g
  560. #else, \8 S# K1 H* ], E$ g9 n' @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ e; I% P/ X& U4 M: @/ B' p
  562. #endif+ P& ?! @& M. R+ L

  563. 7 @* g; q4 w. q7 |' `- x
  564.   dlg=new CRevAppDlg;7 f; `' t! P3 W& o8 I
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 R, U' H4 j- j  ?+ F" I: `' s0 r' Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, e' m  K+ G2 S9 C4 ?( N6 }7 S
  567.   m_pMainWnd=dlg;
    ' W7 F4 O0 @8 h8 ]! s5 O, Z
  568.   v0 Z2 L2 N7 \6 g
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( L; f' G3 H+ U( Y% J+ R

  570. ' Q1 H; N* ?! }( s- l
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 _- ^' }  }) ?# B* V9 I
  572. //  ULONG_PTR gdiplusToken;; b7 g1 f' d1 ~8 M2 V; u# f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    3 w, Y" n  H+ H+ p$ j
  574. 0 u5 k, Z$ P7 n8 a( K$ ?
  575. //        CRevAppDlg dlg;
    ; J) W; Y9 J/ Z/ y9 v% i. D/ K0 {
  576. //        int nResponse = dlg.DoModal();& |/ [( x8 y8 g7 a! S& I; D3 G
  577. //        if (nResponse == IDOK)
    1 V) p: q7 E) p- v, z+ }
  578. //        {6 M9 k8 U4 ?, H7 v# q6 p, M7 l: N
  579. //                // TODO: Place code here to handle when the dialog is
    % \9 I+ _) Q# _7 I6 U4 w2 n  v
  580. //                //  dismissed with OK
      v4 K8 i, k3 K# b
  581. //        }
    8 L  [0 x3 r2 f1 c2 n* i' L4 N& G
  582. //        else if (nResponse == IDCANCEL)
    5 S) _. d9 A' }& i
  583. //        {
    # p) Q3 Q  N/ p  Z( o9 Q+ U
  584. //                // TODO: Place code here to handle when the dialog is9 {, O0 D3 M4 x$ Z
  585. //                //  dismissed with Cancel4 L' W6 ]0 q  V9 o( j6 L  X6 G6 v3 W
  586. //        }
    6 K8 ^3 S5 L) x2 z8 s5 `) E1 ~
  587. ) Q6 p, M) v5 Q' t% n' k" N0 V3 K
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 V! N) e0 I7 S
  589.         //  application, rather than start the application's message pump.
    # `. j6 T$ `2 T7 G; n" J( U; f
  590.         return TRUE;
    ' j% U# L- S. L9 P, Q
  591. }
    , o, U  V! ^' b

  592.   |8 ^3 s0 I0 n1 o  k1 M( a# s2 c) C
  593. char *CRevAppApp::strtok3(char *pSource,char *token); I* e3 M) S3 T: o# k
  594. {
    ( Y) G; z- D0 Y
  595.   int i;
    6 t# F: z2 ~5 Q$ f
  596.   char *szRet;
    0 C1 E0 h$ K$ d5 j3 M: w

  597. ; v3 Y7 O$ Z- R# }2 n4 C, D+ Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }" D3 W, ^" u# ^. \  L
  599.   if(sztoken). d9 d& C2 b0 x8 g+ @! f3 X0 _% p
  600.   {9 v  f' w/ E6 [# C$ B( g
  601.     szRet=&sztoken[itoken];
    - S) C% O+ O5 k6 x) \
  602.     while(sztoken[itoken])
    9 z% B' Y+ F1 `9 {& G, d5 ?
  603.     {2 |  z4 p/ V# R3 h5 M
  604.       for(i=0;i<(int)strlen(token);i++)
    6 ]' V+ _' o5 F& v$ i
  605.       {# G* }- e# Z; t) o3 W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / U1 f* ?, C+ T5 ?/ f
  607.         {7 Y, t8 J$ K" ^/ e/ P) ?
  608.           sztoken[itoken++]=0;1 b8 z; N2 J- O
  609.           sztoken[itoken++]=0;6 l8 M; n, W2 i* j7 c+ h" }! j
  610.           return szRet;- f1 @7 k6 j' k9 D" ]  V6 k
  611.         }
    # y, W# T8 `' |' n. K0 F
  612.       }* v: y" Z+ D; S9 M4 ^7 K
  613.       itoken++;: l4 u, u6 R, x
  614.     }
    : t+ w# W2 [% f2 |& ~
  615.   }; C: Q# d! A# I9 Q% F
  616.   return NULL;# y, @' X" w. d- l9 ?' G) \
  617. }3 e( J3 ^' x  F) U4 C

  618. 5 V8 B( j, \2 X* v6 w
  619. void ProcessProc(long Total,long Current)
    2 Z' n4 f3 `  P. Y' i# |
  620. {) A) A. B. X; ^6 m8 |$ ~0 u
  621.         MSG msg;
    8 ~+ q. f" M; s& }  _
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - S; [# r7 _8 h  s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ _5 M2 }7 N# ?' M, C
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): E1 T: E$ ^, ?3 D, n
  625.         {
    $ s9 S! J7 ~$ U+ A* J, n0 k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 g5 q/ i, A1 o- }2 K
  627.                 {+ e* W& d* Y6 }
  628.                         return;; Y: k4 t7 p# O: e
  629.                 }3 j# y% l# l% P/ p) P
  630.                 TranslateMessage(&msg);
    ' e! r6 ~, }( n! r# ^4 E& N4 J
  631.                 DispatchMessage(&msg);
    8 A6 H! ?0 _% y( Q1 z2 Q1 v
  632.         }        ( \- ]1 ~5 R4 W/ ?( E
  633. }
    - p* q! R4 V5 W2 o) c5 ]
  634. 8 s( X: `8 ^2 `* t+ k: y
  635. BOOL bFirstChar=TRUE;: ~5 u( L( C& C% {9 @- e  \8 ~8 L  t
  636.   M: O, b# K1 b, l! o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    : Q, T" l! |+ P: w
  638. {3 H/ ~5 [4 Z  d# x6 g) c
  639.         // TODO: Add your specialized code here and/or call the base class
    + O; J. C% q6 X8 k1 R% x: M
  640.   switch(dwProgramState)! z$ S# |- I$ v" R( F+ t
  641.   {
    9 n# W; _5 Q- }$ u
  642.   case AP_NOTHING:0 E+ R/ R: ]2 ?1 c& q
  643.     switch(dwStartUpSteps)# o) ]( z# d  N
  644.     {
    * l, i' s) L4 @3 q4 p  ]3 b$ q( j
  645.     case 1:$ O/ p6 ?' M% A3 T4 E% C% k: b+ n
  646.       {4 F. H4 R- B1 S0 {  j$ S
  647.         int i;
    * }' c, G9 i( U2 C0 W1 G% e
  648.         CDC *pCDC=dlg->GetDC();1 H8 F. B$ }& D2 W- B
  649.         HDC hdcwnd=pCDC->m_hDC;2 N. i' {  s/ v
  650. //        Graphics graphics(hdcwnd);0 ]9 F3 T. \% |7 z; B( S0 {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 \: B( Q8 B" _' R
  652. //        INT iWidth=bitmap.GetWidth();' D. p: I+ T+ k6 e" F
  653. //        INT iHeight=bitmap.GetHeight();
      S/ R" m7 q& b; |% [9 N9 o
  654. //        Color color,colorTemp;
    ( x' K: Y$ M5 ^' B) y) x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 V! ~. s" b! J
  656. //        {
    . \( f. o2 t, G8 F. [" v2 l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# h5 ^8 i9 `' v5 R# G
  658. //          {. g: e2 e: h9 i6 t& G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 S+ K  [$ c! U% n* I& I9 |9 E. \) I
  660. //            colorTemp.SetValue(color.MakeARGB(
    * X' O# C2 @+ k0 w/ p
  661. //              (BYTE)(255*iColumn/iWidth),$ l" C1 [5 [1 J4 Y2 r$ Q
  662. //              color.GetRed(),
    # {' c5 g) t9 Z' D6 q2 x
  663. //              color.GetGreen(),) c( l3 h' }0 z1 H
  664. //              color.GetBlue()));
    & W8 ~0 |& g! u0 d7 x+ {: f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 L4 V$ b: A. r' e
  666. //          }
    . k* Z6 z) E$ d$ p
  667. //        }
    * i: M+ Y9 u* \: V2 F$ W  J! W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 I0 x  Y( k3 |/ @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' x* t! h1 n0 P. R- V( c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 e7 Q0 x+ u, K. ^2 L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 T6 o% x2 i- s1 G
  672.         for(i=0;i<240;i+=8)
    ; q& M- X$ H5 B. f
  673.         {9 N& C( n3 z: U% T7 @3 }9 H: T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 h1 g. [8 w4 V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 p( Q- ]8 y1 W; ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 S( Z" o! [6 k7 Z) Z3 T8 |0 o8 k
  677.           Sleep(33);/ T- U2 L4 M% l' ?" F% V. H
  678.         }2 y6 ]% f# W4 q- U
  679.         Sleep(1000);
    . Q" A1 e7 w  `( \2 X
  680.         for(i=240;i>0;i-=8)% z6 x& p7 x& I: J0 P
  681.         {8 S7 D  o* z! c2 O) M8 i2 A0 C6 e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% E6 ^! p* @5 B; p) l9 O- [- s
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& d( v. @' ]9 W7 }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 f9 H* Q8 G" q8 Y
  685.           Sleep(33);0 z& I$ G. [; i7 r  p) a; [$ j
  686.         }  v6 G3 `/ {  S2 ]6 O5 l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. Q6 d) ]/ j! L: o
  688.         dlg->ReleaseDC(pCDC);6 ~! k0 G! _9 O
  689.         DeleteDC(hdctar);
    $ r! ^) L4 U3 F3 q, e: M
  690.         DeleteDC(hdcsrc);
    2 k" G6 X8 j3 x
  691.         DeleteDC(hdcorg);
    + H( [9 `7 e" }7 a/ z
  692.       }
    ( e( }$ z2 w3 d) g  L
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 e$ U# _7 U7 {/ e7 Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' m. X3 k4 q  `% g# g" o- P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 ?7 |$ i1 C8 {2 `2 T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" n! \, W+ ?3 N2 ^- c# K( f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 E4 f" m; `' r7 B
  698.       if(!Dn.Connected())3 t& ?9 q5 |: {: Y. r7 F( y: D
  699.       {, Y) V+ {: A" p1 K$ }; i$ Z
  700.         dwTotalFiles=1;0 K. h  q+ E2 ]4 G! |3 C/ p& N8 S3 p
  701.         dwDownLoaded=0;8 s5 I: U2 M: r7 t! f! j) h5 W. @
  702.         bSilentStep=TRUE;" y& \, X0 p& g9 X) {" g5 f
  703.         bCompressed=FALSE;
    " N& M+ ^8 k& Z! I
  704.         strExtLocal.Empty();! k, B* d/ V4 R( u- N$ R
  705.         strFullName="readme.txt";2 i! g3 s4 q6 Q! {) h* ?
  706.         dwProgramState=AP_CONNECT;
    - C3 `/ v+ h) b* y  W# |/ m
  707.       }+ d3 ^8 U# B8 B% i: \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 }$ r( D! _% C  o  C$ B
  709.       dwStartUpSteps=2;
    9 V+ J: h: d1 C" \$ X4 Z" r8 ?
  710.       break;
    8 k4 B# E7 _5 x: V* `
  711.     case 2:; }1 N) H3 P# `3 D! L4 `
  712.       {1 o0 b3 Z1 @  q) ~- g1 h; N4 ~4 N
  713.         int iEOF;7 X- V( ^1 X. P" M7 ^
  714.         FILE *fp;
    : D9 {6 T; r0 [  ?. B
  715.         char szString[512];$ U4 a& J; s, h+ @( M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / p9 m* r& F. O* f5 c3 {% U
  717.         if(fp)' D. D# x" G8 ]# D& l& U
  718.         {
    8 r5 h& U0 k# i& t. r/ a0 b
  719.           do5 x! {% Z. |# k  X9 j
  720.           {; p) b1 z4 b0 }! Y
  721.             iEOF=fscanf(fp,"%s",szString);
    4 g) r0 Y% M; _( T% S) ~1 G' W
  722.             if(strlen(szString))' `3 q4 _. ?  Z# A& z/ B: Z4 T
  723.             {
    ' W  {: |! ]' _6 P. }8 Q/ Y0 A3 X
  724.               if(bFirstChar)
    $ O) U8 T6 f- s
  725.               {
    , q# {" l% y5 [6 V
  726.                 bFirstChar=FALSE;
    4 i! D3 e9 f0 S- [  M
  727.                 bConnectIsBig5=FALSE;
    4 i& r9 b0 H! d; r* W% l* D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + i! C! [* W/ p) L; _% a
  729.               }9 M+ o$ l9 B, r7 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 {6 Q* m2 o- V! h1 n: C3 b5 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 m$ T' _6 H4 x8 {8 K; z3 `
  732.               dlg->m_ListText.AddString(szString);) y# j. B7 J4 i' m4 \
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - f% V% F& F( T! z# B1 x
  734.               *szString=0;2 l" \2 b3 B$ _( z$ U0 x
  735.             }
    $ e& M" ?$ o0 i6 U
  736.           } while(iEOF!=EOF);
    ( ~, k+ e# R8 y* g! E
  737.           fclose(fp);
    + P: s& `. g) S
  738.           unlink(".\\DownLoad\\readme.txt");
    * {4 T% N% @* u9 W  Y
  739.           dwStartUpSteps=3;
    - r! z4 M" Q% w+ v  h
  740.         }5 B6 [% A1 O- t( O7 _+ y7 j( }
  741.       }9 U3 S7 X! r- t# R
  742.       break;
    ) F$ n3 u6 ^, G7 Z; q1 u: L
  743.     case 3:& s. ~/ b. J* A4 P. u9 [( @
  744.       if(!Dn.Connected())+ k5 D- Y# ~1 _3 F0 Q6 _
  745.       {
    . E/ W- \; |7 J# ~9 {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 E+ [/ U; T0 ?! d5 o' L  i
  747.         dwTotalFiles=1;
    5 G" h9 c) L5 @+ r6 E: c* n
  748.         dwDownLoaded=0;
    6 }$ I; r9 J" B7 j* u& u
  749.         bSilentStep=TRUE;
    2 T4 O6 V; `- D4 Q! k) v5 ~6 N! w
  750.         bCompressed=FALSE;
    - Q6 m2 j7 ?5 I7 v3 c) l" |; x( H
  751.         strExtLocal.Empty();3 A  L) F( R/ d7 ^. i
  752.         strFullName="checkversion.txt";; s! d; ^( ?, i/ Q) j
  753.         dwProgramState=AP_CONNECT;
    ) A' U0 h! q) Z
  754.       }  C- Q) `; M9 m+ j
  755.       dwStartUpSteps=4;! _8 L! K8 Y1 F: @2 w
  756.       break;
    / x' m5 @0 N+ Y
  757.     case 4:* J3 N  f% ^: x- G! p$ @5 k5 c
  758.       {
    4 ~6 T& ]6 A* M8 k- Y
  759.         FILE *fp;
    / C+ B9 y# t) p0 J% E
  760.         char szString1[128];
    ; B8 k2 P" Q. p4 e/ y5 S
  761.         char szString2[128];
    " X6 ]( E8 o$ P. T! W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * f  m& n/ T; y# }2 i, J5 w
  763.         if(fp)% e: _0 h" r* I. f7 ]3 U6 O8 F1 J
  764.         {$ _; Z1 `. A9 X9 H5 x6 f
  765.           fscanf(fp,"%s",szString1);1 w7 B' i+ G5 f% Q( q9 J( Y
  766.           fclose(fp);' ]. R* c& L' T2 d2 t) x  d3 E
  767.           fCheckVersion=atof(szString1);
    1 G; Z/ }' w! v8 U) T
  768.           fp=fopen(".\\checkversion.dat","r");
    7 p5 s2 ?. N. A5 n8 A: s
  769.           if(fp)
    2 q7 D: z6 d% i  q0 {1 p
  770.           {, [9 h; ~4 S* r3 d( a8 Q
  771.             fscanf(fp,"%s",szString2);
    7 Z8 a3 a. y1 b0 X# \3 c
  772.             fclose(fp);
    9 |, O  [# O5 V! k' p4 n
  773.             if(atof(szString1)!=atof(szString2))
    : m4 |0 [$ k) K1 C) b
  774.             {0 {9 s; r+ l& c  q( }# m
  775.               if(!Dn.Connected())
    ) o6 D  B' w1 d' s8 i, y
  776.               {( J4 F  N6 h4 _
  777.                 bFirstUpdate=TRUE;
    / W+ O6 j0 O' M
  778.                 dwTotalFiles=1;
    5 u: F' m6 ~9 \! K
  779.                 dwDownLoaded=0;
    ( ~( X; J0 A- b" J& Q) d
  780.                 bSilentStep=FALSE;  F$ Y+ T/ f! S: O
  781.                 bCompressed=TRUE;
    2 _& A0 ~, |' F2 E' ]  A
  782.                 strExtLocal=".\\DownLoad\";
    5 M( b# i* j/ ]: O$ I  @( B
  783.                 strFullName="update.txt";3 f: K5 z( P4 W2 v6 d
  784.                 dwProgramState=AP_CONNECT;! f3 p5 ^, F/ Z: u  Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' t3 j; q0 R" Q2 r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 F: K  a/ f/ O# P$ ^* `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 u6 E1 K( N$ x+ ?; j' f0 x+ a
  788. & a. r7 Y- R; i: S8 H4 B) K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # r0 D# ]: C9 O5 R: ?
  790.                 unlink(".\\DownLoad\\checkversion.txt");; m/ {) [0 ]9 F$ `* p* T0 T
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# m: W% x6 k( L% ]( W
  792.                 {, Q3 t* d: P6 `( F% r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: @4 b0 n  v' M6 A# {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      H0 [- P1 `. N( J# |2 _
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- K1 e$ L% V% |1 ]3 Y* x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; e2 s  o7 ^* k/ d, Q7 X
  797. . S& S9 w0 n' B9 H7 H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) J7 G; t2 s2 K2 ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) h2 h8 Z( s8 h9 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  n+ s' {+ M' l2 U
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- N* T% j' S' T. {# v4 _
  802.                 }6 t, m7 O4 e' l! }2 t  h
  803.                 dwStartUpSteps=5;
    0 F5 j# V: l/ k
  804.               }
    9 H. P/ S# a' N0 P
  805.             }% \! e0 [8 u/ N/ ]4 g# Z3 Q3 d
  806.             else) c- ^0 F2 v6 B3 r; D
  807.             {
    : i- ?# B6 M$ y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 K1 I. F1 t4 r$ n, }( ~  }
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! }, N' L$ Y7 m: N/ m8 U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");  G/ v; u/ Q& \; x6 E0 N" J
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ q' U1 C. I. |1 O) m
  812. " Z' A7 G+ ]. i' R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" E+ d4 u  u) T& d' d: j
  814.               dwStartUpSteps=99;
    + R% [% d2 `, @6 x; R9 X
  815.               bFinishUpdated=TRUE;( m1 w& j5 y) E7 w' m  E% F# T
  816.               bCanUpdate=TRUE;1 j7 X. i- C! x& b! ?5 {
  817.             }
    ! d7 ]$ a1 y. i; ^, }/ w% X, m
  818.           }3 B2 j8 G% o5 w+ _  T1 H
  819.           else
    9 I* b  J, f, {) G) }6 r# a
  820.           {
    2 D* X8 X* U7 Z* Y0 F8 u
  821.             if(!Dn.Connected())
    0 u+ k9 V) E8 @1 P
  822.             {0 x: g2 I- g1 o4 G* d! l! ^' P
  823.               bFirstUpdate=TRUE;$ @/ u8 p& R" |- q$ B3 m) a  \
  824.               dwTotalFiles=1;
    1 K' ?# a9 ?1 }1 q1 o! {' Q% Z! ?6 n
  825.               dwDownLoaded=0;  E! o8 }" C3 B" z
  826.               bSilentStep=FALSE;
    " L9 s* C  Z( k: _- B9 u( ?, D
  827.               bCompressed=TRUE;, y4 a% I0 n0 R) X5 R* _
  828.               strExtLocal=".\\DownLoad\";1 K* j7 w, p) E; Q  g( b
  829.               strFullName="update.txt";+ I( `, A) T# u% s
  830.               dwProgramState=AP_CONNECT;
    : y* {3 |" o7 F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: M9 \" w4 J0 r0 [; C7 _5 x* J4 E
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 C4 Y& F& E& E) ]/ m7 q9 ^, R+ r' `# }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + D) v; C7 H$ Q( E0 G+ r2 W: P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  [  G0 m# L3 Z# V; |) Y* J+ Y
  835.               unlink(".\\DownLoad\\checkversion.txt");
      {( B! }8 D) U
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)! E8 y$ L) Y' `' r  I
  837.               {+ G4 j( @4 C7 ?4 }! \, l! S
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: G+ g# x- z7 U/ b7 `) _( V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      |) ~, z! t0 I. r  X% K2 b" d0 A
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% G, s  A  H  `9 ?/ H1 V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , x! V. y7 H; p6 y# \7 x, A
  842.                 : }  k3 v: N% t+ U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' n% y# I$ M  B4 R/ P! b
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 [( V4 s2 Z+ L7 j$ h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! L. z  u* ^$ m' P& W+ z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 C6 C+ q: g1 A/ E8 E
  847.               }& F# ^5 a7 V) B& U& t& [8 X
  848.               dwStartUpSteps=5;! n% ?* s2 ^' o! Q4 h$ G
  849.             }
    ; f2 ~* S6 f4 {9 B
  850.           }
    - b+ \6 f( w$ O. E3 C
  851.         }; ]0 l4 W; Q+ _- |2 S0 T
  852.         else
    8 h# p! U. M' j6 }$ A# R7 J
  853.         {
    ) C1 Y- F! X! S7 W
  854.           dwStartUpSteps=3;
    : z- B3 l' G' ]4 U
  855.         }9 ]8 y0 S1 v9 z3 [; z! Z. u2 j
  856.       }9 U5 E6 b. l7 s( H! A% ~! ~" x
  857.       break;2 P9 }" {2 X. d6 z& B9 r) j( g
  858.     case 5:8 {: p+ u) l2 G8 @8 {5 m3 J' E3 G5 d8 M
  859.       {
    2 O9 y6 j6 y9 i: x1 O" a) w7 P
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 T# i: g, @0 d
  861.         {
    " l8 l+ s4 U+ n+ O. z& O2 s* g, g
  862.           int opt_overwrite=1;3 s; O; ?, p% ^$ i. W
  863.           int opt_do_extract_withoutpath=0;
    * V6 @( f4 e  Y2 Z* Q) k- x: t; d
  864.           unzFile uf=NULL;
    3 [, V  g0 H+ u
  865. / y* f# B% u  u/ V' H3 }- Q
  866.           uf=unzOpen("Wsa.zip");% t# r3 x( J/ t* A1 D& q
  867.           if(uf)2 ^" T+ e7 P( _8 H8 ~
  868.           {8 N: H5 E! |) W7 \5 Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % Q, P4 i$ h2 V% q3 ?
  870.             unzClose(uf);
    1 Z) P9 V& c; E% M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: q/ l. ~5 e0 ]4 ], `; a' _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: e6 [, S6 B, E2 t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    $ f: u. E9 o- h/ m& {) l
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 n; T; P# L5 u" c/ f9 W4 w
  875.           }
    " L' g* G8 U  p& _6 w2 V
  876.           DeleteFile("Wsa.zip" );
    ) _8 K2 U1 v4 g' W8 [
  877.         }+ v& q  G% R* B

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

9 {- r6 g3 o" M8 w0 f' a' y5 w/ y# I! w3 o: p/ X2 k. O/ j

評分

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