CSUpdate.exe源代码

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

3 r7 D# l- h9 Z" r6 K0 Z9 q
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 V3 f& c$ _: F2 E9 C$ O) u) V
  2. //
    ! A- ?) j* A* w2 e, L- H- [+ u

  3. * g2 R- X% q. \4 d3 S+ Y1 R
  4. #include "stdafx.h", t5 [9 O* q) F  n: ~5 ?& ?- A
  5. 0 V) h5 ~' H/ u+ ?0 E# i
  6. //#define UNICODE
    7 D1 Q- D) k3 f. [" C$ o
  7. //#include <gdiplus.h>
    3 V& {  J$ ^  B9 }+ k
  8. //using namespace Gdiplus;* ^* D$ F% c& `: p( K/ G3 T9 P8 V
  9. : A( I6 P( T9 m# ~1 v
  10. #include "RevApp.h"
    : l4 r; o, N( D
  11. #include "RevAppDlg.h": S  d: @/ j5 `5 I9 W
  12. 9 X4 K3 H8 t0 q
  13. #pragma warning(disable:4786)
    * s! Y1 w# N+ @* U: O7 z
  14. #include <map>7 X! W9 k. \" ^  i/ U. F6 d
  15. #include <list>
    , u( A, e; P! H! L% a9 s
  16. #include <direct.h>9 x* c- E; ?9 E  Q$ _

  17. % a7 {+ Y* X0 r7 `
  18. #ifdef _DEBUG, C, O# C  |8 S4 v
  19. #define new DEBUG_NEW
      j' k  \2 ^& P$ T' ^' K, F1 [
  20. #undef THIS_FILE
    : _! E& X  C0 O% Y" G+ U
  21. static char THIS_FILE[] = __FILE__;2 J' G/ r4 M, v3 J
  22. #endif9 t/ u- X1 M: {+ B
  23. #include "SkinResDef.h"% d/ q& J+ c0 @# D0 s. W$ D8 p
  24. #include "ChangeBG.h"1 V5 n9 Z8 X" M) N
  25. #include "AFXINET.H"
    + \- S0 A$ n' `3 J" p3 R8 x  O# ^' v
  26. 2 N5 f9 D7 F, o' h
  27. #define TRADITIONAL_CHINESE 0
    2 ]+ `1 }  X+ R5 v) o  s, K
  28. #define SIMPLIFY_CHINESE 1
    6 J0 A# ]2 |, |7 \6 c
  29. #define ENGLISH 2- V& @7 O9 |3 d4 o& M
  30. int m_iLanguage = ENGLISH;, P( [- O0 s( y  B5 l
  31. /////////////////////////////////////////////////////////////////////////////
    / [+ k) a" P: r& c: J  O# X
  32. // CRevAppApp, v' C& ~# @- {( F

  33. : }! R2 D6 I! i. g* y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 ~) c! c% f4 A- U: @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . C. S0 H8 C& j& T0 |( V" I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    8 q- q  ~" d, n" M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 I7 l- x- r( |- C0 t
  38.         //}}AFX_MSG% E2 Q- n& Q" k5 h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / L( E# n% F) Q: O
  40. END_MESSAGE_MAP()
    5 D0 |) w' ~, b5 k' y
  41. , i8 S  u6 s1 K& h
  42. /////////////////////////////////////////////////////////////////////////////. {% j9 W  b1 V; M' U
  43. // CRevAppApp construction
    & \- V! m/ E; R9 B

  44. 1 V* t8 T& l2 ~1 g. y! N% F9 R# R/ C
  45. CRevAppApp::CRevAppApp()% \5 d7 j( K* F& n
  46. {
    3 P( y& [$ ]2 r
  47.         // TODO: add construction code here,3 L/ s$ C' \( X2 x+ a: D
  48.         // Place all significant initialization in InitInstance
    + z6 u# C' _4 t. z! u) }
  49.   bDisplayIsBig5=FALSE;, P/ R1 t# G) I
  50.   bRestartUpdater=FALSE;, Q+ u. d. [) Z
  51.   bFinishUpdated=FALSE;
    1 E+ Z2 d8 V6 v2 [" Q) L0 `9 r" l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  @7 j8 U8 V5 E) s! i1 v7 j" ]
  53.   InitChangeDataBig52GBKS();( Q1 ^( b9 b) V
  54.   InitChangeDataGBKS2Big5();, m# Q8 J( y6 @) k. v2 i$ u
  55.         //( X# S" R) R  q6 I( w. i
  56.         bClickRunExe = FALSE;5 U" h2 I7 _6 I1 h
  57.         //
    0 g/ T+ l  U4 k0 e. k9 a6 b
  58. }: r" h$ n) z: A
  59. / m- U$ q# k9 y" W
  60. CRevAppApp::~CRevAppApp()
    / ]( }3 g0 d' @$ m! Q( M
  61. {
    1 }2 L9 L/ K' ^; L. A( x' C
  62.         // TODO: add construction code here,- \8 v; {' b* l
  63.         // Place all significant initialization in InitInstance9 z; T6 L$ x/ R" `% I) t9 l) s
  64.   EndChangeData();
    $ M+ x5 V. S  I
  65. }; d5 D9 p3 ~7 Q  M) C# T( L! I$ I

  66. ; E7 q( w" A8 U
  67. /////////////////////////////////////////////////////////////////////////////" m0 i; I; O4 R0 @
  68. // The one and only CRevAppApp object2 s; [$ |# U9 s0 B. u  L: u
  69. 2 ^% b$ v: c  W- i$ }, u3 F- O$ C% Y
  70. CRevAppApp theApp;
    ) I  n- e" ~  x$ D) T* U* a  Z
  71. " Z" ?9 F2 W: O9 }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    + r' p/ U( m6 Y) o5 {
  73. {
    9 O3 x: ?2 H4 N! Y& w; P
  74.   int iEOF=0;
    " y# |# X" Y' R
  75.   char szTempName[MAX_PATH];; Y1 `7 B, w( P0 O4 C8 F0 m
  76.   *szFileName=0;
    4 a9 |/ y; C% \7 ]8 v
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( j1 r/ M9 s. E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # P8 {2 a  g" a# M9 e. e1 }2 z
  79.   {
    ! C2 _9 a) ]4 x7 z+ d. @
  80.     strcpy(szFileName,&szTempName[1]);
    4 ?; q1 q  s! C  G$ s, h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 A0 n0 g1 o/ D
  82.     {$ d$ O: T' Y0 ?( A. ?; b* |0 B/ N, e
  83.       iEOF=fscanf(fp,"%s",szTempName);/ Z1 k1 p8 ~& e' J( `  B2 D+ B# _
  84.       strcat(szFileName," ");
    8 s6 x7 ^/ t" Q$ E$ q3 @
  85.       strcat(szFileName,szTempName);$ g# ?4 a, y( x7 ?# t' j* o  B3 T
  86.     }& o  m. c% U; O9 s0 S
  87.     if(strlen(szFileName)>=1)3 i, f, S" E' }- m/ S3 V
  88.     {4 Q2 A+ |4 H. @# k" j
  89.       szFileName[strlen(szFileName)-1]=0;" C  W3 K% `' ]9 z, E! \$ e
  90.     }
    5 s/ }# z9 {" x$ X' {5 p
  91.   }
    . J8 _2 F) w& Z
  92.   return szFileName;  w7 B' i5 S6 m
  93. }
    : L2 Q1 T9 }" A0 p( k5 }

  94. 9 H# e0 b5 L# \# X, T# |4 r& z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- f1 x" b  j6 Q
  96. {
    5 r2 q6 _- ]; s
  97.   FILE *fp;
    6 w/ ^. }% m& O# A* V2 W
  98.   char *key=NULL;
    3 [6 z" |' @% m
  99.   char version[MAX_PATH];; h' S3 N$ o" b' A- ^
  100.   LPUPDATEFILE file,olds;
    3 S6 D& f$ C$ \; c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , k: N/ d  ?' m+ X& E

  102. ! G1 t/ J' M4 H5 D; W& Y) c, v! P. H
  103.   UpdateList.clear();
    ' P; R) X! z$ e7 n6 m1 E$ v- p
  104.   UpdateFile.clear();% k, ?$ K2 L7 I) c  c- `
  105.   if(GetFileAttributes(filename)==-1) return false;
    / W% A  Z$ g. G4 \5 B5 B5 ~
  106.   if(!(fp=fopen(filename,"r"))) return false;5 Q4 A* N0 r/ Z8 z* T6 @
  107.   fscanf(fp,"%s",version);; u7 a* G, B) H: v4 ~* K3 g4 g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 W% l( F" E; s, c
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : G8 S' q# Z: |/ z! _
  110.   {
    * @- a- p' k/ v3 n) a. o3 J
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; S7 O) p1 q5 ~: J; }
  112.     fscanf(fp,"%s",file->path);
    ( [' Z* A; W$ P; b1 Q0 p( y
  113.     ReadFileNames(fp,file->file);
    : z1 o' d6 [8 X1 J+ @6 y
  114.     strcpy(file->full,".");
    4 \3 T' Q; Z( r( m) d& o# \
  115.     strcat(file->full,file->path);$ o$ \; D1 I% o* o  q* Q* n
  116.     strcat(file->full,file->file);
    * I6 u2 f* D! C7 j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; M4 A' e1 V! e% D! F
  118.     {1 _, A( Q# q2 R
  119.       file->vers=(float)atof(version);$ X; m4 b* ]3 j+ s. _  \. K1 l
  120.       UpdateList.push_back(file->full);
    3 o9 R. G- _- s% \. l  `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    % Z+ |7 P: \  p( i0 r. G# C
  122.     }# v( }, K3 U( I; N
  123.     else
    3 g6 Z, V+ P9 A5 H
  124.     {9 k  ^+ S0 q, }; |. j; g- s
  125.       olds=(*p).second;9 k, X. ?' p7 A
  126.       if(olds->vers<(float)atof(version))
    ! |6 z: @) c# A: C& S7 j
  127.       {
    , K9 M: H' _. e# z
  128.         olds->vers=(float)atof(version);! x1 X2 j9 A1 V' E; r, G+ G7 ]. L
  129.       }
    4 X% o3 g6 i: J# A9 A
  130.       free(file);6 E7 z2 \* Z* k% e5 N
  131.     }
    5 p7 a' ~/ |$ B
  132.   }- h& w% A: Z4 `5 B0 X+ m% T
  133.   fclose(fp);
    3 u& s# F' ]7 H0 @  x4 P: D3 e
  134.   return true;
    ; p- V0 _3 p# O; F+ A+ ~
  135. }
    ; Z  H/ L! S$ _; f3 u
  136. 1 j1 `: @/ d: N# E3 m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! `1 Q1 S+ c) C, {, u! _
  138. {7 K8 F1 q# H+ S+ m, K' ^
  139.   TCHAR  szFull[MAX_PATH];
    5 ]. f3 {+ i$ Z; p( L
  140.   TCHAR *token,*inter;
    " V+ a8 H( O3 P( n
  141.   *szPath=0;% o% ^, }: g) }9 \7 z$ v
  142.   strcpy(szFull,szFullPath);
    % K1 e5 l  t6 f
  143.   token=strtok(szFull,"\\/");! e# v$ y' L3 Y7 W. r% `
  144.   inter=token;
    : f, e' ?3 _. {% N3 y0 Y9 h
  145.   while(token=strtok(NULL,"\\/"))
    7 z+ _) a8 c; L, Y
  146.   {
    - E5 T% F* t# ?, B4 W
  147.     strcat(szPath,inter);* R. X( }4 i+ [; G( L
  148.     strcat(szPath,"\");
    5 U4 Z% c0 d. [* I2 B: O5 Q  [
  149.     inter=token;
    ) M9 o) L7 m. o  D. H
  150.   }
    8 z5 Y1 M& A, P4 h2 \! J) a4 D5 K
  151.   return strlen(szPath);
    $ [) n2 q3 P0 k, e0 _1 Q. M% h
  152. }
    1 V& F) I- n) q0 d, r1 D6 j
  153. 7 [7 B; Q6 Q. P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). T  Q9 {3 v3 G  |. |( |4 E2 |. ~
  155. {
    7 _9 v+ A8 |! d
  156.   DWORD attrib=GetFileAttributes(Target);
    # a% R0 d, F/ `3 Y1 u
  157.   if(attrib!=-1)
    4 D. M, R+ |+ K
  158.   {) ~" e& ^+ @; R8 [; w) d0 J" N
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 j8 ?- M; o- ~3 Z( I1 f' C( t/ }
  160.     {$ H# _- t: I1 z5 I1 @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 l* v8 c9 c2 @  L
  162.       SetFileAttributes(Target,attrib);
    - G  u. X) g1 d% q/ R
  163.     }$ I8 U4 \, U) n$ Q9 u. k
  164.   }7 B$ w( J/ k$ f6 A5 ?0 \7 S. H! R
  165.   CopyFile(Source,Target,Erase);
    3 u4 g4 u9 x4 I: Z
  166. }
    9 w* L; U6 [" I
  167. ; z. j' E* f7 Q. e7 Z  _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " A4 o' t$ l# z* [7 A6 B
  169. {
    & X: n8 f# H8 b3 i1 K6 Y5 {! `4 W# Q
  170.      FILE *fp;; f& n" y2 u, J' L/ q3 I' Y
  171.      char  szBuffer[8192];
    # B+ C- w, T9 O1 e  N" g
  172.   va_list  argptr;4 q3 v* s& J2 d! b4 x
  173. & N1 W1 X/ a9 z0 n, S- Y; J' [$ ^7 k) d
  174.         va_start(argptr,message);! z0 ^6 d7 ]% t: G/ f0 c8 i/ f- n0 r
  175.         vsprintf(szBuffer,message,argptr);
    ! K7 N3 F8 v5 l2 ?( [
  176.         va_end(argptr);
    0 G$ a6 X4 D8 @- K' Z( E. v
  177.   fp=fopen(FileName,"a");
    . J0 a; j. I! g2 @& t" x
  178.   if(fp); Y+ J, Y! j" S8 r4 y
  179.   {
    ' f# e5 [/ h4 e" X- c
  180.     fprintf(fp,szBuffer);8 \3 q& F0 E. b3 d& Q8 A1 e; \
  181.     fclose(fp);' Y9 I$ P+ D  G; d# r) p7 ]3 j
  182.           _flushall();
    . ]. ~8 y8 A" z* ]3 L
  183.   }
    ! {% I" h0 z# z* S
  184. }% W) l/ K& J8 E+ E
  185. 1 `4 R+ F* c2 d. e0 K: z2 }
  186. BOOL CRevAppApp::Fclearf(char *FileName)# F0 L8 Z3 x" t; Z* T3 [+ f
  187. {
    , q3 r. z6 R0 ?, y
  188.      FILE *fp;: P4 v: A" g' N; m. ^( U
  189.     DWORD  attrib;
    # w/ {# p* ]! e+ v
  190.   attrib=GetFileAttributes(FileName);
    ( G1 t% H% K# }- B
  191.   if(attrib!=-1)) v5 ]1 D0 k( i$ b
  192.   {
    , k4 l: b9 h8 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' ~: ?( D' H, L' Z4 V/ S: O
  194.     if(!SetFileAttributes(FileName,attrib))
    / s8 B6 S- [+ `
  195.     {
    ' N; _0 V' T7 F& ]2 H$ G
  196.       return FALSE;
    * y, O  G" y8 Y% g8 l/ }
  197.     }
    " N7 R( o+ A* x6 f# D# X2 K1 R
  198.   }( I8 F& Y2 X0 A) ^% `8 T
  199.   fp=fopen(FileName,"wb");$ _# C4 M; X' }3 q* O; N: V  V
  200.   if(fp)' z. T/ Z+ r+ m5 Y7 Y
  201.   {/ J' j0 r9 k4 c0 G/ E
  202.     fclose(fp);0 n' ~$ D5 B8 A. k; o
  203.   }- ~- T( U- f' A/ o8 G" t: a6 |
  204.   return TRUE;' ^3 p6 E3 v; Q3 M
  205. }7 Y& ~( h" b/ J$ P

  206. 1 C- `# K# P0 P) t
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . o4 T& D) |1 N" ]
  208. {
    - ?) \) Q0 A5 U, U7 [
  209.   char filename[MAX_PATH];
    * E% b. F, @2 W6 z
  210.   LPUPDATEFILE file,olds;
    " _- d7 S! h' M2 T
  211.   std::map<int,CString>::iterator i;
    2 Y: ]; G* g1 q. i2 I2 {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ v, a+ g& @/ l1 J+ p1 f3 N, I
  213.   std::list<CString>::iterator l;
    # A& {1 x7 K+ T, |. ~

  214. & c" l( r* [9 t
  215.   if(bFirstUpdate)
    ; s* i. I. I, {) y7 `; c0 u- q
  216.   {
    8 \% B6 B. t+ |) @8 Q9 c/ x
  217.     dwCurrFile=0;
    ; N; h, z5 o' m7 b
  218.     bFirstUpdate=FALSE;
    4 ^9 i' m( g. ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      U/ W! K% I+ y* D% n! R
  220.     {
    6 S+ E+ w) g* y0 Q( _
  221.       dwTotalFiles=UpdateLocal.size();
    - ~" Z3 \9 C' s7 ?" X
  222.       dwDownLoaded=0;
    2 h  X- C" H. W4 i' A
  223.       bSilentStep=FALSE;
    ! Z5 D% D/ v& H
  224.       bCompressed=TRUE;
    . r+ T/ q% O, a/ @
  225.       strExtLocal.Empty();
    & X" b3 A9 g: s" t2 j  ]
  226.       strFullName=(*i).second;
    + _- z8 ^7 L7 N" ^7 M6 h3 k4 \! i, r
  227.       dwProgramState=AP_CONNECT;
    ; C' m; y" I& E; G/ C7 m6 n
  228.       return TRUE;: x; C4 r) e$ f7 L6 y" t0 l* t% V" E
  229.     }
    4 m. u' m  [  {; x
  230.   }
    ' t8 s4 N$ r9 m9 d9 L6 S
  231.   else if(bRestartUpdater==FALSE)$ P0 K% R/ e* d3 X
  232.   {, P' y# j3 @% ?9 I$ s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( b9 M) q  N5 [. d7 Z& p
  234.     {
    2 ~3 ~. o/ c; `
  235.       file=(*p).second;
    4 v/ D' z# [* b# [" B" T! F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 a- N4 ^# m0 z0 F% y" ^5 k$ D
  237.       {+ ^! X8 ~7 H; @8 i
  238.         olds=(*p).second;, |+ l; M$ @4 n
  239.         olds->vers=file->vers;1 {$ S+ D. g' p2 e0 c+ d; S! z
  240.       }7 j5 f/ `6 k6 \
  241.       else  g& J; r$ r9 @4 U! `6 T
  242.       {
    # y( `( E& ]5 o% [# ?8 L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% E: \1 O0 A7 @9 u; v9 [5 S  |! A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      N* h- P7 X. M! Q0 w0 J3 J# @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 x. f/ u+ K" }
  246.       }( I8 X3 k" Q# q; z+ ]# }0 N# z" |% Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# O3 P$ [1 Q( G. w
  248.       sprintf(filename,"(%s)",file->file);1 u# U9 n! J1 }# b' Q6 N1 b
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + w: O) s, X7 ?2 S: Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 p; G1 @& B, ?" C
  251.     }; c3 N& @$ e6 j$ U3 d) S
  252.     dwCurrFile++;
    # g" d+ A8 L% P/ C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 F) i4 q' V3 u* m8 f$ Z
  254.     {: e% O8 d( z1 D. y. Y
  255.       bSilentStep=FALSE;3 y! T& c6 A) m9 o' x0 S- u) F
  256.       bCompressed=TRUE;
    1 r; A0 V: F, n2 u
  257.       strExtLocal.Empty();4 V: {1 b4 @0 a% x
  258.       strFullName=(*i).second;+ f( H- r# @4 \0 J9 z5 \: B# p- ^  K8 _
  259.       dwProgramState=AP_CONNECT;
    # g, x, z5 X; Z
  260.       return TRUE;
    1 _. o, ]4 N+ `! p# Z
  261.     }" [+ i& E- e+ k: W+ X6 `. v$ U2 L
  262.     if(!bRestartUpdater)# c  ~* b. F- x* A- r4 F  n+ ?; }
  263.     {
    7 j# F) ^% R4 ]0 }8 l. o# a2 |
  264.       int iCurrSize,iFileSize;
    ! g* J$ t- J. r0 T# @* J( Y3 e
  265.       iCurrSize=0;& U, c/ j. y8 B
  266.       iFileSize=UpdateList2.size();
    2 d: F$ j) R7 O- J1 l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 ~. V  z% s" m( q2 n$ t# v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' {  u9 d! J( Q: C% v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; q5 C4 z" T8 Y, }; P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; ~4 P5 I8 J7 D4 r3 |/ _
  271.       Fclearf(".\\update.dat");, S) K8 s* }1 n& {- D5 g
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 b9 a/ X' I  Y# v7 r2 f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! O6 H& J( I6 I  Q
  274.       {, S, h7 c  L* G5 j0 H* k6 ~9 Z. W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      ~) u8 b- X; g( [' @/ L' `5 P
  276.         {: m- K1 c, ?* Y- Y
  277.           file=(*p).second;) Z" H* a+ T% A$ o( ?% m
  278.           sprintf(filename,"(%s)",file->file);
    ' K$ z: N2 z9 x/ P* G) s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' k. c4 B; O' v0 v3 s
  280.           iCurrSize++;9 T( i8 q8 q' S! o9 Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 W. v1 Y% J) d+ ~- ]8 J) r  V
  282.         }
    9 X4 c. z! l6 U
  283.       }
    # i  d4 k5 q5 `9 f8 u' f5 \$ P- M
  284.       unlink(".\\update.txt");" k+ r1 X+ j  g( j0 Z
  285.       unlink(".\\update.tmp");  c) ]5 X5 ^, L7 W; i
  286.       Fclearf(".\\checkversion.dat");
    / Q/ s" |, m. H3 h2 O# Q% I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 V. N2 s$ \1 q, [
  288.       if(UpdateLocal.size()), \! Z+ ]( v" E$ c& i/ y5 b# L5 ?1 b
  289.       {. v, \; O* W" K) z
  290.         UpdateLocal.clear();
    / e" r, }0 e! q, @" p, t: Z
  291.       }+ m- o: S. o7 }2 G
  292.       if(UpdateFile3.size())
    5 F$ L3 N7 w1 ]: Y
  293.       {
    # v) h5 t9 V2 i* |7 N/ t$ ^( \/ u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ P5 O! T. N5 I
  295.         {
    8 ?7 ^& K5 e* E( ?0 g( _0 T
  296.           file=(*p).second;
    9 k9 p  k. N6 T& v0 D0 _
  297.           free(file);
    : {( |# {8 }8 V4 s! L
  298.         }0 G6 T7 S' u# {8 l7 A& M
  299.         UpdateFile3.clear();. w2 z5 ?! L5 k9 L: S0 ?+ S, X
  300.         UpdateList3.clear();
    ) ]! _+ ^' t( A6 @; P
  301.       }
    , q2 @: P- }% L
  302.       if(UpdateFile2.size()): C: H8 G# i8 C. \: z
  303.       {& E  i' v" z' J. O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 `" l% q# n4 P9 T
  305.         {8 Z8 j) l& g8 ~9 Y5 E6 t
  306.           file=(*p).second;7 Y! P; P# p! e2 }9 }
  307.           free(file);
    . H, {; R2 @  e  q% T( Y
  308.         }
    . _2 z5 \. m& A2 R2 R1 c' H
  309.         UpdateFile2.clear();
    : D9 d& j8 a1 ]* M% g2 F% X
  310.         UpdateList2.clear();) h$ a( M2 A1 r4 b' O$ C/ k3 x
  311.       }
    8 a, k" b2 l3 |0 {2 s* |3 \
  312.       if(UpdateFile1.size())
    5 A0 {/ g/ m) @" f5 K" S
  313.       {; _/ `" h0 A/ u3 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 j6 X& y: ]6 l2 a; v4 q
  315.         {( \/ \! t+ E! ]; n
  316.           file=(*p).second;
    # e, H1 _# T; N6 t
  317.           free(file);8 h4 u1 V& ]) |$ j7 Q/ _
  318.         }
    - {' z9 s/ _. e; a4 u
  319.         UpdateFile1.clear();
    - n3 R/ ]! P# ?& U3 ?3 T
  320.         UpdateList1.clear();0 t" t9 C* U" P6 [  x, I* {
  321.       }
    5 c& O4 E: r  L) g& c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) {2 t1 o% ~! D
  323.     }; U6 R$ @% c9 d9 t2 f1 d) `
  324.   }
    ! E. y! K5 J/ g8 s( M
  325.   return FALSE;
    $ y" ~5 B  ~& l! a4 S% [/ G0 J  m
  326. }
    # T7 y0 [3 e7 I$ G, B- ^

  327. 6 p5 ~4 D# D) u+ g7 N
  328. void CRevAppApp::ClearAll(void)
    3 Q2 ?; L! S  n. s: r$ D
  329. {3 n1 p  _* P8 Z3 |- m; |- L$ \
  330.   LPUPDATEFILE file;
    % c$ w0 M. s9 N4 G+ ~" A
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + K' d) g0 e) V4 K) g) j
  332. : S4 F, T. a  Q
  333.   if(UpdateLocal.size())0 ?0 p9 V& [* _2 q
  334.   {3 a% W6 }$ b4 W  _7 j7 d; d
  335.     UpdateLocal.clear();
    ! k9 N+ T& V% e+ Z6 w$ J6 b6 m1 `
  336.   }( I3 I/ R# z/ }8 Y* k8 \: L
  337.   if(UpdateFile3.size())" f! U* E$ i. K; G" ~8 z5 a
  338.   {
    8 E$ O3 r% f% V+ _  F
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! `7 Y8 a& o& O. h
  340.     {
    3 N0 ]5 {- B6 i, C' a" I* Z9 v
  341.       file=(*p).second;
    0 L6 B& d  p& W3 O! }& i# \2 b' C
  342.       free(file);7 ~6 R. t) N5 M6 a( g: j- a) B3 a
  343.     }
    5 Y' U- f/ B9 _
  344.     UpdateFile3.clear();
    1 [! x/ {% Q/ o3 F# l7 U3 M4 a5 A
  345.     UpdateList3.clear();
      b- L. f- n- a3 u; ~0 P
  346.   }& A$ h2 \4 A- y! z" W
  347.   if(UpdateFile2.size())$ }$ q$ B* a: Y& L
  348.   {5 A1 Z- I; M7 S/ H" {4 V
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( }0 J0 c- p+ T: w  n: s
  350.     {: |; Q! `$ B+ c" E) @
  351.       file=(*p).second;
    5 g6 V5 n, q9 t
  352.       free(file);8 c5 ]% i5 a0 V  o$ J
  353.     }
    ' t, p* |* _7 ~. F
  354.     UpdateFile2.clear();
    2 W. s" N1 b4 j- L3 h  m. V; p
  355.     UpdateList2.clear();
    ) G+ T8 c, X: E! h% V
  356.   }
    $ A' o' {9 ?6 U4 k
  357.   if(UpdateFile1.size())
    : v* z6 Z+ r( Y" |3 r- |0 ]0 ]6 u- _
  358.   {3 I+ ^0 q% R) G+ d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + q) }7 p  K4 ^4 S( c$ n& L/ n
  360.     {
    : s7 x6 b. r  o' k
  361.       file=(*p).second;
    5 r. E: N4 ^1 D/ Q& P
  362.       free(file);
    6 i+ R* y: O2 k$ Z
  363.     }
    6 r  ]/ s3 f, ~, L' @, x
  364.     UpdateFile1.clear();3 L; l0 f) u+ U1 ~9 |* M
  365.     UpdateList1.clear();
    " d$ U& c, X" L% a
  366.   }
    0 m, H9 M) k8 u. E$ i$ u+ `
  367. }  . h, a9 n! v" S$ i( P
  368.   # d: C1 b2 G$ z1 N; [
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 X2 c4 u: c6 w) D2 r* l
  370. {
    ; Z' @2 L0 r$ a  V: F
  371.   int c;" ]) y: M; f) n8 `3 T& ]
  372.   LPUPDATEFILE file1,file2;: M8 P  q9 J2 G- Q) s
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;- z3 m: ^7 }3 K. F
  374.   std::list<CString>::iterator l;- l4 X! U% ^3 {) k; h% u
  375. : K  d$ K. K* R2 C9 v6 B
  376.   UpdateLocal.clear();; h/ ^3 L3 e! s  z, T6 [& d+ x+ F" i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( j4 i( {/ a: f3 {9 @& w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + Q; i; W' e4 n0 D7 ]! Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' Y  ^' N9 K" i5 h, \$ ]
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & k( m9 d9 e2 E# j* r4 `& R. ?
  381.   if(UpdateFile3.size())
    1 p! Y  q- d$ L9 z
  382.   {
    . [, }: o/ @6 J, r" `1 X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ( C0 H8 O6 A* `' n7 f* s+ n
  384.     {
    * _- m2 ]# O) l4 f
  385.       file2=(LPUPDATEFILE)(*i).second;; J1 \2 f: b4 \, b* _) A1 k( K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); h- Q7 q3 Y5 p; u
  387.       {
      A9 u9 [5 C. K8 K; T, ^8 U. y
  388.         file1=(LPUPDATEFILE)(*p).second;1 h! x4 f5 g( j+ f3 L
  389.         file1->vers=file2->vers;9 ]$ Z# g2 J$ c
  390.       }
    % D, \0 D1 m4 {% Q
  391.       else3 N# D2 N: f3 H/ @% M, @/ a* ^% U
  392.       {1 @4 I! y: m) _) P& u/ l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% v2 u% b; h% A$ K% }1 o1 G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - h; O  ?3 t* c: F; J8 T, H. E4 z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) b0 G+ B. k  U9 u
  396.       }# J; `3 X. S" e& W3 N
  397.     }
    2 {: l! T& t) x- T. {  Q* v
  398.   }. ]7 {% u- T; K" K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)( d, [- D; C! [! M5 T! h
  400.   {
    5 U+ o& @8 T0 R- u  \/ @/ a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , J1 ^# ~* v' Q6 `+ C2 {$ q
  402.     {
    2 c0 f" i) S* E' g
  403.       file2=(LPUPDATEFILE)(*i).second;
    - R  f! Y' I9 s% s4 v# a7 O
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( Y8 w! d# h3 S" V0 t, n) Y
  405.       {/ r) A! x! s5 I
  406.         file1=(LPUPDATEFILE)(*p).second;) ]0 o) S5 K% A
  407.         if(file1->vers!=file2->vers)) d- L5 n# [7 k( k% Z$ P: t+ y4 N
  408.         {
    + L2 g- e$ T  n0 m2 l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # `( b* \" r' B3 ^# ^
  410.           c++;
    - q0 K! a8 e7 H
  411.         }* z6 X- _1 G+ ^7 q' L
  412.       }
    3 D1 O$ Q+ |6 [; K6 X1 o
  413.       else
    4 W; f: }' @  H
  414.       {* F- _  [3 f& z9 d5 a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 n1 I: L# ^; e7 X6 p  W
  416.         c++;
    8 z7 E* {4 ~# i) N7 c+ e
  417.       }
    * M3 `- m$ }! ?+ r, r
  418.     }
    ; Z7 `( S0 t" z6 ?1 S% W
  419.   }
      O. D4 Z- @1 [* A/ Q) e! s
  420.   unlink(".\\DownLoad\\update.txt");% K  m7 P* Q9 _' l+ e9 s) O
  421.   if(UpdateLocal.size()) return TRUE;8 i& ?: J0 p, C- f4 k' ~( X
  422.   else                   return FALSE;
    . G3 B; r9 G7 v8 L; v5 R
  423. }
    5 T' `: q, T: w& {  _% Q

  424. . p/ s6 c' D4 ]! L/ _( D) z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : H7 f( v, D  r- Q% O* p  N( ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # \$ J0 _, ~; E# g
  427. # y( H- I: P, O' p& X; W, r
  428. ( w% r" {9 a) ?

  429. . {" Q& g+ n( c0 C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), A& Y) r( E$ Y) |/ U4 c$ J" i
  431. {
    % }/ Z+ t/ }4 ~, _$ p" p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 u" |6 m2 M' n
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& U& Y: k, h/ U2 J: \1 c) }  i
  434.   {
    . |6 l9 d2 E0 N- y
  435.     char szLanguage[50];
      B  K/ d7 Z, F6 Q8 t& ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : [7 @9 r  H2 u* U; [2 D/ |* ]. ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 }2 Y* B) E7 Z8 l' H. }" i
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 N7 y' A5 s7 L3 k* N
  439.     else                                   m_iLanguage=ENGLISH;+ s) V  z8 m$ w; M
  440.     char szRegister[100];
    0 A. T& D) K; G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 d( J# D0 @8 N6 F
  442.     strRegsName=szRegister;' ~7 P' s/ G$ ~) I
  443.     char szPatchURL[100];4 O/ c2 J3 Y. A- \7 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 N3 @5 |8 T! ]4 }9 C% h# L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) |2 O8 T1 G. x) N
  446.   }4 V. z. w( a/ v( ]  }: x
  447.   else/ a( `$ J# s$ `5 P$ c; x/ [& _
  448.   {) @  A' c% {9 h5 M' b! J* ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; s1 T2 R0 _8 c
  450.     strRegsName=DEFAULT_REG_URL;
    & |, g& y0 B0 E
  451.   }
    8 k8 ^8 v/ i4 n' i
  452.   if(GetFileAttributes("hosts.ini")!=-1)! {" W9 k2 ^: a% _7 y: b# Q
  453.   {) n  @6 k& \+ H5 a) f6 h. I
  454.     char szIP[50];
    / u7 ]5 L  y6 V4 E
  455.     char szDIR[300];
    - s4 t7 X3 j+ y& b5 z, C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " J$ }$ n* {  @8 c! v8 ]
  457.     {0 `% U) g, u0 I2 K. {3 @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 e3 P, f' I5 b9 x% q4 c3 M/ w  K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ' G; ]" d) W" \9 _& u3 c! F
  460.       strHostName=szIP;
    4 F, ~" r, m/ H
  461.       strHostPath.Format("/%s",szDIR);& |3 J# t. I3 }  q
  462.     }
    ( m$ A. Z3 d3 W( r2 S, B- Q
  463.     else6 h* u' ~& B+ u. V1 A
  464.     {
    1 m' f" }0 }/ ~3 F  q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 S9 T1 \6 W: q$ B8 `+ P+ I
  466.       {
    / I( f3 ?$ t( O- y
  467.         char szLanguage[50];
    : `* c/ H7 p; S9 \- Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " M, x- H! b' V8 ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 {9 n- i# N! U; _( \4 [9 v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 B* j) d/ G/ v' `( R" ?, Q. o% M
  471.         else                                   m_iLanguage=ENGLISH;+ ]9 T4 B* g* j$ W% j! k
  472.         char szRegister[100];
    ) j( W$ K/ s% f- P) _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- o1 ~: F. W; k% F9 ]
  474.         strRegsName=szRegister;
    4 P- ~) Y( a% s5 U% |
  475.         char szPatchURL[100];
    7 ?. T' g3 I/ q+ o6 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ n# e! G! C8 Y$ Y; a: a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 \5 n8 i6 [9 m) ^" m2 v, G0 P
  478.       }
    9 u/ c8 u! j- B" J: H) }4 u
  479.       else
    3 h" R; w; t5 Y6 q2 @: b) Y9 M
  480.       {
    / B3 C- U/ c+ ?3 |+ w/ F& c; e
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # y0 B$ r! [4 D' V, y' @
  482.         strRegsName=DEFAULT_REG_URL;* G( H/ z# l  w7 ?, h8 u5 R0 i
  483.       }
    ' y6 w6 @6 S5 }: z5 X, [
  484.     }* a) a& o  h" P9 Z8 A1 {, ~# j
  485.   }
    2 m: `' [$ o! Z
  486.   return true;
    . }8 k3 E( F8 s7 G  `. g5 t
  487. }& c. g1 B3 ]! T9 f! K" X3 [/ E

  488. . P; q5 D4 D- l+ v6 u# v) }
  489. #include ".\ZLib\unzip.h"
    1 c7 R  x& J0 b+ W8 c; N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);; @# M4 R. P5 s$ U* C
  491. /////////////////////////////////////////////////////////////////////////////9 _" r: @$ ?$ w1 j
  492. // CRevAppApp initialization4 D* e. [4 P1 Q4 c' x2 F) c4 F
  493. ; \  j* y( M% H
  494. BOOL CRevAppApp::InitInstance()! U! H4 P2 s$ \
  495. {
    " n, ]1 }( A* d7 u5 k, l5 f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; Q9 |( _3 U# l/ p2 p% B* I1 J

  497. 9 n( C% ~& C+ Y7 H& g! _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; F  n4 r& j- F  w4 y0 P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + p" [  Y6 O% c1 f" H( {$ i
  500.   {
    ( V: i( J0 Q" E# u1 N$ z- j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");/ c1 p5 w3 Q3 I/ u% F" _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 ~0 \1 h/ m+ b0 i& r" |
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ X3 \) V5 z7 `: x+ ^( K1 \1 r6 g5 A
  504.     {9 ~! @# [2 Z1 D2 D- y: Q3 e
  505.       strcpy(szPath,szPathTarget);
    2 _$ r! w9 P& |6 p
  506.       SetCurrentDirectory(szPath);
    # h1 o4 h& n, h% k) E1 S
  507.     }
    5 w, A, l5 J# ]) U3 I+ f: Z
  508.   }
    . E9 D0 S* O* B% [, u
  509. #ifdef _DEBUG' @' d# _: a* U# }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ X4 _" g" ~6 c& y
  511. #else; K7 J* }- n# W' r4 c$ J( a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / \; e* n4 s: s" s8 W4 v7 E
  513. #endif8 y5 c: G- J8 z' _0 z, l! y
  514.   {
    ) M8 Q. R) \" y0 ~" s/ Z$ L4 v( z
  515.     char tempFileName[MAX_PATH];
    0 J% y1 L8 U7 c" v" u
  516.     strcpy(tempFileName,szPathSource);
    3 P2 `6 B; ^1 |1 ~% r3 [+ P
  517.     tempFileName[strlen(szPathSource)-12]=0;- z/ v+ Q( _0 N# r& M  I, e
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - x& D/ r9 T; w$ a. T# k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & p+ W' s+ z* J! j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    5 c* y' ?" z( ], I( I0 w% x
  521.     return TRUE;' F$ w. \6 D4 e0 m5 Q! `
  522.   }
    4 ^, Z5 X% U9 y! D  M: A# ]3 ?) v
  523.   // Nuke 0118: Delete run.exe. n" w8 W$ `- I$ N2 U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 u7 u" `" l8 c% i* ~) U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 ~& ~' d4 A( G% l* v3 z' s
  526.   if(!ReadCfgFile("Config.ini")): Q) n; X( h; T
  527.   {" U% v# Y$ }& {& ]/ f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 k! e* _+ F; f  f6 T  I; i
  529.     return TRUE;
    4 s6 }% u$ H* H7 s9 U" `
  530.   }
    , e+ X. |+ @! L' o$ O7 X" k  a# i  F
  531.   HANDLE mutex;
    ( ?1 w, x) y4 e  ^$ t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ K% C5 J; o/ U7 f8 t" e
  533.   {
    ; g: A8 d& m; U! K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 J% \0 u; X1 r1 C
  535.     {
    - [; x0 b4 r: p3 a6 ^: [
  536.       CloseHandle(mutex);3 S' c) g7 Q1 ?5 }  C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 X" \* [) U% ?
  538.       return TRUE;
    4 ?4 d: n3 m1 M4 D6 ]
  539.     }: Y2 z" O# q8 m9 @
  540.   }  . F# x  R; h% U, g& `
  541.   CloseHandle(mutex);% F. @; l1 m; {. q
  542. " n% g; |" n6 T2 ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);6 \) `* x/ @3 D
  544. + i6 |0 Q8 l, F7 P' E) X
  545.         AfxEnableControlContainer();! [* Q& \6 Y) L

  546. : R7 }; U- k0 q& g8 z
  547.   bCanUpdate=FALSE;" |5 _8 I0 Y3 l- x3 ~
  548.   dwStartUpSteps=1;* R; e& C/ e" _0 d
  549.   dwProgramState=AP_NOTHING;
    1 {3 f7 W/ A- S$ w
  550. , K8 ?* V( Q8 e3 L* S# q) |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. [/ A* q" a; ^- h! @. a4 p
  552. 7 y! ^. J; n! a0 \( \- L
  553.         // Standard initialization
    ( [( j+ w/ [3 X# v3 I: [  {% V% j
  554.         // If you are not using these features and wish to reduce the size
    7 D" O* }! j* P$ x5 U
  555.         //  of your final executable, you should remove from the following& l3 K' t$ k3 W3 G* L& l1 s( B, ~) i
  556.         //  the specific initialization routines you do not need.
    . J2 G+ I/ r1 x5 f, r8 S; B1 f

  557. ' N4 G( m$ |! \; f5 y2 z0 _
  558. #ifdef _AFXDLL
    : S! F2 R7 H0 W/ Z! g* {& c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) n; T" M8 b. p/ u( }$ o( e! k
  560. #else; c/ a) Y3 V+ `7 B, U" i0 Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( m. A9 {: h" W
  562. #endif, c; V- r1 ?' m" ]4 O
  563. # E7 P& C9 L, }5 q( d
  564.   dlg=new CRevAppDlg;
    ' i7 @  h$ r" N4 h' }4 G( v* [
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 f: n/ Q$ {$ t  Q; K" T
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! q) Z8 y2 d0 x- g' j
  567.   m_pMainWnd=dlg;
    1 w& W* q+ d2 I. n# w- K

  568. 7 U" ~: Z+ y! _, {& \' m! I- X3 ?! P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / k6 s- k2 s/ I8 W9 d

  570. ! Q7 D6 ~6 e8 e. W9 p, K1 i9 u8 e
  571. //  GdiplusStartupInput gdiplusStartupInput;7 t$ H5 l2 z, Q1 z
  572. //  ULONG_PTR gdiplusToken;
    + A8 z3 m. A! s- c) t4 `# `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( A5 R/ Z/ B5 |2 S

  574. # Z& C. H9 ~& |& b. O
  575. //        CRevAppDlg dlg;8 K7 t/ t  R1 y% E% C/ I9 j
  576. //        int nResponse = dlg.DoModal();3 U; ~+ Q# K- G" D' [" W
  577. //        if (nResponse == IDOK)& ?; r) v- [0 z- h+ {; @
  578. //        {
    : U! o- c, m+ d  S% y
  579. //                // TODO: Place code here to handle when the dialog is
    ; R$ @, i, R# u# `% W0 G
  580. //                //  dismissed with OK. T( C. s$ U2 o( C2 E
  581. //        }% \2 e* D$ |8 k
  582. //        else if (nResponse == IDCANCEL); B/ Q+ m" X# L8 L) h' Y* G5 o
  583. //        {
    5 p8 m& B: O1 R
  584. //                // TODO: Place code here to handle when the dialog is. @0 t: z. |1 {" [) I
  585. //                //  dismissed with Cancel
    : v* H; x% K0 t. c7 B! `; k
  586. //        }
      U5 x# B- H4 l; j  f4 M

  587. 2 n& U* `) u/ E) U" S
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 t2 [0 D( Z! I% i7 {3 y  V
  589.         //  application, rather than start the application's message pump.+ a: o# I! E: J- Y- o' T# V
  590.         return TRUE;
    / ?, M/ C3 U$ Y
  591. }
    3 a5 @- [6 l( s) n8 N" h

  592. 0 N. c- ^& g; x/ T1 G+ p3 @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ b0 s5 L: J9 d$ K8 P3 D) k$ G, O
  594. {
    # u( E6 ?0 a& r( o" z8 S( O! x, Q' A
  595.   int i;5 a5 Y1 F+ V  c5 G! n5 I7 I6 l
  596.   char *szRet;$ w7 z/ ^5 g& Z+ o( o* N( i

  597. ; [4 B: p! m( n7 O7 h! n3 q# ?" S
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & ]1 b0 f' l- k' b+ X/ ~
  599.   if(sztoken)* a7 ]' E* g* `# R$ f7 c$ {3 o
  600.   {$ D% _1 `4 E/ u& _! i7 z2 {, t
  601.     szRet=&sztoken[itoken];3 |) Z- S/ p' x+ S$ o( g+ Q* z
  602.     while(sztoken[itoken])
    : z6 z6 _# z) D6 S, R8 Q
  603.     {, ]# n8 U3 Z8 g$ i
  604.       for(i=0;i<(int)strlen(token);i++)% ^$ c5 Z; z5 f6 q% U. t* b. ^
  605.       {% C( e9 X) @8 _5 |4 o9 p( X. o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 ^- I# C0 t+ I! }& H+ Y
  607.         {7 L' K' J0 ]: b
  608.           sztoken[itoken++]=0;
    " O' o7 q9 d! @7 _/ v  h1 a
  609.           sztoken[itoken++]=0;
    3 _; X8 v: M: B
  610.           return szRet;' y" Y/ m7 U+ G5 c: c) B
  611.         }& x+ V1 u1 u# Z% Z4 {$ S
  612.       }
    8 U! J6 B& e. c: }  Q) _/ [
  613.       itoken++;) u0 h0 K) W) L
  614.     }4 i9 _5 ^4 Y% X) g  p  X7 E
  615.   }
    : o7 z) B4 _7 [7 A1 n% ?
  616.   return NULL;
    " T' P; [6 ~7 d2 g& i( r& ?8 E. v
  617. }9 C8 ]* J5 L8 t& \" q# Y- J
  618. 5 T" N9 c" `/ d: @
  619. void ProcessProc(long Total,long Current)
    0 i2 X: }9 ?" P
  620. {
    ! Z3 t/ d$ i+ U. J7 t- u
  621.         MSG msg;: O. V0 g* O' _/ ~9 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 `+ ^/ k+ Q6 N3 P6 [
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 ]/ B7 U7 M# l  A- u! H6 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)), I# T! w; \2 A& B9 y* Y+ w; X
  625.         {5 y# J) e0 t5 q7 [3 Z& [3 C
  626.                 if(!GetMessage(&msg,NULL,0,0))+ b  ^2 |8 }* V# W2 O
  627.                 {
    3 {; ?0 W* D3 Q8 w: `  O) Y
  628.                         return;
    . D( |5 @6 s7 f# v1 L& m
  629.                 }" R7 f  z. D2 n# N8 c# q
  630.                 TranslateMessage(&msg);" N% ^6 R( `( c) v) ?2 @- _1 u8 H
  631.                 DispatchMessage(&msg);3 J. ^+ o3 y; W  d2 Y3 a% G
  632.         }        ; J4 H+ S" m2 [" Y
  633. }2 z! c9 H. Z5 h4 M/ ]
  634. : c/ k0 j$ d  h0 r& c: k) O
  635. BOOL bFirstChar=TRUE;
    / N: H% |( U0 d. W4 \( a
  636. ! j& V+ r$ Z- I2 ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& D( n3 S& s1 ^
  638. {6 r) n) V7 @' I, t7 l( G
  639.         // TODO: Add your specialized code here and/or call the base class  t6 x$ c7 d# ?9 q2 R7 |; s
  640.   switch(dwProgramState)
    ! d* i0 M/ B+ k7 Z0 n
  641.   {
    1 K& ~5 M+ h- \: c1 _9 I
  642.   case AP_NOTHING:
    5 K0 T5 {9 z& g5 }' F
  643.     switch(dwStartUpSteps)
    " a0 @; x1 o9 j. C, v# ]$ E
  644.     {
    # o$ T' {3 X6 f. c8 x# d4 r
  645.     case 1:
    : j6 k1 d( L# O) E' x- q3 G( n3 Y: ^6 {
  646.       {" m7 _% k. C5 X" q$ N
  647.         int i;
    ) K6 W7 P2 O' b2 v
  648.         CDC *pCDC=dlg->GetDC();9 m" w& |6 h9 a) H0 k: M  K' O1 S
  649.         HDC hdcwnd=pCDC->m_hDC;6 I. E: L& r( ?4 M
  650. //        Graphics graphics(hdcwnd);
    3 X9 h: S) X. v# J5 a) S" Z2 s' T. [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ Y- k" c0 p$ b0 j8 n
  652. //        INT iWidth=bitmap.GetWidth();
    & ]5 B1 z5 s$ w: E6 v, t
  653. //        INT iHeight=bitmap.GetHeight();0 Y7 W* u' @# N' ~+ w& `+ Q" l' o9 B
  654. //        Color color,colorTemp;2 Y6 A6 \) ^/ [* W) M& P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . y2 g/ S0 e6 q4 K* w. M8 K* p
  656. //        {) H; f4 _! @+ b6 {8 r9 t7 J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - a6 O" |7 [) y
  658. //          {
    , I8 z5 Y: l8 C) \/ p1 A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 K, s; ^; @8 w1 H
  660. //            colorTemp.SetValue(color.MakeARGB(
    " D) Q, i) `# E
  661. //              (BYTE)(255*iColumn/iWidth),4 M5 d! f4 N( c6 J/ i1 K+ @
  662. //              color.GetRed(),
    3 h" F1 L+ O$ V: N
  663. //              color.GetGreen(),
    * f$ _. Z+ q3 S, n9 h7 g- Q" _
  664. //              color.GetBlue()));
    ! P! ^) W3 g  Q" m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , w9 o, T* H* S' `  e$ r7 b
  666. //          }
    * L- p, W% B, u$ Q' z
  667. //        }
    5 ^' v6 {# u9 \: }) t4 G8 d
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    % o+ D6 L4 P% j  ?9 C7 \3 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! A' D2 }9 v% M& n# U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ o) m7 z( V. c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 i3 }/ |" j- z$ K
  672.         for(i=0;i<240;i+=8)' Y+ _6 }$ D' \$ w& }8 y
  673.         {# w7 S: p2 `  ^* L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  F% C+ d5 F; p! f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( w7 M- [0 G. c& _* p9 Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + m4 T1 P: Z" [
  677.           Sleep(33);
    * G8 G9 R) V1 F& B( Y4 i2 ]
  678.         }! I9 n, _& j; T9 H$ G3 i
  679.         Sleep(1000);. h  @. Z4 ?9 K, r
  680.         for(i=240;i>0;i-=8)
    7 q3 f6 n" K+ ~
  681.         {( O/ d# d  F6 G: D, ^) z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 _+ _* f  |: s& G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 H6 \( l2 X3 a* E5 T* x7 _" i; A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 ~  X  W: o0 N4 g4 t# R
  685.           Sleep(33);
    4 z8 \5 }# S8 ~
  686.         }
    , x0 @) d  Q* i) v& p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    % t" U5 @! t$ K7 P4 {" V
  688.         dlg->ReleaseDC(pCDC);
    " X$ [+ {4 S$ K3 S0 @7 Y
  689.         DeleteDC(hdctar);  R( T/ Q% _3 b' ]6 d
  690.         DeleteDC(hdcsrc);
    5 x) ?) f" I* F0 i/ v9 P& |/ Q
  691.         DeleteDC(hdcorg);
      y3 R$ K$ J! \# r. Z7 t, P& q
  692.       }2 }, f+ U* W  N4 W9 j) z1 z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    / c4 s  b- V- E5 M) M" C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 t8 m. U( ^! F; e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 A, [9 O5 B" J! K6 }/ u, N% P
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 g# `0 i: W3 a% `. H( @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 j5 ^, W. T" `1 Y
  698.       if(!Dn.Connected())3 A3 T% [1 x: B! `! c# M
  699.       {# X9 y0 R; ^" ?. N  O& J
  700.         dwTotalFiles=1;
    8 V; c1 Q- _) g; _- w& o
  701.         dwDownLoaded=0;
    8 @8 [; k- k6 z& M% K+ Y2 \
  702.         bSilentStep=TRUE;! r$ o" {5 z1 @7 u3 R- j# R
  703.         bCompressed=FALSE;
    8 H. t" {0 Z* L% P1 e# u2 j/ M
  704.         strExtLocal.Empty();6 K  y4 ^9 T* q0 l; g8 {/ P* r
  705.         strFullName="readme.txt";
    , ^: E* n! v( a: y6 K5 [' K2 Z
  706.         dwProgramState=AP_CONNECT;. H8 N( `5 `% P4 Z
  707.       }/ m- G  o5 g5 I3 b8 P, H
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 p! Z, d' q2 P' K9 a/ ]0 B# s
  709.       dwStartUpSteps=2;. ]0 f, x  e4 I9 W) H" }; D
  710.       break;
    4 i, x; B: N, y
  711.     case 2:
    5 m- o6 P4 V* P3 R6 Q
  712.       {1 q7 ^4 ?! |1 \! ?
  713.         int iEOF;
    " M3 a8 _/ x; |4 O- i7 r
  714.         FILE *fp;
    ! h* E2 R) R6 g. m5 t7 D
  715.         char szString[512];4 O8 x1 B. E! w( F% J) T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 Q! z( y6 N4 K$ t+ |) z$ V
  717.         if(fp)
    " c5 C! F! ?$ y; \2 i0 K9 @- s- n
  718.         {
    ! i/ k' I+ y8 U: M, f- j8 Y
  719.           do
    # c" e7 n+ \4 g1 \$ {5 B: J, i
  720.           {7 L8 ]1 c  J) N" a; O
  721.             iEOF=fscanf(fp,"%s",szString);3 X/ A5 m7 |/ N' y' P$ q3 Z6 Q
  722.             if(strlen(szString))" }+ Y" P- O; y# |9 K
  723.             {
    & f3 X; C' O: U+ m' M' ?# G
  724.               if(bFirstChar)! d/ W$ I/ `* O6 [5 \
  725.               {
    7 N  A5 k9 H& Y% Z1 F
  726.                 bFirstChar=FALSE;
    9 Q/ x0 ]/ ^  ]  E. n
  727.                 bConnectIsBig5=FALSE;2 f" o& t( b# Y( r. n, E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + c! f: `# w  u3 u5 k. v
  729.               }
    - ~- e4 ~9 R, _- g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- ?/ q' R- ~7 K$ Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 H! w  B$ e" p+ X
  732.               dlg->m_ListText.AddString(szString);
    * _6 e. n' Y, I: }2 I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; j& B9 W, q! a/ z; j$ f
  734.               *szString=0;
      |! v7 v# w- {4 ^2 Y) k
  735.             }  S$ e( |7 R& G3 Z% v; n
  736.           } while(iEOF!=EOF);
    ( Z  K5 d" @6 [7 e- R! ?3 V
  737.           fclose(fp);
    4 K$ P! |0 R, l, S
  738.           unlink(".\\DownLoad\\readme.txt");
    : b4 D; p: @+ \7 m/ O0 v
  739.           dwStartUpSteps=3;. Z7 M) ?% U4 H. i+ S7 ^2 m$ A( |3 \
  740.         }' W! r. |5 y/ L2 P9 O  p" @6 z3 Q
  741.       }
    2 S4 U: M) _4 e6 x' v0 U
  742.       break;
    1 K; m& O/ p. M) w" H4 E% `
  743.     case 3:
      v6 ?. `7 A9 P( @- ?6 M& s$ J
  744.       if(!Dn.Connected())
    + c! u/ B& l7 D0 O
  745.       {. H  k6 z- w8 j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, M+ B5 e+ n; ~* j/ ^$ V
  747.         dwTotalFiles=1;- c6 p( a3 T! I
  748.         dwDownLoaded=0;
    2 b8 V1 I$ V8 B: C! E; X2 u3 i
  749.         bSilentStep=TRUE;
    5 Z$ m' w7 B4 |& c/ q
  750.         bCompressed=FALSE;
    # e6 r7 u2 M1 y/ U0 o
  751.         strExtLocal.Empty();
    + ^$ Z! f0 q) M% s- A$ d3 x: c: C
  752.         strFullName="checkversion.txt";9 L4 _3 E4 T2 D2 A% |
  753.         dwProgramState=AP_CONNECT;
    % o, s' I7 O+ T3 Z5 `6 Y  M9 q
  754.       }
      k9 X# m! D( e
  755.       dwStartUpSteps=4;9 ~, a3 l* z0 n2 Q6 s. p% R+ s
  756.       break;
    ) Z. R: l) P- w* \  U6 l# L* |
  757.     case 4:! }1 M' ~1 `+ \1 _( E( K) E
  758.       {
    ! f2 ]1 [- v1 W4 [
  759.         FILE *fp;5 t. f, ~. \$ O8 x, x
  760.         char szString1[128];
    : F7 \# s; G6 g0 ?6 e) B
  761.         char szString2[128];3 ^, ?" o4 s" K6 m
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . J/ u0 t8 ^4 n$ r8 a( `
  763.         if(fp)
    $ V) i  U4 B1 e8 h2 |' a- ^
  764.         {
    % N# S* a% O9 c0 H3 @1 O  b) j
  765.           fscanf(fp,"%s",szString1);! k' f5 H2 }9 `, H
  766.           fclose(fp);2 K7 n2 L- y$ g" B7 J
  767.           fCheckVersion=atof(szString1);
    9 \' m; e7 G$ B& ^
  768.           fp=fopen(".\\checkversion.dat","r");' d6 c; o% g1 G- j5 F, U1 s# ^
  769.           if(fp)7 ]$ w' a4 t& P7 M* p/ b
  770.           {# |9 u/ z6 s0 ?7 `0 A- k
  771.             fscanf(fp,"%s",szString2);  {: [' N1 I9 g7 R4 a$ M
  772.             fclose(fp);0 M" A. j# ]5 ?2 _) c1 q- r! X
  773.             if(atof(szString1)!=atof(szString2)). n( b2 I+ `* [, }6 B& E
  774.             {
    3 w% }) p4 c* G" u
  775.               if(!Dn.Connected())0 l4 C- i) b& i1 N; V
  776.               {
    9 Y: ?# [$ a3 n" h* R: O) W
  777.                 bFirstUpdate=TRUE;! `" R6 B1 a9 v0 }2 F
  778.                 dwTotalFiles=1;
    7 d- A& o& T0 I# [% ]: t7 S  L+ ~
  779.                 dwDownLoaded=0;* T6 Y9 Z2 x7 F- b" T- M3 m5 l9 C
  780.                 bSilentStep=FALSE;
    0 i& s# G' v$ u& e( J! `! L
  781.                 bCompressed=TRUE;" ^3 c& O+ s  k" {  L' V
  782.                 strExtLocal=".\\DownLoad\";3 ^0 D! ^! T& @0 C  m
  783.                 strFullName="update.txt";
    * Z0 g* x! C, z& M! ]
  784.                 dwProgramState=AP_CONNECT;: \6 G4 U4 z" u! Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ ^6 G* B7 h+ ~% ]1 f5 l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* K% Z- ^+ ]  ]! ?& Z$ d/ Q2 h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 Q; h: W8 t4 r) @0 r
  788. , s, H+ @: z/ {' n, t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + Y$ I* X3 W+ u/ w
  790.                 unlink(".\\DownLoad\\checkversion.txt");; ~" K2 O! m9 j
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . z2 Z5 ?3 ^% ^) O- d! x
  792.                 {
    ! u2 Z9 c8 L2 ^/ b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 R0 K  a7 Q" d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( z- Y# A; ?. k) @/ u6 `# _( z7 b. q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * D3 K2 J  @+ B1 G' b% c$ B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' X/ I/ }: r3 M( t- G

  797. 7 H0 f. n4 w5 L* b1 C7 J# a$ o9 W* }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  u9 X4 {) t$ ]! Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 x' {/ x" X/ X) ^8 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : j9 w! G" e: u8 @* I7 [4 l- K! T
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 h' l" S! ]" s& }# s1 y
  802.                 }
    0 z, Q; {9 H. K' q) k$ v
  803.                 dwStartUpSteps=5;
    " c) T. e% d, S0 `
  804.               }( x3 b$ S5 h5 o& Z3 _, I
  805.             }! h' B2 [% Q; t/ B5 ^
  806.             else" t( p. j) Z$ G8 ^+ j3 X
  807.             {
    " r/ `+ |) _/ J( T2 M( Z. I9 T+ N
  808.               unlink(".\\DownLoad\\checkversion.txt");3 s- a/ D$ X, U9 l0 ?$ _3 i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' ?! ]8 w( Z+ D+ o' p  M  K
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 O8 d+ R& ~/ y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) ~: d2 Y3 u; l; l
  812. + O1 i% v/ s; S: U/ w! d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 _# L2 k, ?5 S  p( {9 _
  814.               dwStartUpSteps=99;+ @5 ], S3 X0 G7 j# H7 R
  815.               bFinishUpdated=TRUE;
    9 X1 r) X. c2 _
  816.               bCanUpdate=TRUE;, M, T. ~- F; j  o+ S+ c) g
  817.             }
    - ?9 d' {+ z* ?+ X/ J9 h7 K0 f) S
  818.           }
    4 ^/ J+ {( I" k2 k& I$ K& L/ Q& I
  819.           else+ q3 x$ O4 N" B( n3 \$ f  O
  820.           {
    & g3 `, ^! E4 F( K; S
  821.             if(!Dn.Connected()). b; \1 j( ~$ Q; `( o3 i
  822.             {: \, h0 m  ~) M. [  l. J0 U
  823.               bFirstUpdate=TRUE;
    ! o: k% U5 A+ _+ l2 z- \0 d
  824.               dwTotalFiles=1;5 Q, F' [0 {8 ]* w; Y/ n
  825.               dwDownLoaded=0;
    # ]. q- v5 A/ U5 f8 O7 _9 @; }8 N
  826.               bSilentStep=FALSE;5 c* a0 r' Z! F
  827.               bCompressed=TRUE;
    . I0 ~3 B" k- h, H; k6 ]9 B( f
  828.               strExtLocal=".\\DownLoad\";
    & i7 k. Q% |0 `; j) s
  829.               strFullName="update.txt";
    * Z, w: ]* G) Z) T! E4 t% j
  830.               dwProgramState=AP_CONNECT;
    3 \/ p, N; g- z& z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 t/ ?- S! `" I2 w5 `, v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  I$ o9 O+ N* |( p+ O% K3 V1 o+ g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # f- {6 F( [3 \% s( d- g2 s, P4 P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ^$ _4 H! M! e; [& c+ h  X
  835.               unlink(".\\DownLoad\\checkversion.txt");4 V; e* D- s6 ^1 g$ d1 N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( t/ q* ?% ~) y9 a2 M2 e
  837.               {
    1 u; a" I- i! j: U( m5 f! h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ G5 E* k) e+ X2 [0 V7 v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 y2 `- s$ R% s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");* Z/ D0 p% m) p- ], o6 ~3 T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ]1 G2 d# m2 D7 Y% K: V8 @
  842.                   H  s8 g! q) w! C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- K: F0 b& G. f7 J/ [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      o8 B: O+ {8 ?* e; c2 t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) I: ^6 m: r' T5 b8 x  ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 x# D! [9 [1 c9 o4 `( p
  847.               }9 n7 s4 E4 t6 ]+ H
  848.               dwStartUpSteps=5;
    * I* ^: O$ g' j7 H4 |
  849.             }' w" t9 C3 S" E+ P  r/ w
  850.           }
    % @* ]$ u7 s4 `
  851.         }$ j$ Y0 d, l7 V4 ?. O4 Q
  852.         else
    7 @+ X) |( F+ w1 }# p: ~1 L
  853.         {: w4 ]# ^5 g0 x$ i
  854.           dwStartUpSteps=3;5 I; `6 z( _# f! M  t, T0 o
  855.         }& e' X+ L0 F+ c1 f
  856.       }5 C+ A3 V9 y8 I5 {  A! }
  857.       break;2 X) F" U* s  e5 O8 I: ]9 v6 g
  858.     case 5:6 r! U+ w( d" y# n$ s/ d
  859.       {
    * q! n' O3 s' k0 u" _
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! S0 Y, i' }; h& g9 c5 i9 `
  861.         {: ?4 K/ h; A( ^) L4 z, N7 K
  862.           int opt_overwrite=1;
    8 D. U& {) H7 F2 j# a  G
  863.           int opt_do_extract_withoutpath=0;/ v5 B  f1 C2 I: ]) Q
  864.           unzFile uf=NULL;
    ! ]! ?4 L: J1 }  O. r2 l
  865.   F$ r) X: g. I/ F' x0 ?. Y+ G
  866.           uf=unzOpen("Wsa.zip");
    1 h8 r$ F. r9 n6 Y  Z0 J$ i% g1 s
  867.           if(uf)4 Z3 X1 f4 s. @  n0 |" h( P) y' t
  868.           {; b/ y! O9 G' l7 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 ^! _8 \. N9 M
  870.             unzClose(uf);+ t* b1 v1 d3 m1 M6 g# a
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , u. u: e( G& P: @
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ Q$ x4 r; S) i2 k4 C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 V3 _, z1 F! j3 i8 @( L. r9 j4 n" L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" H  v# _: Y$ e0 w: X
  875.           }: T- Z/ ^! u$ ^2 s+ d% X
  876.           DeleteFile("Wsa.zip" );
    ! A/ Y( x2 |% R+ q9 g. [( R4 x
  877.         }
    4 i3 }8 x# Y: W
  878. $ r, q( @. J% F% a' m1 g& A! O8 Q) T9 \
  879.         if(CheckLocalVersion())
    ! z8 l* l' p0 _& i5 X; r; ^# D: m
  880.         {
    1 J# c# e- v) |
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    2 w+ E: M! {& v: d
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# U" g/ \2 [" v9 Z  o# T
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / L* j$ \* c+ ~1 M3 [- B! Y9 }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 M; a- _' ?- T8 J9 h2 F
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);0 c( m( t, ~3 ]" h) ^2 }; ?
  886.           dwStartUpSteps=99;' U; f- {! P8 s2 t# t2 e0 @
  887.         }
    2 _; o- ?. x! ]( ?4 q$ s( A
  888.         else& U: m0 n& G3 u  Y) [: S/ N
  889.         {9 R; o% y1 l: k5 R  S# u8 k# @3 F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! H9 S" A+ h; j6 o8 b  K" U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ P, \# D7 }2 U3 X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 C; y0 [6 ?4 ]0 S/ k: `

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

. A/ Y; q2 d' X  K( Z: A; Z5 U& m9 I0 E" h; B! w2 w8 o

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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