找回密碼
 立即注册

CSUpdate.exe源代码

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

5 z: q! O5 V+ o2 [$ [
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 E  r, J0 O: Z( t
  2. //3 r$ D; t, ^6 K6 d+ J' m( w( ^
  3. 2 G) w7 m1 D" ?' J8 b9 Y
  4. #include "stdafx.h"
    0 T- j3 f# O6 w; c3 }6 v
  5. + Z+ f% V3 q6 a. a" D
  6. //#define UNICODE
      x/ C6 r$ U! i# L4 {
  7. //#include <gdiplus.h>
    7 ]/ I( }) d( \8 w) Q2 A3 ?7 M
  8. //using namespace Gdiplus;" {/ W" p0 N5 `- ?$ W" k& H

  9. " c5 `4 N" }, A% o4 T7 S) z, T
  10. #include "RevApp.h"* X  I5 l4 Q+ e& F5 _1 C$ `* J
  11. #include "RevAppDlg.h"
    ( H0 d0 H  s0 i" v* b* [" w9 y! d1 W
  12. , V4 ?1 e1 T, o
  13. #pragma warning(disable:4786)
    2 s2 w9 P8 G) ^+ `1 f3 B. w
  14. #include <map>* H% J" v" x2 x# P3 g
  15. #include <list>
    ) o1 W0 b: t7 q. S) w+ w8 U
  16. #include <direct.h>' z; ?" D7 @4 g& {2 I

  17. % f% K; B8 Z2 N" E0 y  o2 o
  18. #ifdef _DEBUG* e4 z7 o3 y! z- e# K- q; B
  19. #define new DEBUG_NEW' t: |. I9 ]2 q7 v
  20. #undef THIS_FILE
    4 W  K* M# P1 s2 `
  21. static char THIS_FILE[] = __FILE__;3 Y1 d$ C% U3 m: Y
  22. #endif
    ( [9 |; J$ {& u: v
  23. #include "SkinResDef.h"
    ) u4 [3 ]  d/ I" d4 x$ s1 p
  24. #include "ChangeBG.h"
    8 n5 u" L! `* h& R  Z- e
  25. #include "AFXINET.H"
    4 N/ u& M$ |) p6 n" V/ l5 ~
  26. & V4 v9 `" m5 Y( ]
  27. #define TRADITIONAL_CHINESE 0
    7 j# @) ?+ ~$ ]7 n2 \1 n+ c5 k, Z5 ~* n
  28. #define SIMPLIFY_CHINESE 1
    # n6 @: {9 Z/ o4 K$ v+ P
  29. #define ENGLISH 2. Z! N6 Y7 s- L. v8 n. o' L
  30. int m_iLanguage = ENGLISH;  K% F4 h0 C8 H* z
  31. /////////////////////////////////////////////////////////////////////////////
    ' O7 f& T. G. ^3 j
  32. // CRevAppApp
    2 y/ K. I2 `8 o( T

  33. ) c5 N% r) |- {+ ]  F8 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , u$ M) ]- J8 V$ w. ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)% o4 u7 e8 e( x4 ?. K
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 M; J6 J6 x6 {/ a
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: v. Q" t+ s) ~) P1 Z
  38.         //}}AFX_MSG
    + G' b3 ^8 W( I. G, q/ e6 r8 F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& Q9 w1 B5 x, O- \
  40. END_MESSAGE_MAP()
    - U( b& L/ H) [8 |- P- Z0 B; p

  41.   ~1 g8 A- D5 m9 w$ a
  42. /////////////////////////////////////////////////////////////////////////////2 B+ @9 ^3 V! a9 {; h
  43. // CRevAppApp construction
    2 K6 s9 n' f! g6 @7 D

  44. % h4 U+ G, ?+ L
  45. CRevAppApp::CRevAppApp()
    6 _; L# L) q$ k2 Q: }' f
  46. {0 t8 G; H  j3 N, r
  47.         // TODO: add construction code here,
    8 _$ i6 ^8 }6 K$ N% a7 p; W( e
  48.         // Place all significant initialization in InitInstance; p4 P5 x* Q0 y0 \
  49.   bDisplayIsBig5=FALSE;" g- j: W; B$ G" e1 L2 y
  50.   bRestartUpdater=FALSE;' u% l" J6 U& N7 f. E7 u$ {" w
  51.   bFinishUpdated=FALSE;4 Z$ L8 A  o5 x) I4 g) z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 @- P  v1 I9 P+ I$ c
  53.   InitChangeDataBig52GBKS();
    4 `7 F1 i. ]" c
  54.   InitChangeDataGBKS2Big5();
    & w. P& C* V1 Y: [  j0 v; ]
  55.         //
    ) r& T; y6 p9 U& O& D( C( d! ]. ]; L
  56.         bClickRunExe = FALSE;( P; `6 n8 r) m# \9 h
  57.         //
    7 x3 j- e7 m# c! i2 [2 C
  58. }; f. e! q2 O; \- [9 l

  59. ; Y( j7 K$ ]1 z( Z4 f/ w/ c4 t9 e
  60. CRevAppApp::~CRevAppApp()
    * z7 u3 ~- ]( Z1 J% h
  61. {
    , |+ v- k0 N1 G3 y1 H" ]2 @
  62.         // TODO: add construction code here,. ^7 p3 H4 |" c; Y3 u3 E) H  i
  63.         // Place all significant initialization in InitInstance
    . E- S; F% B' y9 `7 |! t. v$ p2 E# `
  64.   EndChangeData();
    ! B( F4 D) s: N: N" e. Y
  65. }
    0 B& z* W9 d- q% @' E% _
  66. 9 S+ `% w- G/ }" E" ~) o& \
  67. /////////////////////////////////////////////////////////////////////////////# T3 ^: W& u2 }
  68. // The one and only CRevAppApp object) f7 B$ j( f5 E( }1 K
  69. 1 I& h' u! c, m7 y/ U6 J* i
  70. CRevAppApp theApp;
    $ C) z- S; }3 @0 b

  71. 6 H# e, G- ^* {3 }* g5 J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * g* Y) a" r7 ]0 h% K
  73. {+ D; z3 R1 W, N8 X, D
  74.   int iEOF=0;
    / n" R9 l8 W" i
  75.   char szTempName[MAX_PATH];
      x& [) _) f1 N9 J0 m
  76.   *szFileName=0;; N; T/ F% ^+ _5 i
  77.   iEOF=fscanf(fp,"%s",szTempName);0 N0 U1 `$ I* J! D% t# \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 |3 @/ f. P9 `- q  T9 N  }1 E0 O
  79.   {
    0 Y# N" J0 v( r9 p% B* j. F
  80.     strcpy(szFileName,&szTempName[1]);2 l' O1 [9 o+ Y: V3 p; B! Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! J( y) S/ J6 N4 x$ v) y( h2 O, ?
  82.     {& e3 x$ z5 m7 R5 g7 C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ k& N* L- W9 c+ T
  84.       strcat(szFileName," ");
    4 M; I  G* i! |
  85.       strcat(szFileName,szTempName);
    ; v0 S+ {; S3 r2 i* Z1 T
  86.     }
    & f# i, l3 Q# y( K1 Z$ H
  87.     if(strlen(szFileName)>=1)
    & ~3 [6 j: |& H
  88.     {
    # K% r1 o% w9 X6 Z' Q5 ]+ X" P8 A
  89.       szFileName[strlen(szFileName)-1]=0;/ l0 O& B  q" A2 [9 M' |$ P1 L5 M7 y
  90.     }& I* ?# q5 g% ]5 I9 c' v9 d
  91.   }
    3 q2 X- P; V  ]
  92.   return szFileName;
    * O  J7 j4 V8 \$ W+ F5 d: n
  93. }. e1 q5 g' D. I& O( L8 ~6 y
  94. % g7 Z% H+ B6 |& T' Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& D5 t* Y4 z1 H/ u) F
  96. {
    & p; _9 k2 |$ X
  97.   FILE *fp;$ r/ g9 L* s! Q; o. D6 e* V
  98.   char *key=NULL;
    ! D( |; H4 d2 y: c; j5 d
  99.   char version[MAX_PATH];
    # b, L- h' h* W* t8 y/ A
  100.   LPUPDATEFILE file,olds;
    : T+ y4 W& ^0 c6 C, P; Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* h# p& I, }  e5 `0 c( T

  102. + A0 v6 M8 ]/ `2 D
  103.   UpdateList.clear();
    : W- `5 w  F/ K, H  B( b! Z  Q
  104.   UpdateFile.clear();+ L+ s" N+ P' I
  105.   if(GetFileAttributes(filename)==-1) return false;5 ~+ W* k- R5 Q1 s( Z. P! t* y
  106.   if(!(fp=fopen(filename,"r"))) return false;/ G( a3 `  j# Z
  107.   fscanf(fp,"%s",version);+ K( `" k. {7 w1 c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* n/ V7 H& b% R8 c  t* e
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 {+ h1 B, `$ U$ J! Y! m
  110.   {
    ! ]& I" b! q9 m, }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: a/ \, D, W1 e2 K/ v2 F  M
  112.     fscanf(fp,"%s",file->path);
    0 `4 g) G, U8 ]  W# o" ^. x9 t
  113.     ReadFileNames(fp,file->file);  R* x$ q" f6 r" _: [
  114.     strcpy(file->full,".");
    6 t, @) d2 V- f, n- m# o% A7 n+ `/ ?
  115.     strcat(file->full,file->path);
    + f' g3 G, @3 r9 C- I/ O+ }, o9 P; n
  116.     strcat(file->full,file->file);. S$ j$ b& S: \' I9 V
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * L, }5 Z& ~1 O" \) G
  118.     {
    . M- F% u% `7 }( N/ g
  119.       file->vers=(float)atof(version);
    3 f6 v, f( @0 {) U5 s2 I
  120.       UpdateList.push_back(file->full);- K7 d2 m& z: S$ m$ T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! U, |6 V; l4 |. S2 @) h4 V
  122.     }
    ! V* P' N: j; Q& Z
  123.     else
    / N2 S" f% j  m" b& f! C! Y
  124.     {# K- a, B3 H* u9 _
  125.       olds=(*p).second;7 D: {6 V* e& c. F7 _' b
  126.       if(olds->vers<(float)atof(version))9 Z1 j$ `; w8 C' R. t
  127.       {
    % F% f, F( l/ C4 d: L
  128.         olds->vers=(float)atof(version);
    ! K" o* r/ C$ L+ D1 w
  129.       }8 I4 g; h' i- |0 H) Y7 j: j- u
  130.       free(file);
    - T* I& c2 m4 L! I8 y9 h2 Q
  131.     }
      k  e9 r: I/ K0 F7 z$ H  A% [
  132.   }
    0 v8 e4 A$ D% [
  133.   fclose(fp);0 O; _( E0 {& Y- r
  134.   return true;
    6 p' e* B6 M+ E+ W2 [4 k1 [
  135. }4 s6 m$ b$ O) x) E0 Q

  136. 2 {( [& C/ t6 n' U( W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; h( o/ w+ v* G. V
  138. {/ c# H  B5 U+ u7 h6 [. b
  139.   TCHAR  szFull[MAX_PATH];
    8 d- H' U% a; M; D9 V2 S
  140.   TCHAR *token,*inter;& h5 {' k% S& D0 c2 t( y# f+ G
  141.   *szPath=0;. ]' o* K/ Q! a
  142.   strcpy(szFull,szFullPath);$ n+ t1 t' M; R8 o
  143.   token=strtok(szFull,"\\/");
    $ J+ |! T5 k, k- X
  144.   inter=token;
    5 D# W! I0 o. B  p, b
  145.   while(token=strtok(NULL,"\\/"))/ ~9 F% [& {4 Y( j* {9 i9 z; t2 j. d$ e
  146.   {, I( u) n& w! x8 N6 n
  147.     strcat(szPath,inter);6 d& m  U. \+ `2 l
  148.     strcat(szPath,"\");
    ; h9 S$ m! ]; ^  t! r$ d
  149.     inter=token;! R$ U$ W6 y  P1 p  [: m
  150.   }5 i) u# V) p/ C$ W8 X/ T. g6 n8 Q; X
  151.   return strlen(szPath);
    4 R" C0 Q* u' {7 R
  152. }9 T. J. Z' X6 G, S( s
  153. * w2 g; O' O* W9 K, y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , ?" J' ~) h' m- n& O  ^
  155. {
    $ \3 K5 z8 @5 y) o
  156.   DWORD attrib=GetFileAttributes(Target);& ?; c1 B$ }* g- e( B
  157.   if(attrib!=-1)
    $ f  X; A) d( g1 x/ _* ]$ Q
  158.   {9 S7 M' T; I8 k, b% y) m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- c# n6 X3 O% F9 Q$ p& N" p
  160.     {
    % |. Z9 m8 e& p" U" c
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , {1 r) X! J) A: c( ~: v" ?
  162.       SetFileAttributes(Target,attrib);: s1 |! S- _0 g( E- s! U3 g7 d4 O
  163.     }' r4 q' `5 V7 L! }5 G2 x5 Y. {
  164.   }, q9 i/ y, d) e
  165.   CopyFile(Source,Target,Erase);8 i- E! k0 J4 {: N% @8 S
  166. }
    4 b. F8 @# B' f& S) y

  167. / M! c, D4 b5 L* J2 D
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 `' Z# R& q2 J
  169. {/ [  T' h2 F+ i  u3 N/ [3 n/ U0 G- H
  170.      FILE *fp;
    6 y1 R9 N; ~# A  i9 B
  171.      char  szBuffer[8192];
    ! A' H. M7 k1 v3 n9 t" u( W
  172.   va_list  argptr;8 y) v) E+ K% Z/ m

  173. : ~& R8 {7 P% i3 J, F  m
  174.         va_start(argptr,message);  J+ i( z1 C/ Y8 K4 E1 C3 H$ |+ s4 p* N
  175.         vsprintf(szBuffer,message,argptr);  ~) J% B$ V+ F2 E6 Y, I
  176.         va_end(argptr);
    % s; y1 l1 Z7 m" l' U
  177.   fp=fopen(FileName,"a");
    + E' ~$ q# S; j9 l
  178.   if(fp)& [! p% u9 C- c
  179.   {# q+ c4 v! e2 d# @5 ~8 H
  180.     fprintf(fp,szBuffer);+ i! B7 @0 q. p9 ?1 I
  181.     fclose(fp);
    ) H# _6 j  c8 B$ C2 P$ v
  182.           _flushall();% a+ [. K1 h5 R6 a& X0 ?
  183.   }  b7 Z* B' R: s0 P% I8 Z' O& Y+ T
  184. }" t9 ?* j6 q! u3 \( v
  185. 5 r6 S( \5 w& s6 g$ v. V
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 N9 B1 j+ J% o$ X# |) i
  187. {
    & w# L# J% |% z6 `
  188.      FILE *fp;
    0 @4 N! _* G$ A7 y% v, s0 W& _
  189.     DWORD  attrib;3 m, c* S- J& \0 m% [
  190.   attrib=GetFileAttributes(FileName);9 c- K1 s5 o# p9 S
  191.   if(attrib!=-1): ?6 L  R& t; ^! ^9 d
  192.   {
    ! \$ V- l" ^* W" J5 R0 e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ j3 p8 w) m& A) G/ i
  194.     if(!SetFileAttributes(FileName,attrib))
    " O( \9 P' A/ z2 S4 @
  195.     {
    ( m9 W3 d# j  q/ |) F  ~
  196.       return FALSE;
    : Y! G% d6 x) Y4 U3 Y& U; S* [
  197.     }
    + n/ f9 s2 @0 J  u$ T& U
  198.   }
    5 ^3 G. j% t1 Z; o8 r! I
  199.   fp=fopen(FileName,"wb");
    / \8 Q% X' @7 c$ |  c+ R/ p* ]3 {
  200.   if(fp)
    , B3 o& A4 R# f
  201.   {
    $ D1 U8 d  P; l# |+ m! e
  202.     fclose(fp);
    ' `% b9 A* ~3 K2 |0 O0 S
  203.   }# [+ @) t: q- B  i: O
  204.   return TRUE;5 a5 N5 n; X% n/ O! i( _; B3 q" t
  205. }
    ( \8 M7 v+ u% v
  206. 8 |, r1 w8 S" S2 y; y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    - Q0 T; ]. L8 T
  208. {
    - q( Q1 f" u0 @% @2 _
  209.   char filename[MAX_PATH];
    , e8 J! Q, u& q( K4 R- N" c# R
  210.   LPUPDATEFILE file,olds;# n5 S( w, Y* @0 W# T. S) Q# s6 l
  211.   std::map<int,CString>::iterator i;
      E, e4 c, }) ]$ j* c! n+ F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" A# o' Q5 ^3 X' i$ P
  213.   std::list<CString>::iterator l;
    ( ?" i5 y, M2 o/ i3 o$ Z5 z

  214. ' v7 N4 M% _2 H0 I$ j: J; o
  215.   if(bFirstUpdate)% J# ]  z! k' R* ~7 R, ?
  216.   {' u; I8 C1 x, n. m
  217.     dwCurrFile=0;+ N# ^5 d4 g4 Z
  218.     bFirstUpdate=FALSE;
    ( ^" K; M0 i6 V2 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 V- X$ \6 }' j$ z, d9 ?) p
  220.     {
    5 j/ q( r7 |4 F0 ~
  221.       dwTotalFiles=UpdateLocal.size();
    : Q+ W& z6 b  S9 \( Y
  222.       dwDownLoaded=0;
    7 l) }" z  M. e$ U5 S% M
  223.       bSilentStep=FALSE;
    8 E# k+ C8 D3 d( {# h; q
  224.       bCompressed=TRUE;$ I5 g  Q% b: w2 M+ N9 F
  225.       strExtLocal.Empty();
    - _) {1 z5 t) u; }2 }
  226.       strFullName=(*i).second;
    2 p' k' c9 X- V- N- r
  227.       dwProgramState=AP_CONNECT;
    # D* y: \. d8 o8 v$ S5 m
  228.       return TRUE;: n; v5 F: [& V, R1 P& f0 \) G7 _4 M
  229.     }4 y! [: U: v: W9 X
  230.   }) ?! R2 `+ x  v5 |) i$ P8 J
  231.   else if(bRestartUpdater==FALSE)
    6 ~' z3 H; b4 W- z% K# ?1 z/ {  c% s
  232.   {
    ( r. ^! E  U( t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' ~3 ?' s8 g3 L; B
  234.     {
    * ^' B" S. ^  ^" j0 `% u# ]
  235.       file=(*p).second;1 X5 O# S3 q& u2 v. `; g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % R( I, f' |2 W( Z& ^* y! \7 ]2 h3 Y
  237.       {
    % A. n5 M, w! V$ K9 Z
  238.         olds=(*p).second;
    3 o# k3 Z" [( x
  239.         olds->vers=file->vers;
    % y# f, Q" M+ \7 |$ c6 b
  240.       }3 t/ m3 r, F- t8 n% U
  241.       else6 i, j& W4 d" z3 a3 q
  242.       {
    . U$ A" w7 r& o6 |3 I7 a2 [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : j$ \5 x7 h% s- e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  z3 T) ]8 C5 K1 [6 I+ X) K
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ k9 a2 P3 w4 p& n; y
  246.       }
    % B) M, j) L& W0 p) r4 \0 p2 b5 `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : l$ F2 X( r  U5 W5 V- f0 y
  248.       sprintf(filename,"(%s)",file->file);# C1 j6 P- b3 p* D1 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! t4 Q' [3 _" p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 `& D$ ?; r5 f
  251.     }
    1 W* ~  W0 K) b
  252.     dwCurrFile++;
    : i2 K% E. v% l# v* J3 s' Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). n! g( K1 F& N$ B5 S5 k0 K
  254.     {4 E, j) }1 y  k7 A
  255.       bSilentStep=FALSE;
    - r' Z; w4 j1 o$ H0 j
  256.       bCompressed=TRUE;# p  O) ?" k, B/ A9 e% ~
  257.       strExtLocal.Empty();$ r/ z( C) k# z1 r/ g
  258.       strFullName=(*i).second;) T4 a) [+ ^( N# H
  259.       dwProgramState=AP_CONNECT;, D0 b$ i9 w, z' t2 F) \& g1 r
  260.       return TRUE;3 j2 ^% f8 p+ N# m
  261.     }& M1 y9 X$ Z1 I: j; j2 u
  262.     if(!bRestartUpdater)$ G+ _6 [% g1 S
  263.     {7 M- N5 f  h1 D1 ?. a0 E
  264.       int iCurrSize,iFileSize;! w+ V0 o# j5 f
  265.       iCurrSize=0;
    0 W' v6 E$ {: E6 J3 E
  266.       iFileSize=UpdateList2.size();
    1 i$ p5 P# _- i2 i% m9 O! `! z+ H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    0 o- s- O- K8 G) U. A$ K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 x, C9 t7 [" W; Q0 M, D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( H" I- K+ B. S$ g+ Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; n# o/ f% j% }% A2 t& d
  271.       Fclearf(".\\update.dat");
    - n- g  E% W2 s5 h  U
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 p. [$ E1 J0 ~1 U' U* o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ e& b' K( X6 a# I" ]4 v# z
  274.       {
    6 Z' \1 L6 M; X* f# \% p5 G' u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& ^( Q( J5 z, K  b4 I2 G
  276.         {
    / ^: k* H0 e8 q0 f" C
  277.           file=(*p).second;9 D2 W" t8 ~* J) Y5 ?1 i8 z; S) S1 Z
  278.           sprintf(filename,"(%s)",file->file);
    3 Y% v6 u  u+ ^5 Q# R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 I) ^, H& t' |3 }* e2 c
  280.           iCurrSize++;7 l% x4 |: z, A( P: t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' S# o  f( ]2 t; J7 o% o' X
  282.         }2 C- S1 J/ g2 M
  283.       }* _2 w& l% @- z: T( d7 \" l
  284.       unlink(".\\update.txt");
    % h7 y& W$ P" L0 @
  285.       unlink(".\\update.tmp");: s; Q# U! L! c) S1 T4 k* y( ?  W
  286.       Fclearf(".\\checkversion.dat");4 |4 @+ J6 K% j9 T% p9 w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 \6 u% u# d: L" _( C! z2 G4 J
  288.       if(UpdateLocal.size()): L, u$ q: R  _% f$ A" O& E
  289.       {
    % X. E* b% p7 [% q" C8 O
  290.         UpdateLocal.clear();
    8 Z8 k3 F8 W% p' J3 z( l2 k
  291.       }
    ) n# ]* P8 e, f  J. N, J3 Z5 w% L
  292.       if(UpdateFile3.size())) U8 P+ o* O8 j. u6 @' _
  293.       {6 W$ Z: m7 B5 T# Y! p
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" b4 |- D+ }4 o5 W! y* I5 _8 c
  295.         {" E- s' t& x8 Z$ l- T, E4 J! ?
  296.           file=(*p).second;7 A( s3 t  v+ s3 z) m- e2 g: Y
  297.           free(file);
    2 S! ^) _) w' c9 A8 C
  298.         }; b$ Q  C  W$ I
  299.         UpdateFile3.clear();
    ( b6 t' s& J( r: s
  300.         UpdateList3.clear();4 C3 h0 J3 s5 D( y+ W+ T
  301.       }
    5 ~/ U$ ?; D  S4 V0 f
  302.       if(UpdateFile2.size())
    6 d6 G; a# A8 L1 r% i- s2 Z2 P: X' g
  303.       {0 D: A4 d1 s3 O9 k" W; m4 J  W2 ], j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : I6 i+ E3 f8 P/ J! x: L( _
  305.         {
    * s2 F3 _5 p; `) l
  306.           file=(*p).second;6 j* v8 g+ x8 A" D7 |' _% Q, Q
  307.           free(file);8 \2 n6 q9 {1 J( _+ |: D
  308.         }
    0 _" g' ~# d+ P9 m4 Y1 w4 w" _# ~
  309.         UpdateFile2.clear();
    : E* Y8 ?8 }0 v' m
  310.         UpdateList2.clear();/ |/ ]0 Q- B. |/ [6 Y4 N
  311.       }4 ~4 H' P+ X* D/ p3 C; ~5 o
  312.       if(UpdateFile1.size())& t' s3 o/ }+ o& e% U) r- {5 X
  313.       {
    + T$ ~) W3 P- @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) r6 \6 [9 _" p9 @
  315.         {, B# w/ [- f. E' J
  316.           file=(*p).second;
    3 L5 K) f/ o4 z3 s- H* y5 R
  317.           free(file);4 Z- ^# O+ E5 o' y1 R: {$ W
  318.         }
    0 ]" Q  m2 o$ o2 W, Q
  319.         UpdateFile1.clear();
    : S6 C0 @# o9 A3 h! D" H
  320.         UpdateList1.clear();
    / `$ @" B" w/ v. M6 t+ F( t
  321.       }
    0 Q8 s: W6 b0 s" g4 m! j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  Z& O' e( k+ Q4 O/ A1 y* V7 U
  323.     }
    9 I7 h2 N; m# l3 A6 R
  324.   }
    % a7 l( |4 k) b( c2 O' r1 c
  325.   return FALSE;  F, _: r9 O& a. Q
  326. }
    7 w; a$ }# W+ W( q! X% L

  327. % U2 i/ F- M6 Q
  328. void CRevAppApp::ClearAll(void)
    1 h; @+ _# Y2 X3 E! [
  329. {
    - w# g3 L. P- Z3 b
  330.   LPUPDATEFILE file;
    $ A# g" b2 S" [: ?  K4 |0 d& u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 E! a3 y  p; |- V9 m

  332. . H& m, m: y5 _. q2 E$ ^
  333.   if(UpdateLocal.size()), L: P2 t+ J( V
  334.   {3 v& E9 @% @, ]6 c* b; }' p; ^. N
  335.     UpdateLocal.clear();. }8 B* \5 e3 F! f4 B3 S
  336.   }/ Y5 N3 D7 f# v" O% p! S
  337.   if(UpdateFile3.size())9 I/ n* c# }. J( z2 x% H4 C
  338.   {
    0 q/ t/ p, k% W* v: A( B4 {, }5 q! I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 M! F6 k( t( c6 Y" K7 e# l& Z/ |+ _
  340.     {/ O( K7 y3 m9 [2 H" C2 L( ~7 ?
  341.       file=(*p).second;7 v2 \$ p8 H' U8 n
  342.       free(file);
    $ r! r! ]+ N, y# C, F$ a. h' s6 m
  343.     }
    2 W0 V& q5 d: N5 f  R3 m+ v
  344.     UpdateFile3.clear();( y0 ~% o3 @" |3 g. V5 \, n$ V- n# s
  345.     UpdateList3.clear();3 Y$ P  u( ^* B: e, N: x
  346.   }
    0 r( J! {% T0 p3 \
  347.   if(UpdateFile2.size())1 i! x, ]' F% P6 t1 `
  348.   {0 G" d8 ]* E- p; e% t0 v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 Q" T% r# a/ E6 U1 @! a6 Y7 O5 |
  350.     {
    5 u$ i. y( v4 _* ^  E
  351.       file=(*p).second;
    % W, f4 f  j6 ^" |
  352.       free(file);6 w- O8 g' Z1 T7 M
  353.     }
    , i7 A; h$ }& F5 w3 }; _$ O
  354.     UpdateFile2.clear();
    8 X' e% ~, {! |
  355.     UpdateList2.clear();- X; z6 _9 z  ]( e7 v+ U) s
  356.   }+ `$ R+ a# B7 L1 [/ Z# }
  357.   if(UpdateFile1.size())
    0 R" U& ~  p0 z% g
  358.   {* \4 A% B: A$ `! O: ~& B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 ]5 l' g  ?' }! m" {
  360.     {
    4 L. V7 c' c- T: P
  361.       file=(*p).second;6 l2 i5 K7 K8 u5 Z  }$ U4 z9 r
  362.       free(file);
      T! p6 R: C* w, ]6 @7 Q8 k/ a
  363.     }0 d7 E, }8 G( P& D, E% V+ v
  364.     UpdateFile1.clear();$ c; P: a/ b1 T: V# P, n7 J# n
  365.     UpdateList1.clear();! B% A3 p  A) S7 F6 m
  366.   }
    ' g: V& e9 J7 ~4 r; G+ D7 Z4 }
  367. }  
    - _" S/ Q% T9 y6 L3 R
  368.   0 e& o. [5 J' g4 t/ d. v6 m
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 |) _; a, z1 ]. Z9 I
  370. {
    + f+ `8 m! M! M* t
  371.   int c;
    " Y/ J+ m8 m% P% R+ r5 ~
  372.   LPUPDATEFILE file1,file2;5 G9 x, p4 Q* @; ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / a& w4 A- d; T8 @7 R3 P
  374.   std::list<CString>::iterator l;2 P; ~1 b2 Z" i1 f& M* [6 ?: b! V
  375. 0 f# Q# Y" u' c2 ?; q! j2 B
  376.   UpdateLocal.clear();
    4 Q$ I% y9 K8 `) [1 o. g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & w: f- U. g9 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 W  K$ M# i5 M) C$ q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ W2 C& n3 ]2 ?& n; [3 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 X" }% h( S6 o, v6 x& B! B/ c
  381.   if(UpdateFile3.size())/ e6 a% p- v( c- t6 |4 \0 h
  382.   {
    & g0 m2 _" n3 K& Q' }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 ]9 i  t4 Z- ?/ d1 l/ F
  384.     {
    , r  V/ p$ K; I) U& B# h
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ E' d; C$ k8 G/ Q* N1 e1 V1 L9 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 ]( g6 T0 c9 k; k+ |5 p" c2 y
  387.       {
    3 U$ o6 @# ]' ~$ {
  388.         file1=(LPUPDATEFILE)(*p).second;9 N" ]- ?- Y0 o8 F1 e
  389.         file1->vers=file2->vers;
    / O9 v5 [( B! F9 ~( `# c2 |" b7 ^
  390.       }
    8 ?% X& w( f0 b) B' P
  391.       else( `7 l9 z4 G% e
  392.       {6 }8 o- F- E# Q: ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: A! [+ d( |9 B1 n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% n& h: X1 G; i; }6 t, E6 p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- `: Y2 X9 ]+ Y# R
  396.       }
    + i2 t% \* i" Q. @3 ?3 o- M8 b1 r! r
  397.     }
    " U6 V6 H3 u# C4 h
  398.   }. k5 I8 h# j6 b7 |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)9 U9 a9 o( F( j2 Y" J
  400.   {' |" \/ O/ ]: _. l3 y/ M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ M$ i5 r4 V, E' M% b0 N4 j
  402.     {
    - J5 o" g; o$ q- `
  403.       file2=(LPUPDATEFILE)(*i).second;0 Y3 z9 O0 G! n% b
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 n( o. j! m2 W5 C, ]) |; e4 m
  405.       {
    + w& S* Y$ T2 z8 _2 Z5 v; Z* j
  406.         file1=(LPUPDATEFILE)(*p).second;3 ^$ F# t7 A5 f
  407.         if(file1->vers!=file2->vers)
      l& q/ H9 H; ]
  408.         {- n' T2 t. M! s) W* S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 \7 c  H. H7 v2 I$ m3 N0 _5 V) p/ U
  410.           c++;
    1 ]+ N. }% @& d% |
  411.         }
    ; X7 u! ^/ j4 l! A) [
  412.       }
    / j0 w6 S3 t$ }7 p4 [! C
  413.       else: s) w7 v  _4 L0 l0 r
  414.       {
    - w9 L1 K0 Y/ e! t. a& `
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * o" l1 G! {3 f0 X+ Z4 T
  416.         c++;) t3 T" O5 t" A$ K) Y; v
  417.       }5 f( k# z7 x( T) q
  418.     }
    6 ^- J* S4 p$ S* c8 W
  419.   }
    6 z+ d- n8 q& \% R' x; ]
  420.   unlink(".\\DownLoad\\update.txt");
    7 P% ]8 L- o1 Z
  421.   if(UpdateLocal.size()) return TRUE;6 }/ S5 S9 I, y, y
  422.   else                   return FALSE;- y* ~+ S3 S) K2 B; q5 d1 `" T; v) O
  423. }
    6 H" @$ H  _, a

  424. , k  r$ E. N. @! }0 d1 w. A2 ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 d- F  j; _3 U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 u6 Y. d( D* S" T5 ?  W) U8 a* |

  427. " L- z9 d; W9 U6 A9 i
  428. 0 }  }1 \+ L, D0 y/ _9 e0 c0 E$ S7 R

  429. " j) e, p5 o# ~2 F
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 K  Q0 o. C% m1 n- u8 P
  431. {
    % W# ^3 ^; {, m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;& N8 \* l2 |2 U4 H. B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  ?; ~( U8 |6 N; F
  434.   {, N1 `0 M% e( S
  435.     char szLanguage[50];) U: ]$ `  Z2 d2 t# _: z: P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      S) c6 |: r# c& F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * q: D9 g/ R) u0 w' n3 n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 h9 l3 y; v8 c
  439.     else                                   m_iLanguage=ENGLISH;* e* J3 [3 [( a. p0 }+ ]2 [1 Z$ O
  440.     char szRegister[100];
    . w2 Z: c; B5 k( F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 G$ h1 r6 Y, `; W0 {
  442.     strRegsName=szRegister;) q# E1 M8 R2 J" t, w% i
  443.     char szPatchURL[100];
    3 ~) C% k8 y4 K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / B2 t$ Q/ m& O
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 O7 p! |7 K3 e, A! w! [$ }1 f
  446.   }& S2 Y# \! E! X* p
  447.   else* M4 H3 g4 Q9 ^" F
  448.   {: ]9 J) r! Q( z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 |# Q) X/ u8 W! }2 H- p
  450.     strRegsName=DEFAULT_REG_URL;8 v" n& s1 D* V% I- L+ d, o
  451.   }3 _/ b# r& U( l* I0 P, i
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 s% V% ~* U1 Z6 t  `( {2 U
  453.   {
    " ^5 C$ V' z/ s1 h  E# O3 ^& {
  454.     char szIP[50];
    0 q5 u9 H, e  k9 j* `2 U% J
  455.     char szDIR[300];. P* c7 Y) B% E  G+ d' ~- u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 q4 u( m) |( p- P
  457.     {
    1 V: U# H# a1 X2 p, R6 i( E: T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");2 g) d1 h- E9 S9 T& L0 Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; F1 n! |5 o* S+ _0 ?
  460.       strHostName=szIP;
    + E- |+ c6 Y: [
  461.       strHostPath.Format("/%s",szDIR);
    4 t0 v( p2 x$ [9 q& V; K' u
  462.     }
    0 O2 [# U4 z7 K, B$ }& a
  463.     else
    ) g5 F5 m9 n7 N# f9 p) R
  464.     {% n" r* I/ X, E2 P. _+ r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % `/ j8 U1 X4 O, r
  466.       {
    ) V- k7 M* k& K# f+ H1 Z
  467.         char szLanguage[50];
    1 q$ i1 ?8 A3 R3 m3 O
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + c8 i6 Y, A  ^8 _- L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: j7 n8 _: Z  L$ E: e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 D0 n: M+ {, |6 l4 L. M4 C
  471.         else                                   m_iLanguage=ENGLISH;; t( F. y+ z' N: L/ M4 G
  472.         char szRegister[100];
      \6 O# f0 ?  c  o  N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! ]: K1 N4 u# t. N. e
  474.         strRegsName=szRegister;+ P' l* Q0 V# f* {, i  {/ [
  475.         char szPatchURL[100];: f5 n: }/ R- G. o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 W  L& C$ Y6 w/ _! B& s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& \4 d2 A" {( Z* q* Q4 z4 M
  478.       }
    8 O6 d3 Q5 ^* L- l! j2 I
  479.       else2 M# d! _. }: R) x1 P! b4 z5 `1 ^& j+ V
  480.       {9 P) F2 S) V& _1 a- X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! O" ~7 O2 i7 s+ X9 _
  482.         strRegsName=DEFAULT_REG_URL;& v* L  L: n9 ~" b7 V; B7 X
  483.       }! h& I; G/ l0 p- l
  484.     }
    & `! j. {( l. ^+ j$ u1 R
  485.   }; Z0 [9 H2 M' d7 A$ u3 B3 f
  486.   return true;; U3 R: [  b. M( z
  487. }* E+ e! C; @8 @7 T# |% P

  488. 1 X6 M0 E! L8 T1 [
  489. #include ".\ZLib\unzip.h"0 a" A7 L4 g: B9 F+ N0 p. T" h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 b' Y! e& c8 S' I' [
  491. /////////////////////////////////////////////////////////////////////////////
    3 {) c: |7 _1 G- I
  492. // CRevAppApp initialization! a1 D3 s$ p+ _0 t

  493. 3 I8 i1 [  x& H. ]- f
  494. BOOL CRevAppApp::InitInstance()* }3 O+ g+ N" l0 h- A# c0 C' {
  495. {/ H6 s+ S* O+ K# V4 B! S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" q2 `0 O% n9 z2 m& H* q% @% z
  497. ' F' Y* @/ X, i7 E5 {* \# E' J' T& ~8 J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ t! D: A- _! ~& B3 Y0 u
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 d# S" O$ r$ k! }
  500.   {$ w! s5 N+ M0 E% I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 M9 i4 o  d) K- M7 h  P3 T4 ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 }0 E# Q/ s* W) K' ~( l3 L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " U; k3 t0 S$ P3 p! b1 y
  504.     {+ {" d: x, ?) q# g4 \! x9 L) A
  505.       strcpy(szPath,szPathTarget);% n! b' g7 T8 h; }( s3 s
  506.       SetCurrentDirectory(szPath);/ Z. e6 e, i5 Z8 w! p; f; R4 c# A
  507.     }& I) a% y  J( e+ B6 h/ p
  508.   }
    5 y5 M1 n4 v3 q8 V
  509. #ifdef _DEBUG
    / Z! V0 d3 V' ^6 Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " L) c5 M" n5 v# d6 R( s
  511. #else
    * L4 n, ]1 A- j  ]; r( c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); K% o- ^9 H( S/ ^- ^
  513. #endif
      m' |* o! e4 s& T( B6 C  D2 l
  514.   {5 a8 ^3 @( s0 v( m, ~5 n9 W: y
  515.     char tempFileName[MAX_PATH];, Z+ m4 p0 ?5 U% j, {% i
  516.     strcpy(tempFileName,szPathSource);" }2 A6 k% z0 R. _5 q
  517.     tempFileName[strlen(szPathSource)-12]=0;  t6 H2 ~3 l( T+ g5 o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 P9 n, `5 l6 S6 f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' @$ W( e9 G8 O2 c" Q! {1 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  F9 O8 e2 t5 \+ L4 G9 E( z
  521.     return TRUE;
    ( [$ \+ s4 i! i% b, F- p
  522.   }
    : e% R, T( v7 Z- {' o
  523.   // Nuke 0118: Delete run.exe
    ' Y' _6 o: p' ^. O* l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" q. c9 C" Q2 p* E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; }- r  W4 M. z. J2 t; d: F3 `
  526.   if(!ReadCfgFile("Config.ini"))
    - A9 u* d" i  ~
  527.   {
    : a) H1 D7 N. X" I8 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : A. W- G( W! K
  529.     return TRUE;- r2 s7 O% U& ~) s6 |
  530.   }! Z: z( p5 q# s. q2 @
  531.   HANDLE mutex;
    7 H% G! D: w9 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : M8 u5 t" u- Y7 Y2 w0 ?
  533.   {
    , H) O7 w% Q( Z1 {5 `- a
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 L9 d! F0 Q; q: ~* u
  535.     {- D& _9 N) B9 M6 F. y
  536.       CloseHandle(mutex);# L6 d: W5 W' i: S; b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * H. a- G( |  J4 v
  538.       return TRUE;8 P# J2 X; U# m2 f9 X" s
  539.     }; K' Z( |2 U6 [
  540.   }  
    & O$ i( u6 R) o2 x
  541.   CloseHandle(mutex);
    % E- C( A0 c% Y2 W. ?
  542. & |. }7 b% q! B2 X6 l5 r8 E; f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) y1 L9 d) u7 \' F+ W+ W
  544. 3 _& D& n$ F8 z3 A
  545.         AfxEnableControlContainer();
    6 K$ r& G2 l9 t4 R9 V: v6 A1 e4 Y

  546. ! b; s- D7 Q4 K3 Z- G' j7 J
  547.   bCanUpdate=FALSE;9 {2 c7 `7 @9 D' m. D
  548.   dwStartUpSteps=1;
    6 b% K  Z) }5 }& o3 [8 L
  549.   dwProgramState=AP_NOTHING;, A* D' f# b* b$ F" I* Q# v8 }) k, n

  550. $ K$ B4 u  {) W$ {/ P4 h! J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( X5 ?& y& l6 ~
  552. ; o, M! m9 o) ~. |  K
  553.         // Standard initialization
    9 z& c: S! t) z; t5 J6 u" m# I* M$ e
  554.         // If you are not using these features and wish to reduce the size3 ], }. v& }( W: c1 ]5 p3 c
  555.         //  of your final executable, you should remove from the following  I9 C3 q! K* a$ R
  556.         //  the specific initialization routines you do not need.
    # [% O/ s$ T8 E) O# U
  557. 7 j& e: r/ `' H7 E7 y- ]# L1 z* K2 Q
  558. #ifdef _AFXDLL
    - R% U1 j  b( }; C$ ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & o; {2 U2 r, u5 X0 K( W
  560. #else
    / y, [! c# [$ D% t$ R/ r7 M* t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + q# P8 z; G& t
  562. #endif: _7 {- C  {: r0 t
  563. 3 O8 x9 }$ B/ [7 e; k7 P
  564.   dlg=new CRevAppDlg;
    / O8 Z" }1 \- D, C8 \' R
  565.   dlg->Create(IDD_REVAPP_DIALOG);- Z) b5 V, w- Z1 y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; F* F5 f) w9 a( h* f
  567.   m_pMainWnd=dlg;
    ) |) Q1 u+ M* z4 R& [- t. X, N! B0 @
  568. ) O1 g5 B3 l  c7 p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 o; Z+ F4 Q+ p- g& K

  570. , C& |! d+ e. t$ ^+ t
  571. //  GdiplusStartupInput gdiplusStartupInput;! {* r1 A; a6 @8 p$ v( Z- \. h3 k
  572. //  ULONG_PTR gdiplusToken;
    ; F. _0 Z9 V6 G$ _' i  z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! T) R+ L6 U% H& N9 w7 a3 @2 ^

  574. : B& l' ?3 Y3 d" U7 V. [& E
  575. //        CRevAppDlg dlg;' C8 @+ ?  M, {5 X' ^8 W
  576. //        int nResponse = dlg.DoModal();
    4 L; U; U) B6 }1 B
  577. //        if (nResponse == IDOK)
    # A1 m5 p: {; D, n0 d! H; @
  578. //        {: K6 ]7 M4 k) b* }. d* [5 V
  579. //                // TODO: Place code here to handle when the dialog is2 R  S9 U! r4 g( W( j
  580. //                //  dismissed with OK1 s4 l' j2 ^* ]6 W- {
  581. //        }( ]5 Y' |$ X( A- R; I
  582. //        else if (nResponse == IDCANCEL)
    , ?% f8 X" c, L$ I4 D3 z5 v) }' q
  583. //        {
    + F' e( Y, p, |* }% m% E9 P
  584. //                // TODO: Place code here to handle when the dialog is: J& W1 n! c  [. @) C
  585. //                //  dismissed with Cancel
    3 j/ K7 k# G  d+ o
  586. //        }: N( r7 \- P1 X: J* n! f
  587. . I9 w- s" e' s& }! r5 A  F9 n
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ @8 O/ N6 |2 d; A. [
  589.         //  application, rather than start the application's message pump.5 f9 L! n, ^! B) v- p* S- _
  590.         return TRUE;
    3 l; x" b0 i6 r' y/ N8 Y
  591. }6 }! w3 m4 u" o
  592. 5 M. k" F. c: r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * i- p5 ?2 B+ l
  594. {. V- l5 _; @/ j3 {& `( C& {
  595.   int i;) l$ D+ G& g$ }
  596.   char *szRet;: F+ T$ e, I5 I, K8 w* q4 t

  597. 8 A* ]5 r2 I: K& j# a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % x7 u7 Q3 w1 }$ Q
  599.   if(sztoken)
    ' Y: W4 |$ T2 o* j4 M0 ~, \
  600.   {. i* y( w6 u5 t& {( W
  601.     szRet=&sztoken[itoken];
    + d- e4 c+ q3 a1 {; _, d
  602.     while(sztoken[itoken])- j) _0 N7 Z  L+ q4 |- E
  603.     {! X* ^& Q# r5 q% c9 m$ j0 e- i
  604.       for(i=0;i<(int)strlen(token);i++)) P- {# H, K7 o# [
  605.       {
    # c6 U5 ^, y9 P- ]. y$ }& g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])! U' d; T9 X5 F$ z" Q' C$ o3 _
  607.         {/ W3 X: y8 r: c+ M) `1 C
  608.           sztoken[itoken++]=0;# o1 j' o  n6 U9 o9 n: E
  609.           sztoken[itoken++]=0;
    7 J( x$ Y0 j+ [* H7 R+ J# |5 K
  610.           return szRet;
    $ i" c+ O" c6 D4 X& J
  611.         }2 f+ a3 D  ?/ q; c, a# N* x% L
  612.       }9 k) r# i" X7 G# E3 s5 J+ O; o/ J
  613.       itoken++;
    7 S' U5 U! Z4 ]( Y
  614.     }5 |9 \0 ?5 V  A& F
  615.   }8 Y* b, _- p/ ^2 c, `4 k
  616.   return NULL;
    ! Z; Z) t, @# d! B* K. q
  617. }
    4 Q5 m' N$ t  w( x! @: ?
  618. % S1 g" P* ]4 k
  619. void ProcessProc(long Total,long Current); s  X) F! I/ E1 n5 I
  620. {
    8 K/ v7 o& v% S0 y
  621.         MSG msg;: I: J3 l0 \, U$ v# l8 H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ W8 @2 `. N- k8 a, p$ ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 t- h8 c8 ]7 g9 V0 Q: B7 P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" Y; d0 R$ i/ t3 C
  625.         {
    ' R# s' x) K3 g5 b+ z4 ]; L
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 }- U% p" A" k1 R( D
  627.                 {5 C1 W: |! h8 H: j3 @
  628.                         return;4 X% f+ f' T$ b- z+ \& Q& F
  629.                 }9 |+ v7 g6 _8 T3 {5 s* ~0 `
  630.                 TranslateMessage(&msg);6 k3 r% ^/ O0 u, p/ g& k* \
  631.                 DispatchMessage(&msg);
    ; R- s0 R$ B8 F6 U  S0 C# k. `
  632.         }        1 }. b/ z9 N/ X3 H- p; k
  633. }8 T8 J) J0 ?$ r  ]( g. n- W' u

  634. ' d3 l1 T. e$ V, X( x  k$ y, b& {$ m/ B
  635. BOOL bFirstChar=TRUE;& z5 F' ~. w2 [: h( M0 V
  636. ; W. H! k2 W# p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % {' w4 I$ x# k8 e
  638. {% `4 ]* M+ C( Y/ U5 ]
  639.         // TODO: Add your specialized code here and/or call the base class" B$ k" Q' K( E( H
  640.   switch(dwProgramState)
    ) A2 b+ M' u: ?) u( O
  641.   {& J$ V# [$ F0 }- O2 D* ~
  642.   case AP_NOTHING:2 {, p* K, h5 _2 O$ X. A: ?7 C
  643.     switch(dwStartUpSteps); r1 D7 _# x7 g3 P: g& S& ~: J
  644.     {, H4 u/ \/ D9 F% `( v/ V3 E
  645.     case 1:
    ! A; [% `) o5 h9 Z4 |0 R% K- E
  646.       {' C% _6 H8 ^4 h( B6 h' f
  647.         int i;
    + U1 r0 C5 v, O4 d4 J
  648.         CDC *pCDC=dlg->GetDC();
    " q2 N( ]2 O! [3 }1 e' o; a
  649.         HDC hdcwnd=pCDC->m_hDC;
    # b1 {* h$ B5 T4 r! o6 ^% [* c
  650. //        Graphics graphics(hdcwnd);
    ! E0 J: A% `- X/ d0 h! R2 A; }% L% Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! f4 X' S1 U: P8 B/ x" a' D  H
  652. //        INT iWidth=bitmap.GetWidth();- f4 P, z) A& [" ^6 s
  653. //        INT iHeight=bitmap.GetHeight();7 b( h* \% y! V
  654. //        Color color,colorTemp;
    / F& Y1 o0 \" T6 y4 S
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' g& N  P: N( A
  656. //        {
    * H! E, q; o8 c6 U# m9 o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' Y  s0 c( [& f' x; o
  658. //          {
    8 L1 a0 p* ?+ L* R1 r& `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 i6 f7 E2 r! h; s' F* \
  660. //            colorTemp.SetValue(color.MakeARGB(  i: q! I( m2 Q3 d2 I
  661. //              (BYTE)(255*iColumn/iWidth),0 j/ J$ I- G5 ^0 o/ r2 \
  662. //              color.GetRed(),* x  @! Z6 f) [8 Y
  663. //              color.GetGreen(),
    7 ]' T( d2 q. l. {$ S$ @# j
  664. //              color.GetBlue()));, B: k# ]8 M  M+ ~; z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) \3 C0 a3 `/ ~  p( c( Q
  666. //          }
    , u8 Y0 {" G* M& l8 H
  667. //        }
    5 f% k. k* E# ~) ^$ t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! V/ G4 R5 v4 i  Q* T# i7 s$ \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 I, t, U" F2 k8 Z* m7 G' X5 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : c1 @1 _& ~7 M  T0 z+ ?3 w& ~4 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 j3 N  q$ X, \! _6 O7 u4 @* n. }/ n
  672.         for(i=0;i<240;i+=8)1 A. n' U7 e/ b& z1 s  g
  673.         {1 X; X0 C2 c. L) Y  ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) s5 ^8 H% n& Z+ z" T$ }' u' u
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 ^+ P- a2 y! d' n+ w- x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" Q/ e$ ?1 P+ t4 ]
  677.           Sleep(33);# q3 X: {/ b7 O% @4 o3 |* B
  678.         }
    # p6 t; [, @6 X
  679.         Sleep(1000);# H  l, U1 d3 M$ r
  680.         for(i=240;i>0;i-=8)5 H2 a  B. p+ {! ~; c8 z; ~
  681.         {9 ]. |7 t" S5 c7 a/ R. s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 q# l" I" L7 V" A) V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" h" v- x) O" H7 m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* G( o# [6 m9 _" j3 |+ y' s8 j
  685.           Sleep(33);
    6 C  |; E- U- X' B1 c9 s! f
  686.         }2 Q# _, e( B( w+ _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);" E( f+ G. ^5 y2 U; L7 {
  688.         dlg->ReleaseDC(pCDC);3 Q* {# h# V9 e
  689.         DeleteDC(hdctar);
    + L, a' a# I( Y6 H* O% g3 ~4 E2 z8 }
  690.         DeleteDC(hdcsrc);
    ' r; @6 D6 o" ]. U( Q: ^
  691.         DeleteDC(hdcorg);
    5 e, l2 v7 F: ^$ ]1 i1 Y1 d
  692.       }# v* n0 c* N) ]2 h7 G1 g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + P) j( m& ~  C; ?4 ^; A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* e( Z- f9 }" G/ i. n) s1 [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& Y& e- G7 w9 H; E4 t1 y5 Y9 D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . c0 ~6 H9 Z- `4 z- W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : n6 m- }1 L7 ]7 q2 W
  698.       if(!Dn.Connected())
    0 S- ]# E* F0 n
  699.       {- q6 L' {; W) X3 @; Q
  700.         dwTotalFiles=1;
    : G, C3 C8 a* j* r! U9 R2 h
  701.         dwDownLoaded=0;: r) Z1 J/ e  ^, @+ z" ?
  702.         bSilentStep=TRUE;
    9 \& B  z; B2 O$ G. o! T
  703.         bCompressed=FALSE;3 m4 h! V8 M2 D) `* ]
  704.         strExtLocal.Empty();' ]: P3 n6 o3 h, }# K! e2 T
  705.         strFullName="readme.txt";# L5 T& v! t0 P$ [) U! `
  706.         dwProgramState=AP_CONNECT;  N1 h7 q& [7 V" Y' C
  707.       }
    & s3 B+ L# s& |# Q! Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; x: C# f! H6 ]! Z0 D
  709.       dwStartUpSteps=2;
    2 q9 u) r0 r( L( i7 E' I
  710.       break;3 i4 [1 z4 I9 L2 Z
  711.     case 2:- R9 K+ Z% `& x/ Y3 w! f
  712.       {
    * O8 a* j0 e' c% v; \
  713.         int iEOF;
    7 q9 m8 X8 l: G) ?+ L1 N- a1 q
  714.         FILE *fp;; C5 Y1 ]5 X! L" s/ Z& z, Q5 b6 z: ^
  715.         char szString[512];
    + J" y  R# x/ H; Y7 Y* b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 Y  h1 F9 L* n9 v0 @6 ~1 P2 \
  717.         if(fp)
    $ _* I: |2 G( `  h
  718.         {
    5 p" f3 ^8 O7 x) ^$ U" X
  719.           do
    ! w! A4 z6 [* p7 E' E  a
  720.           {) H- M" G" }2 X3 _& g
  721.             iEOF=fscanf(fp,"%s",szString);
    " n( S& @# W$ V4 l! _% q
  722.             if(strlen(szString))
    6 Q7 ~' ~5 B3 v7 A+ I
  723.             {
    & w% V4 }# K+ I  z6 f
  724.               if(bFirstChar)
    8 k9 g' Z3 d  K
  725.               {
    2 `3 h1 ?/ w2 R" i4 p% `5 s
  726.                 bFirstChar=FALSE;& h. S( L) [4 d' O$ P# F
  727.                 bConnectIsBig5=FALSE;
    ! y2 K) e0 z# D8 i$ X8 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 T. d; Y  N$ k3 n7 Z
  729.               }" y/ f7 k( A3 _3 ?$ A6 Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . B; N9 b3 M/ F) ~) v" `& A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' R9 ]! y0 Q8 _# @; _7 W& v
  732.               dlg->m_ListText.AddString(szString);
    $ F9 o& P, X/ ]2 }/ h' O# F* C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& l& B+ C0 V0 V$ k
  734.               *szString=0;
      [/ f. b0 t* ~0 Y
  735.             }. v, ]2 w; O$ n, z
  736.           } while(iEOF!=EOF);, F1 T, K3 k  n8 I& A
  737.           fclose(fp);. S6 h2 L8 Z6 M- z3 ?$ V3 r2 P9 ~
  738.           unlink(".\\DownLoad\\readme.txt");9 b1 o: B* \0 o* F4 p# H( ~
  739.           dwStartUpSteps=3;% p, F* P7 A, |4 K
  740.         }
    / |# F4 a) v7 Z0 J5 Y) h, C
  741.       }
    9 W  Y( Q( d' Y7 w+ V: L
  742.       break;0 Y8 B! j  p) `. a+ [, N, H
  743.     case 3:7 }' T% ~, {, N9 y; P" H( \
  744.       if(!Dn.Connected())
    1 g4 u3 z" A; K3 w; H7 n
  745.       {& S, v; ^! n' {( u
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 e* y1 g, M" l* y; K$ [$ _7 l
  747.         dwTotalFiles=1;& a5 |$ j7 q- _
  748.         dwDownLoaded=0;
    ( R5 O2 P, V8 Q
  749.         bSilentStep=TRUE;6 ?1 o8 W) A3 H8 n
  750.         bCompressed=FALSE;
    % Q, H  r: f7 w; ^
  751.         strExtLocal.Empty();$ l) f7 D! G3 Y% M
  752.         strFullName="checkversion.txt";  X  D" Z6 _/ U: K, G
  753.         dwProgramState=AP_CONNECT;7 g% }( q4 G  b! Y. B: `
  754.       }
    ) R7 N  L3 b- D/ L9 ?0 b
  755.       dwStartUpSteps=4;6 ^+ e: r. x9 F8 C8 ]* I
  756.       break;& V# y9 p5 B( j: O& }1 l
  757.     case 4:, k% o  R- E3 ]2 t8 l  J
  758.       {
    " I4 p. Q/ h7 D8 f0 P% X' z0 Y
  759.         FILE *fp;% W6 \. y) E! m
  760.         char szString1[128];
    . A' Z9 u$ n, g$ n* o0 J0 _8 ?. l
  761.         char szString2[128];2 c, Z+ _/ b( i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 Q& W  M9 _+ V9 l% A8 L
  763.         if(fp)
    + i+ V; ?' a; h. G( ^) p- u
  764.         {5 S. }2 G2 ~) S5 n
  765.           fscanf(fp,"%s",szString1);
    6 g8 `! s8 p2 i; M  n
  766.           fclose(fp);
    0 `3 J, l( t! d4 N0 V4 j
  767.           fCheckVersion=atof(szString1);" K5 E; `$ I) N" F; Y% N# C
  768.           fp=fopen(".\\checkversion.dat","r");
    6 q" o/ P% E/ F% W' X# Z5 z# U' e0 z
  769.           if(fp)
    ' s6 r7 R2 @) E3 M+ w, d
  770.           {
    * v) u3 j4 T+ l  f
  771.             fscanf(fp,"%s",szString2);6 `7 U% g  F; y. m" x8 z
  772.             fclose(fp);3 ~) s) d+ p2 b
  773.             if(atof(szString1)!=atof(szString2))
    ! l" |( U  {5 a# D! d- e" x9 R
  774.             {
    7 l- |! `8 `4 A; Q. G1 g
  775.               if(!Dn.Connected())
    - B: g, |% Y5 c2 J1 `
  776.               {
    9 q- C  ?& W4 U4 p9 S
  777.                 bFirstUpdate=TRUE;# ]; h3 G8 Q* b9 c
  778.                 dwTotalFiles=1;3 W# K1 b/ ~9 {6 V! w& r$ \
  779.                 dwDownLoaded=0;$ _+ @9 S& V, }& m1 U$ t  B+ U, A1 v
  780.                 bSilentStep=FALSE;4 q2 V0 x2 _' g! I8 w6 K
  781.                 bCompressed=TRUE;) H- a8 d( M! }, t
  782.                 strExtLocal=".\\DownLoad\";
      l% D* g4 H( |
  783.                 strFullName="update.txt";
    ' j2 _0 T, M( v( U; F: P$ K: `( D5 k
  784.                 dwProgramState=AP_CONNECT;5 o7 {" u* A  y; z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" U  b- a: a3 m! y. D. P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 ]( B5 H/ q$ V7 t  r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' B2 W( C! P9 |  b4 b

  788. 7 R/ I3 |. O9 A# l  v5 \5 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 a, @- o5 u3 s, }6 `
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , ~, e) P2 c6 d3 O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) o/ p/ f! c7 w; s
  792.                 {6 h* h! \! [0 V3 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 o( U1 R* n6 Y/ h% v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    6 d6 L% L) e4 q" _  D6 T
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ M  K  g5 b' ~0 g) e& r: \* F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 n: \/ P, L( E0 u+ y- Z

  797. + u- v9 |( U) ?' x6 d- q  g/ E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ V/ o. }. G( j8 q( H8 c$ U+ @
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ \3 t3 g: J1 z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    8 f6 t/ {9 u2 g# \, X+ L
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 [* }1 L- l6 ]6 I2 v8 Q; |
  802.                 }) k7 i* Y9 h0 o$ E1 T
  803.                 dwStartUpSteps=5;6 B( p+ b) m. T% C9 @) _
  804.               }
      s: ?" @: O8 s' W/ A' E
  805.             }
    ) }# b# ~' G# E" |
  806.             else! s! }- G# ?  w- z0 t
  807.             {' c7 ]' _9 G5 Z
  808.               unlink(".\\DownLoad\\checkversion.txt");: ~- ?3 |1 q* j  r% j6 ^6 Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& }' R3 @' Q  i9 L" l9 l5 N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , J$ W+ R& b; g7 j+ X  c: a: k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 f) r+ \3 ^# @; D& |7 U' g
  812. , g5 ]( j% c% `3 f" P6 G
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 {5 o, C9 a, t8 F  E- U# J$ M; l
  814.               dwStartUpSteps=99;; i8 |4 ~( V( ]5 Z! `/ a
  815.               bFinishUpdated=TRUE;
    ; y4 a# f3 `2 O$ B$ \
  816.               bCanUpdate=TRUE;: d! \) x; B0 R* p7 `
  817.             }
    3 V% O$ H& W8 w& H$ c8 g! d. k
  818.           }- \. J; F& Y1 I2 _0 A
  819.           else
    3 c4 N( ?* l# B* q$ p
  820.           {
    8 S/ [2 ~* k! _7 f
  821.             if(!Dn.Connected())
      X: X8 f- x* P" h3 u1 ^. E
  822.             {7 h; z4 v9 y' H" v
  823.               bFirstUpdate=TRUE;  g  T$ H0 D" o5 ]# l/ y. U* g; y
  824.               dwTotalFiles=1;* T" O% p! F0 x  \+ X
  825.               dwDownLoaded=0;# h7 }1 ]- z7 ~
  826.               bSilentStep=FALSE;
    ) V8 x5 F1 G6 k7 P7 Q
  827.               bCompressed=TRUE;) `( z' I4 @# m/ c
  828.               strExtLocal=".\\DownLoad\";
    ! X& W6 [9 z1 z1 N6 i* A2 Q  ?, Y
  829.               strFullName="update.txt";3 `! q! Y6 h+ J# T$ C+ `
  830.               dwProgramState=AP_CONNECT;
    " p# i3 `) o5 K5 [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( z! h  q( u6 l" b5 J. X6 X; g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 T' K0 b* G7 ]3 B8 A
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; g; L4 G/ [0 Q  [3 q1 @7 ]1 Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. i6 _' ~( T. g. g9 o% I, @& T
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % {2 g3 ^1 H; i& t0 b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)! i- G( I. o. n. p  `% z* K7 N! r$ I
  837.               {" ^: s3 k" L# T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! {0 b. ?9 O4 F0 {8 c; l/ d, P0 y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + k0 H) J7 C! K, @' A0 _3 t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , N8 l/ J2 b' C; v8 K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " R) E4 Y. \9 l! L% |' `
  842.                
    9 g+ R1 M7 w" k1 n0 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " A# `3 b+ E0 j& I/ r- M" n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; \) A* T8 z/ t5 U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - O$ y& |6 P2 B! n. [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 h. @: e  d7 |+ x* ?8 ^5 ~
  847.               }. e2 ~( n* y( |1 _% @! d
  848.               dwStartUpSteps=5;1 d8 ]- c! ]& p4 E! \0 H4 n
  849.             }! c* g3 }$ M" B# g( i  D% c+ d
  850.           }8 o( d- C" ?8 f9 a, P* p" G
  851.         }
    " i7 H6 \7 l, f
  852.         else3 c: v9 ^/ X6 o! B
  853.         {
    ! t/ w- X: w$ s7 q3 s
  854.           dwStartUpSteps=3;6 f" Z; k* P0 p$ S! l1 n
  855.         }
      f2 M( e4 \: P
  856.       }
    : ]3 ?1 P. f  k7 D
  857.       break;" b, ~2 h: `/ r' r, n
  858.     case 5:
    7 {. z+ k, r( w' h0 ^
  859.       {
    0 O, t) `  U: o* P* K5 V( r: I( ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& s# d/ a! Z9 M" f8 f. N
  861.         {) r- V# G5 o/ Y5 u/ j# p# I
  862.           int opt_overwrite=1;
    1 i4 r: e  Y! B  S! z' B8 i& R& L
  863.           int opt_do_extract_withoutpath=0;& L$ T' D. t7 f8 w& E/ M5 R% d: a
  864.           unzFile uf=NULL;
    6 D1 X; w' |. o, t
  865. - I5 \. T) ^$ J) F& k% Q( g" e1 A; I" }
  866.           uf=unzOpen("Wsa.zip");
    2 S, y% s$ y9 U
  867.           if(uf)8 Y/ l1 M+ S" {0 d6 P, b, i
  868.           {& N% u, e: V3 N' s7 c; \( l
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 o. f( L( ~  n& t" M. {2 d( e
  870.             unzClose(uf);/ `7 T/ Z) W2 N, O; u" W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");- S/ U) K- a" H
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; A. B$ u: a6 {6 v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, C+ a3 }+ s8 W: X
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 M& y0 ~. Y. Y" v2 D2 [1 R
  875.           }
    + r" Z" L4 l! M3 v1 M" d  `
  876.           DeleteFile("Wsa.zip" );# A4 D+ S+ {$ @1 h9 Y# w8 A8 p
  877.         }
    1 D& b$ n# u6 _) Z6 H( W

  878. - g' x3 ^: C' s  c, m3 ~
  879.         if(CheckLocalVersion())% [+ ]! F  i$ U$ j% T
  880.         {
    % p4 k9 X/ q8 c5 `2 P
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");& |4 O4 c/ n9 W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");) M9 W9 P; y, [8 i$ t
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ; i  s1 i$ {: F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' n2 k; z8 [* l3 I9 Q5 e0 \8 Y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    9 j5 R4 S' X/ M% Z
  886.           dwStartUpSteps=99;
    " e3 N5 @; @" z$ M& U; s
  887.         }
    7 j* u" s) b1 J" R
  888.         else
    . r+ _$ S* `5 X. D
  889.         {6 D5 t  p, u3 ]% U+ V
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; E5 w$ x; _1 A$ R& ?) {5 }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 @. L" \0 d1 y5 P" `; U4 [4 g! [
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");& h! ~) P0 W1 p, [& h% W

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

. {% Z& q0 }, Y. q
3 G. \9 {& n) V" H2 S7 \* d& ?

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-30 20:36

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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