CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
' g% p8 e) Q1 H( m) s  |& z
  1. / RevApp.cpp : Defines the class behaviors for the application.' J6 {" S6 e) |9 k) Y
  2. //2 S; l0 Q: n+ v! q$ P
  3. ' `3 A4 Y# H- F& V* V* O" N
  4. #include "stdafx.h"
    & @; l0 s1 ]& K9 ^6 H3 \2 K

  5. ( X* f) p: L+ w7 S4 E! F# ^  W
  6. //#define UNICODE8 ~9 |2 [+ Q9 ~* m0 h
  7. //#include <gdiplus.h>! j; K: |+ W* t8 q: C
  8. //using namespace Gdiplus;7 I# j- }; a5 }$ `) E1 z: e
  9. 7 K2 P# L& q/ B1 U, z% Q  i6 a
  10. #include "RevApp.h"
    - Y! \' y7 w3 t+ d0 B5 W
  11. #include "RevAppDlg.h"
    . v, p+ o" P. N: d7 p. U. F

  12. * X5 T, L( a6 I' g$ h* x0 R. B
  13. #pragma warning(disable:4786)" T: }; B8 [& D# u
  14. #include <map>, y9 Q% h) M% o; K3 Y" n, }
  15. #include <list>
    2 I* u$ ]! O4 t  {) i
  16. #include <direct.h>
    : P( F/ ], U$ F! V6 U
  17. $ r; ^, e( m- s' ?/ I/ q
  18. #ifdef _DEBUG2 R% p, ^* r8 \" s
  19. #define new DEBUG_NEW
    " X1 p0 Y+ r7 {
  20. #undef THIS_FILE1 a* J) R2 L5 ~8 @/ n7 `: V& ?
  21. static char THIS_FILE[] = __FILE__;  M: H# `# S+ b' D) u# }
  22. #endif
    8 D2 s* d( x$ |% ]
  23. #include "SkinResDef.h"
    ) O$ ^( X% v( g$ w* b
  24. #include "ChangeBG.h"5 u* L+ ]5 Q3 |6 s2 O! O
  25. #include "AFXINET.H"
    # u( x9 `0 I9 x# x& S* b% h' M: i
  26. + n0 S) J7 m# ^
  27. #define TRADITIONAL_CHINESE 0# S( A$ N2 T4 {: V; D
  28. #define SIMPLIFY_CHINESE 1! @$ f2 q! i  X. L% [0 G/ X
  29. #define ENGLISH 21 o) u4 j1 M' x* Z4 t9 M% Q
  30. int m_iLanguage = ENGLISH;
    , M/ F* w4 `" {
  31. /////////////////////////////////////////////////////////////////////////////
    ( L+ k. k4 z: d( f9 N
  32. // CRevAppApp
    2 T  p2 k  J7 W, e( O- n

  33. & e  Z# M0 B- _( l% A
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)  Y5 o2 k, b/ o: u; f+ i: m
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 z  g" w& m3 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' V7 ~5 x" o9 ~# X% E+ b9 F: e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & V. _" x. v6 c8 N9 }
  38.         //}}AFX_MSG
    , H8 n- E5 r0 x1 o3 }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + b/ A6 O! D5 n, a  N
  40. END_MESSAGE_MAP()
    + \1 b) w+ H% _; ]" y2 U2 G5 i
  41.   Y; r" F3 C) s9 d
  42. /////////////////////////////////////////////////////////////////////////////; q# o5 [6 C5 k1 I9 u% V4 y' o
  43. // CRevAppApp construction
    9 K* z( s* b6 @4 ]
  44. , r4 k, u  f5 x7 Z- H
  45. CRevAppApp::CRevAppApp()1 g/ X$ ]6 q# N/ R- ~
  46. {% C! R5 i- t' D
  47.         // TODO: add construction code here,
    ) I6 A3 b# v7 |; B; C3 C
  48.         // Place all significant initialization in InitInstance
    . n9 T( n2 ?5 T1 m% J4 l, D
  49.   bDisplayIsBig5=FALSE;
    " N# i, S) M3 D8 C! e0 l; I
  50.   bRestartUpdater=FALSE;
    ' o6 \/ T( S& i) ]4 Y* E
  51.   bFinishUpdated=FALSE;
    7 [& L9 p1 a$ Z! Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% S! f6 o% d, _9 ^8 }2 h' e
  53.   InitChangeDataBig52GBKS();
    # {4 v; o4 ~2 T
  54.   InitChangeDataGBKS2Big5();3 M+ c$ m; `3 y! m$ {$ u
  55.         //
    * s$ ~# m( ?. ?) h- o1 ^3 N
  56.         bClickRunExe = FALSE;
    2 ^4 M" w! }- q+ l8 v& P' C8 r( l' c
  57.         //
    / c  l- l( C* ]
  58. }5 k, A  F; m( e, @9 l

  59. . Q0 ^6 U1 {3 d' M# R) i
  60. CRevAppApp::~CRevAppApp()
    ! L9 Z0 z7 U0 G; U* U' N
  61. {
    3 \' V: e) r3 Z+ M% S
  62.         // TODO: add construction code here,
    : Z. B- A3 H9 e, ~9 w: l  u
  63.         // Place all significant initialization in InitInstance: O$ ^# q6 m6 f2 ?" @
  64.   EndChangeData();
    9 Y0 M; V8 V# ~3 l2 @, E
  65. }
    8 x" u6 [7 ]' T, U
  66. ( d3 I2 J% h$ n! g# B% I! h, O
  67. /////////////////////////////////////////////////////////////////////////////) ^/ E! U+ a9 \- r5 g3 n
  68. // The one and only CRevAppApp object
    8 c6 }4 r( H; k# ~

  69. 8 I- L0 F: [; k
  70. CRevAppApp theApp;6 A) w, y$ [0 {1 K, c: {
  71. - v1 z. @8 x8 G" o" p* b0 s1 x. b. z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 ?* Y* m; h, `8 h# U. x
  73. {
    6 `% H* [% U! ?6 e
  74.   int iEOF=0;
    $ N" I3 _) d0 k/ P) z( R9 n! U
  75.   char szTempName[MAX_PATH];
    3 g5 I3 {- p6 A
  76.   *szFileName=0;$ a* |% d+ D, o* u0 s% L2 E
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( C  J8 I( @. j: Y  v' O6 g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% H  B1 A1 ?# v, H) ]* U
  79.   {# }" p/ n2 B( q0 J  X
  80.     strcpy(szFileName,&szTempName[1]);4 K2 @' R' {7 ]8 e5 j0 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" O- D7 C4 F) u; r2 W0 u+ a2 ]+ U
  82.     {  e- f4 Z. i2 Z1 |0 a7 d
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & E+ T  ]1 H: @
  84.       strcat(szFileName," ");9 b; u* R5 x4 ~2 s- x0 J6 c+ s& C8 F
  85.       strcat(szFileName,szTempName);* k- O" D: o6 q- a5 r
  86.     }% F3 c& g: W& V9 P
  87.     if(strlen(szFileName)>=1)8 P  g1 B8 S. @0 l* X7 b
  88.     {; z; G! N- Z% j. b! \& _
  89.       szFileName[strlen(szFileName)-1]=0;; s' r9 |$ y" n3 Z  I
  90.     }0 H' j5 j$ o# g1 K/ T! O
  91.   }
    : Z# T# y  p$ I; h
  92.   return szFileName;( {& x  K4 w+ r5 @
  93. }
    ) @% x0 |$ k, y0 P

  94. + |$ Q3 S+ L% j4 W2 u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): U% N$ @8 t- \6 K! V2 o7 H/ U* K# {
  96. {
    ' L) `8 ]  ~5 S* R& v5 O  v2 a: d3 w: M
  97.   FILE *fp;! D: W: Y( f; I$ B4 [
  98.   char *key=NULL;
    ( ^8 g% a2 x3 Q5 r, H. e+ a+ S: x4 _
  99.   char version[MAX_PATH];1 K% C# i0 m! Y0 z) G. R) ^
  100.   LPUPDATEFILE file,olds;* d: @1 b( ]6 {5 ~: }, @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' k0 M1 _! R- T6 g( r

  102. 6 n/ d3 P/ [$ K1 ~) y# L0 q
  103.   UpdateList.clear();
    ! N/ L- p& z3 T& d: V6 {: O! j
  104.   UpdateFile.clear();0 i* \* g4 v8 w! H; \* e
  105.   if(GetFileAttributes(filename)==-1) return false;- Y4 v: k2 b1 W) b
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - ~5 e. c# z) n! y1 _2 ^( w6 g
  107.   fscanf(fp,"%s",version);
    $ d' K7 l4 R$ O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 {7 f. u" P3 J! b
  109.   while(fscanf(fp,"%s",version)!=EOF)$ M- A4 ^5 ]$ @( J& E8 k' h2 F& A
  110.   {
    0 {) }9 {. H9 u0 j. p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ m/ H  h! J4 D2 H" S0 r
  112.     fscanf(fp,"%s",file->path);
    1 j( u, @9 ]. S; u8 x( Q9 C7 p
  113.     ReadFileNames(fp,file->file);
    8 ~% j4 O2 V8 E) [8 c
  114.     strcpy(file->full,".");
    : ^2 I% H4 D* w( }/ g, N
  115.     strcat(file->full,file->path);: W9 z8 h. |% d' _/ R3 f/ t
  116.     strcat(file->full,file->file);7 v0 Q) E' ?; Q: K0 R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 v' G8 F0 h; s! h8 x
  118.     {! O) @, D* z! r  {) ~* y3 n; g% D
  119.       file->vers=(float)atof(version);7 n/ J6 ]7 R) v1 s6 b
  120.       UpdateList.push_back(file->full);! y9 t( u- F( P" G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      T* Y$ z) D! V% b
  122.     }& @4 K+ T9 l. W: a. V  @$ @
  123.     else
    1 L( f0 a2 g3 O) E$ f$ Q4 e
  124.     {$ C; c' \! m5 A4 ?, o) Y
  125.       olds=(*p).second;
    ' o. d  J6 O4 Z! a- d6 W1 e
  126.       if(olds->vers<(float)atof(version))) P% ~% S8 W/ Q, j2 T
  127.       {
    $ N* ?4 t9 C6 d
  128.         olds->vers=(float)atof(version);
    $ u: s% a! a, |1 N8 K/ ~  ?8 T
  129.       }
    ( v6 L1 v2 M% X/ E* s7 C. b
  130.       free(file);
    & F# c* g+ {3 X  x7 W
  131.     }) P( K1 h" m0 T, x. C/ @  a
  132.   }0 H. ^5 w2 M$ x: Z/ K
  133.   fclose(fp);
    - Y1 G. x4 ]  x- g( c4 v# t4 s
  134.   return true;
    ; M  L+ L+ Q5 r$ a& @$ p! }
  135. }& [( x, H+ \% h+ h
  136. 8 X. q% S  q8 l3 @- O0 i9 F
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . y# D. l0 t& k8 A2 {. d0 w
  138. {
    8 B6 j2 z* i( R0 v6 e
  139.   TCHAR  szFull[MAX_PATH];
    ; s1 G2 D. y, D% p' C
  140.   TCHAR *token,*inter;
    6 I$ {( j2 K. Q0 H
  141.   *szPath=0;- U: L6 _$ g3 G; W7 |& Z5 J
  142.   strcpy(szFull,szFullPath);
    6 k: ~" q- X8 f, u0 s2 h
  143.   token=strtok(szFull,"\\/");
    , T, Q$ k, {% Y5 X: q* Z& U
  144.   inter=token;
    1 e- S& l& e$ A# s! Y
  145.   while(token=strtok(NULL,"\\/"))) E! U/ l- v; R0 [$ N0 a
  146.   {
    6 {  z9 g3 L& ?: f8 }
  147.     strcat(szPath,inter);# }7 ^7 M& M4 c0 c- |6 z
  148.     strcat(szPath,"\");
    8 j& d. z9 Y1 n( j4 a2 e* c: D
  149.     inter=token;/ n( J: }5 r  d
  150.   }
    ) C3 ~& d) A2 }# K: U2 R
  151.   return strlen(szPath);
    9 ?  f1 Z% E0 u8 e$ u- Z
  152. }
    4 V" m# W6 K: G  [# c8 v
  153. + K4 V# U; M( ^) h9 e( }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # b. v6 [' D* |& \
  155. {
    3 U( X) U3 ]; Z$ g+ H
  156.   DWORD attrib=GetFileAttributes(Target);- c2 o+ Z: @" N& _. B  ^' L
  157.   if(attrib!=-1)- n: e# v- }% T% |7 X+ ~
  158.   {
    * n" s/ q7 n' E: g* z/ z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 F3 ]4 ~/ o; T7 m
  160.     {3 D- Q8 {" b$ J9 N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / T5 d2 q/ h6 h: w$ p0 ?
  162.       SetFileAttributes(Target,attrib);& w( l! z, V" w
  163.     }1 e5 [- u! J6 }8 T: L1 n/ K" m
  164.   }
    ) M3 D2 G8 Y2 K6 B$ }
  165.   CopyFile(Source,Target,Erase);7 s4 N' r5 B2 C
  166. }( c3 w3 Z5 l  x. ~% ~

  167. ) t4 W& f) K2 k2 V( Z; _+ Y7 B
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 V' p& Y6 u7 C) d9 K" c, z: ~! [
  169. {
    ; c( Z/ n2 h$ y7 g4 p3 D) ?
  170.      FILE *fp;
    ( M/ F8 K- D6 d8 w8 s
  171.      char  szBuffer[8192];
    1 o8 A' h9 x9 h
  172.   va_list  argptr;4 L; a; ~" L& v; @
  173. % M1 l5 S2 M: v$ U
  174.         va_start(argptr,message);
    : p; t! Q. v  S8 l& \, x
  175.         vsprintf(szBuffer,message,argptr);
    + s- f, a  w! s* W1 J
  176.         va_end(argptr);: ]- }& K4 W. N' Q* i
  177.   fp=fopen(FileName,"a");) b' o( O. u2 }6 {' u( ]9 {
  178.   if(fp)
    : F# S9 s  \) l& }$ X8 e
  179.   {
    & R1 ]2 {* F0 Q9 Q, e, B# g$ }
  180.     fprintf(fp,szBuffer);
    ! \# d7 {8 u( ]! d1 v
  181.     fclose(fp);) E0 d/ \" b, z; E
  182.           _flushall();& `, ~$ Z0 }( Y5 X
  183.   }3 W1 q4 z, ^2 k; M1 i; F
  184. }% B0 X, L7 y. }( |

  185. ( u5 i- p9 j. Y( _* ~+ a
  186. BOOL CRevAppApp::Fclearf(char *FileName). b" l: C3 x7 B1 o( V, E
  187. {
    3 `  F9 r) u! A. [$ L1 B' M3 O
  188.      FILE *fp;, w1 l. M$ B9 R  m
  189.     DWORD  attrib;& V0 p' \& P* e; ]- {( {
  190.   attrib=GetFileAttributes(FileName);; d! Z. E( E4 i# v5 D( V) D5 T  T1 T
  191.   if(attrib!=-1)
    ; U9 T; u! W5 Z/ g
  192.   {! Z. }8 {8 K4 T) ]2 X: Z' m3 M! Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 v& w# m3 |* u$ Q6 ^
  194.     if(!SetFileAttributes(FileName,attrib))
    / n6 m/ s: L/ {9 z, @/ K
  195.     {! W* t% y' O4 [  a  f" ^
  196.       return FALSE;
    ; A7 \/ h( }  s* \  o9 m
  197.     }& i; h: i5 Q0 H
  198.   }: A8 o! g, g- z, o3 v& m: {
  199.   fp=fopen(FileName,"wb");
    6 ]3 F) J& \$ K) {- h+ H
  200.   if(fp). q* S- T) Q7 J8 j( N, N: I; }9 O
  201.   {
    % V3 u, L. U9 _% w& }# J
  202.     fclose(fp);$ O) |( _. o! ~6 d# B+ J
  203.   }
    % N# e5 E% K8 e9 K
  204.   return TRUE;/ u2 \" `. A- l. n1 p/ F, ?- K2 ?
  205. }
    # ]. `/ p7 p8 H' X  X5 u* a* X2 e4 ~! _
  206. 1 }% @. w- s) F0 k* E* C
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 m2 C' l, P  S5 o  a/ D  e
  208. {
    8 ~4 A6 ]2 R5 [( ]9 {6 |1 \3 o! C' d; D
  209.   char filename[MAX_PATH];' g* G$ Q+ b# P) Q# [
  210.   LPUPDATEFILE file,olds;& o6 m$ U0 f+ G) H/ _
  211.   std::map<int,CString>::iterator i;2 Z; Y0 m' U* b% V( b# a. U
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! e; W; W! a! o8 W( j, v
  213.   std::list<CString>::iterator l;
    ! F$ G8 {- ~4 Q. X

  214. + c% T; u% h0 M
  215.   if(bFirstUpdate)" w; i4 l- L, f  E, B; c& x2 u5 e
  216.   {6 z4 h" P' r9 p; ^
  217.     dwCurrFile=0;
    / B( X1 a: w* `" e
  218.     bFirstUpdate=FALSE;
    2 \6 y* q4 t& b5 {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 h0 y  x) _5 u: n) S
  220.     {
    1 J5 Y( ]' s: t' S( D" H
  221.       dwTotalFiles=UpdateLocal.size();# c2 O& U6 `# v8 y5 _* N8 s
  222.       dwDownLoaded=0;- W8 h2 z! \  C" G4 @
  223.       bSilentStep=FALSE;6 y! L0 j4 r  [3 ^3 P
  224.       bCompressed=TRUE;+ t7 x8 S& [- ?! N
  225.       strExtLocal.Empty();5 C: `0 A# D9 }
  226.       strFullName=(*i).second;
    8 a2 {  h; A) P2 X* L
  227.       dwProgramState=AP_CONNECT;
    9 s+ R3 O# x# F3 o6 C& B
  228.       return TRUE;- a5 \0 o& T) Z  {
  229.     }4 }% o5 k, z5 B7 F. e8 C5 C! o
  230.   }
    + L( Q3 p  g; [$ f
  231.   else if(bRestartUpdater==FALSE)7 P. m+ K* r2 [4 _
  232.   {4 G* r8 `( l5 t5 z# \" I
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" z9 R8 l/ V" w* v. B: W
  234.     {& e! \5 l) z" ], y8 P
  235.       file=(*p).second;
    ' o, c1 P7 _+ V% T# @, n0 q% h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    2 T' X) Q4 K4 e7 j7 a9 V4 V4 B' _
  237.       {' p* W5 ?! @* _6 K) G; l
  238.         olds=(*p).second;9 m1 q0 m) B; h( d& }' t  b  }
  239.         olds->vers=file->vers;/ a; p# v  a& D" m
  240.       }
    ( A0 ~( c# l, [8 H  \
  241.       else
    8 D. w8 C$ X4 ?$ E9 Z6 l3 `
  242.       {
    ! y/ J6 {& f4 l1 ^3 I$ N
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 W+ @6 }4 w8 n1 d3 D* ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# o" X  @! j* ?/ _; t+ b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# m* P" a8 ^0 W1 m
  246.       }
    3 g* \( ~* V" z  o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % q8 M5 S8 ?1 F5 r" i/ N
  248.       sprintf(filename,"(%s)",file->file);$ h8 ?1 y) M$ q5 B3 f
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- A, b( M4 P- m8 ?0 M/ a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 H; j2 {- r7 |1 k& r
  251.     }
    " D2 [# T1 w4 n0 D9 p
  252.     dwCurrFile++;
    , X4 S" J  D( W' E$ _5 d' }
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( t' M$ ?2 D4 _% f! @: i' Y* Z
  254.     {
    . ^6 y6 b# Q* B2 y
  255.       bSilentStep=FALSE;
    . Y6 Y( Z- i# n; r4 f
  256.       bCompressed=TRUE;+ D& I4 ~  y( I' V9 G  J
  257.       strExtLocal.Empty();
    / ~: |# |$ A: {) E2 p; a
  258.       strFullName=(*i).second;; y; i0 E* T' J: [3 C
  259.       dwProgramState=AP_CONNECT;1 Y2 h. O8 r1 [; n$ I+ w
  260.       return TRUE;* v; E; D6 K2 v- E
  261.     }
      H% v( l% \5 I8 a. T% m1 g
  262.     if(!bRestartUpdater)
    $ |+ b0 k* Q9 L4 v/ g
  263.     {
    & s/ q! _7 C% h  I0 \: H; A" {
  264.       int iCurrSize,iFileSize;; l. J: x4 G; Y( B3 R# C
  265.       iCurrSize=0;
    % x  f5 X, b; R9 |2 K6 g  a
  266.       iFileSize=UpdateList2.size();
    " {8 [9 D* O/ y& F: b2 e/ O, `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# r4 y6 W5 C2 p$ A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . g, r0 M; N5 E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , `6 G$ M! Y# F9 z, H0 C+ v! X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , H' O7 t* t' A" V+ p% {" ^6 q3 f
  271.       Fclearf(".\\update.dat");
    $ M& Y) V' w/ O: I9 ^& K
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 A1 m5 H! w% n. q* T9 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
      H  L$ B  X) }
  274.       {( v! w! P  B, P6 Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 q' l3 \- d; r2 K: ~4 I  s5 ~4 q: q
  276.         {6 K$ i; f! E5 ]7 H
  277.           file=(*p).second;" n' F; i) l7 F% v, u( A
  278.           sprintf(filename,"(%s)",file->file);0 ~" V# C# o6 d7 l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  |5 K+ t8 j# g- p
  280.           iCurrSize++;& J' X: Q) J$ }; X) O% p
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));8 i1 n5 E- O) ]2 X7 B
  282.         }
    : ?: }/ z1 T6 S
  283.       }" f6 B$ ^/ g1 K' Q
  284.       unlink(".\\update.txt");
    3 v' `0 A# f$ m( N* H
  285.       unlink(".\\update.tmp");! Z& G( s' i5 L* o
  286.       Fclearf(".\\checkversion.dat");- z& `5 R+ Y  l7 T8 V6 s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 T6 j) l0 B; v* K/ B9 [* W' _1 `
  288.       if(UpdateLocal.size())
    9 m8 N# Y; z, H3 \3 C
  289.       {
    " J* o2 A$ u& F7 y# A3 L# P
  290.         UpdateLocal.clear();
    8 v# ~, y2 \3 y& m' @: ?( y- F
  291.       }
    $ S2 L9 @' A; e* [, c4 ?7 L
  292.       if(UpdateFile3.size())
    7 S# q# g$ O" W# L3 k( R! B
  293.       {
    % G. g& I% r1 m, S2 Q; T0 x& u( M2 `
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # ^& _1 j- c0 z- v; ]
  295.         {
    7 G5 L7 U2 c, u5 e2 `
  296.           file=(*p).second;
    * ~4 k+ a2 C0 T; D. m' O" w
  297.           free(file);: I# A# P  v- Y+ ?: @5 k* H
  298.         }
    3 U8 }; |) u/ M, m
  299.         UpdateFile3.clear();9 |1 j$ w% x  K2 i. A/ k/ I
  300.         UpdateList3.clear();
    1 Y) m0 m# w( P; l7 {! |  f" X
  301.       }% ^5 c- p% m  E" J/ J
  302.       if(UpdateFile2.size())( g. |/ _& p2 H: Z8 `" \2 L
  303.       {
    1 f  R5 K/ C. F) }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ o! h) t2 S# H; H# m" \7 c
  305.         {
    ( }. n) y- q4 `4 d; i2 b0 t
  306.           file=(*p).second;+ o' h& S; Y6 i; d. g" Z* d9 ~2 `
  307.           free(file);
    8 D6 k; S& C/ u: k
  308.         }% S+ j: y6 D7 |4 \# `  ~
  309.         UpdateFile2.clear();: Y  ?: K0 ^# F6 H
  310.         UpdateList2.clear();/ T* f- N' r' k5 X( k* I) y2 ?
  311.       }  g# e4 Y) f  \3 m9 A" n, H, N
  312.       if(UpdateFile1.size())
    7 z" X4 b3 L- m. @$ \
  313.       {
    ; f+ G! ]; ?/ E  X7 S6 m' k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & w1 m  K8 V# q- A7 o: s6 s
  315.         {
    / n: n. f! |$ [
  316.           file=(*p).second;
    8 P! V: K& E8 w9 M/ W
  317.           free(file);( e6 r2 L$ }! P8 M; `" r
  318.         }: k+ y  t5 q4 `* T/ x0 q7 A
  319.         UpdateFile1.clear();
    0 j9 m: y( m, M* n
  320.         UpdateList1.clear();8 p( H% K( \- `+ b  X6 I
  321.       }
    0 ]. I; C  k. F2 C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 N3 `) ^5 R( d5 ]9 u+ @) f
  323.     }
    ; U, b( l7 f1 m) x  {% l' T
  324.   }
    , c5 g4 v6 o' S/ F
  325.   return FALSE;+ m+ o* V5 c( f; d# A
  326. }
    5 V2 }' y% G3 Q4 ^5 Y4 [
  327. 4 f7 D* J9 P( C5 h' G+ ~
  328. void CRevAppApp::ClearAll(void)6 w+ w* x' v1 ?# ]/ v9 p
  329. {0 \  @$ e. @+ m4 r' U% U8 P
  330.   LPUPDATEFILE file;
    , R; m: E) f" [; R: e8 C7 [" z* j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ \; o$ r  t# E: P, F6 D
  332. / G# l" Y" \. T2 ]* a
  333.   if(UpdateLocal.size())# V2 k( i" i, q" }  Z, Z( q* a- q
  334.   {2 Z/ [9 s# d. G% L, r
  335.     UpdateLocal.clear();+ K% |& Z' @9 N9 c7 b
  336.   }
    & j& q( c% n; n0 g+ o
  337.   if(UpdateFile3.size())
    3 M% Q3 J2 y# Q
  338.   {
    9 a8 G! ?- {3 d% F2 ^0 n1 z/ L2 G. n' |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- C+ D2 v, ], r8 r7 j: k) p
  340.     {
    * ^( H& e- m4 p0 z  B" x
  341.       file=(*p).second;
    $ Y. n# ]: ?6 l4 ]
  342.       free(file);3 v# E8 T0 ^' u' w/ l
  343.     }6 A1 _  ]% b( K  `
  344.     UpdateFile3.clear();
    9 X; \  b" C& f9 ?6 [" v
  345.     UpdateList3.clear();4 n3 C7 V1 }$ [, Q
  346.   }1 @7 _3 c+ }' N% f
  347.   if(UpdateFile2.size())7 |' n' M8 w8 }* O$ e' U
  348.   {" W* a8 s% n! E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 x, w7 i/ ^" P" _# T
  350.     {
      d% O; @6 F8 d9 z2 `
  351.       file=(*p).second;, P- A* }( i9 F' e% M6 x; W, y
  352.       free(file);) c$ \* f! v9 S- M& t
  353.     }
    / \7 }2 ~  @$ j
  354.     UpdateFile2.clear();
    # E3 V. A! h5 \8 v/ Q
  355.     UpdateList2.clear();
    / i2 L; h. j2 r0 g% a% r
  356.   }; ~( z' C) g' ^5 E" e& E
  357.   if(UpdateFile1.size()). n% d. S+ y5 f4 f8 D+ M
  358.   {
    ) `  r1 i. F" B: N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 W5 O* r; b2 q: z% U; p& R
  360.     {7 ~2 ?8 Q- d$ W" {" R4 j
  361.       file=(*p).second;* \+ w; A, M& K" {! j7 L2 k
  362.       free(file);8 `6 U8 ~3 g* p% Y- s2 W
  363.     }
    $ s) t! w7 ]! x, h& @/ T8 V
  364.     UpdateFile1.clear();5 ~# K$ b; i  j( ~
  365.     UpdateList1.clear();
    & U4 i" l  R7 y- d
  366.   }* G. X6 b+ \* e: ]
  367. }  
    - [3 M; ?5 w$ K# c2 R
  368.   
    9 I' X  g, u8 u
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 R: q. Z6 h! P( S6 A( H
  370. {
    . B2 T" O4 X6 n7 y* K0 T9 l4 F
  371.   int c;) Q9 h5 Y/ Z. a4 J* @0 W6 r+ u: z
  372.   LPUPDATEFILE file1,file2;
    * w" i9 x  y6 G4 K& ~8 \* p3 O/ [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" q& F* u7 q9 z9 `2 A4 k5 [' m  ]
  374.   std::list<CString>::iterator l;/ k+ u' [! Z" e
  375. 2 x' s: Q2 C" I
  376.   UpdateLocal.clear();
    & X- U; U- ~  d2 m) e9 _" M: U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . h9 `' m0 A3 r1 i$ q4 L' r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + k, Q' \$ c& z0 j7 M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 H& h# B* {- @/ K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 [) Y1 S7 {4 \
  381.   if(UpdateFile3.size())8 a' C7 \# N0 C; M# P5 }
  382.   {( e& i- V$ h! i6 `( f; `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- B) h# J" \2 c
  384.     {
    4 C1 B+ g) ?+ b) Q0 r
  385.       file2=(LPUPDATEFILE)(*i).second;( l7 u# y; f6 [2 o6 r0 u) L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% z; i- w* Z0 h" u* F5 g2 w# P4 }& i
  387.       {
    - f' q, m: Y' a. c
  388.         file1=(LPUPDATEFILE)(*p).second;
    % T: J. F2 U4 a  k( ~6 {+ R
  389.         file1->vers=file2->vers;
    % W4 Z/ |' l% b- M9 D
  390.       }5 q2 o, S2 W" e- |; U
  391.       else! v. T* q5 u. o; i! p
  392.       {
    3 _0 b6 o4 D" S: U! k. J: Z7 p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ }/ M3 V$ X/ n( ?1 V0 Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: S! b, H" l9 M. h$ B; O9 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! w* s- Z2 v, q4 [" K
  396.       }9 p2 S& q: Z' E, \; b6 I# B5 t$ N- p
  397.     }
    + D3 |, Q+ J$ q  o* a) Q! E3 \
  398.   }% t1 B  o( f" C3 {6 G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # H1 q9 U, }, U
  400.   {' W5 n0 K# C& ]* p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! O  a  z! b& m2 j1 b* q7 b/ J
  402.     {( i2 G& O3 o1 j9 v( w+ R
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) ?3 u" s' _- q. B. p& y# O
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      I1 a% N. [- D7 b- B* X$ e% ^
  405.       {, [: ]+ {8 q- f
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 S& R8 u1 A7 e( S
  407.         if(file1->vers!=file2->vers)
    3 d, X- N% @' ^$ F7 d
  408.         {
    4 e9 Z* ]) I6 f# a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / Q) u9 q9 W7 G2 z7 ?2 ?6 V
  410.           c++;% Q1 S# u9 V% e& o
  411.         }- q- X8 x  }5 g9 t" N3 c4 k( F7 ^
  412.       }* x* L0 k7 N  i) i
  413.       else
    / s1 ]3 h9 u& ^! [
  414.       {
    9 h2 A! d  G) |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 x7 f" \* R" X# V0 e0 p. I/ Z6 ~
  416.         c++;
    7 w1 _- q' i. A- \* a- a
  417.       }
    - g) S3 ^: ?2 l
  418.     }5 B9 \+ S  Z" Z6 m) W8 o
  419.   }+ l5 f+ u  u# j9 E
  420.   unlink(".\\DownLoad\\update.txt");
    & x2 P# `& S! v% }' z: j# V
  421.   if(UpdateLocal.size()) return TRUE;  |- ?# \) G# [% r& _9 ^- z2 z
  422.   else                   return FALSE;9 B0 W5 c* ~6 H1 K4 c& v8 K
  423. }
    . g: v8 [( n4 T& _
  424. ) }7 n2 P5 E1 Z& C: e3 c! Y1 g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      L( O5 o9 C1 N& v
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + j: Y! t  T( i  \
  427. . N+ w4 ]# f, Q* K/ d8 P
  428.   V" T" J" [9 N( M7 C9 x
  429. 8 a" L  @. Q- \& T5 e1 C* K* }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    % N1 N% [8 n7 s: p
  431. {
    9 x. G. s& D2 d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & |3 v- n% i) k* D6 U0 c  d( [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); j) p6 Z4 t( r0 z/ x" }
  434.   {
    1 A- a2 y; @% i1 D$ s7 ^# w8 ~
  435.     char szLanguage[50];
    # t, S+ T1 m2 j0 K- @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      ?$ j6 O) y2 n' \1 L! q, z' [1 D% Z2 }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) V% m) S2 @$ O% f9 Z3 h
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" q- l' s. x0 s; r0 Y; N" P
  439.     else                                   m_iLanguage=ENGLISH;7 _: f! F* q1 e; b% x
  440.     char szRegister[100];' j" W8 V* O, N4 o) c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 b. s1 w% S% ?5 ]1 D/ O
  442.     strRegsName=szRegister;7 c$ E+ D2 t9 G0 A
  443.     char szPatchURL[100];% @$ u, C+ i8 }7 C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 E$ \5 Y# h6 q' \( x: M  U& k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % @3 B/ x% }& k. O9 k
  446.   }  g3 f- y, P4 ^( K4 e5 \
  447.   else5 ?4 c$ P) ]- X( L6 ^1 {
  448.   {# u4 `4 `) R: T$ M$ f& o& h# G7 ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % T6 w& _" @3 }) w" H& ]$ _
  450.     strRegsName=DEFAULT_REG_URL;: x) d* g( v  ~( V
  451.   }
    ' X1 m* A/ U7 z) N" {; @
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : I1 b& E# I$ H. H% c$ g4 U$ z
  453.   {
    ( c5 j- a6 j4 l" R
  454.     char szIP[50];. G1 P% @5 P2 y2 r( \
  455.     char szDIR[300];! q# I- R7 [9 ^- Y' h1 E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* }5 T" Z5 B% s% `* X7 G5 L. G
  457.     {
    3 K# y- v& s$ o/ o- B0 U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 y" Q4 \0 y) ~! r6 G5 Z5 \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% ^+ C4 O# W# _7 k- N! |
  460.       strHostName=szIP;
    3 G  h+ Y2 N8 c$ K! n
  461.       strHostPath.Format("/%s",szDIR);- N0 K0 r0 r9 ?0 Z3 d6 B
  462.     }
    # n& b. f5 D. @" n
  463.     else3 u$ D( B, j; I3 d+ |% {
  464.     {: r' c' c) h4 ~% y3 h! Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + g, x) K& Y1 c3 R7 }
  466.       {! @# W1 G4 C- Q" a1 s
  467.         char szLanguage[50];
    * n0 ?: J5 ]3 B" M/ P6 }: `$ u" X2 r: i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * }) P! A; g/ \2 u$ a! [4 K  I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . q# R7 I8 [: E7 M8 g0 q; }' e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 h& ^5 F$ r' Y; d2 O2 M
  471.         else                                   m_iLanguage=ENGLISH;% T( z/ K  U) q9 `3 j' \9 [4 I
  472.         char szRegister[100];
    ; R1 G5 u! Y8 w" m# N  W1 Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 {( I2 C/ `9 ], e3 o) y* T( F
  474.         strRegsName=szRegister;
    3 k$ I6 p. L* n9 U! A) B. o- ?
  475.         char szPatchURL[100];  H. P1 E3 _: }5 X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 w: V- k/ M2 F) V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' K4 X1 L( E+ _0 q0 R
  478.       }
    , ~; B. }! P$ t0 I% Q; U; t
  479.       else8 D2 x" j% S( y2 W* T+ y5 F
  480.       {) M) f  i& `  J; H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( J. u6 j0 P; y" {% ~4 H' q1 n+ R. k
  482.         strRegsName=DEFAULT_REG_URL;
    2 O( X% \  Y" A3 z
  483.       }
    % [% d( i, A- a6 n. b
  484.     }/ L% c6 X7 w* g( \. Y1 t
  485.   }
    + a, y7 e0 g# V8 z
  486.   return true;+ m" B- w( U% y+ |! x# W
  487. }
    8 T8 I" H* o! g4 }0 W

  488. 0 g! l4 c" {8 u# k+ m; f
  489. #include ".\ZLib\unzip.h"
    / D; _$ i' k: l' h) G9 l. k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 j% l1 F, H9 Z( U* M! i# D% [
  491. /////////////////////////////////////////////////////////////////////////////6 b" J: i) s* Z( l
  492. // CRevAppApp initialization% F4 Q5 V/ n! @9 k& r! u- K9 I

  493. 7 Y2 b$ C: w( m' H( f
  494. BOOL CRevAppApp::InitInstance(): a, E" @; ]. v, c! N" H( ?. r! [2 X
  495. {+ A, r$ T/ y+ C- }5 ^9 e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 K  V  a7 ~' j5 O

  497. # {; o/ k: M9 U) {  z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # X4 |# Q) H+ O1 {5 u& r+ s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 U' T0 S: `/ h2 i1 l8 \3 x9 h, n
  500.   {
    , W% q+ Q  ]! }/ q: I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 u  {* H. d. W2 @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' W1 \7 {5 ^2 B3 s8 n8 B1 ]) q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : B( J+ E" U6 a, k
  504.     {
    ! W! S6 i. R& X; l, N
  505.       strcpy(szPath,szPathTarget);
    ) c9 p6 \1 J* z8 q1 l3 J( w8 `; J- n
  506.       SetCurrentDirectory(szPath);
    , A& w6 D& f, S" N8 ]! L
  507.     }
    ( G( o: B( @9 r! a* P
  508.   }- h+ B) w2 n  N( g6 v( g
  509. #ifdef _DEBUG4 K8 @- J& p3 d' l3 W& X* }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * s' {1 M+ u2 P, N0 D
  511. #else
    5 N$ S: G3 T8 L- A8 a2 f9 U8 H8 R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % f; u* ^1 c8 V6 ?
  513. #endif$ f; {- s- W& t! ]6 i& x
  514.   {5 G: W/ F- T# r! m
  515.     char tempFileName[MAX_PATH];, B9 M5 U6 A6 K6 e' `9 G
  516.     strcpy(tempFileName,szPathSource);
    * E( P6 |8 q! o+ [5 s; t  Q/ E
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 A1 A, c$ p$ j+ ^8 |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# ~' r3 D" l. J6 H, I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ G3 b: e" N& ?/ j* z# Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) {) E5 Q' T+ ^6 k( \0 U2 h
  521.     return TRUE;+ D& w' K8 l2 k: d# M
  522.   }
    " R# D: b# J% h9 T5 y6 u6 }
  523.   // Nuke 0118: Delete run.exe
    3 j( E* f2 ?+ E$ @) y& Z. @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 A' C1 B+ P/ e' B0 e. f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! v" c0 K% t# v/ f
  526.   if(!ReadCfgFile("Config.ini"))
    $ f  ?) G  b$ ]8 J( s5 G
  527.   {! J$ _% q0 |: h1 |" e6 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 R, p1 l1 M8 B0 q8 D' N
  529.     return TRUE;3 t& k( T, n* o& I
  530.   }1 W4 e- W1 f% @
  531.   HANDLE mutex;4 f. i) n# O2 r+ Z9 I  s0 T5 R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ K% Q4 z' e: d5 L
  533.   {; q8 i4 Y3 T  e1 h7 d% V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# q8 x6 v2 z8 K. w' ?3 }7 g
  535.     {( f" L  ]) G5 `$ i# Z. k
  536.       CloseHandle(mutex);! V$ j* Z* l6 ~* y7 F' G. `# G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + f- w( d7 _% s$ ^4 u* }
  538.       return TRUE;1 K$ W2 i  h! a6 U" u! f( v
  539.     }
    + o. i# `8 v3 g8 c
  540.   }  . G/ ]+ y/ a  ~# e* h# J: P  f
  541.   CloseHandle(mutex);
    9 a( J, r, \$ X9 ]3 Z; u

  542. 4 @# }* ^& l; P, t8 |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ I% E- E7 c4 a  C: q

  544. & W' T* D% V: W; K- [
  545.         AfxEnableControlContainer();/ i& @1 R5 ], d
  546. , o" b7 A1 S4 V
  547.   bCanUpdate=FALSE;$ s; n. }1 Q9 a- d
  548.   dwStartUpSteps=1;6 y5 F/ a0 _' e  y! j8 ]0 T+ F
  549.   dwProgramState=AP_NOTHING;/ ^& m( `, Y5 k: I( s
  550. 4 m$ ~0 \! @# v, t3 C. r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ A1 p, m7 K9 N4 K5 E; d$ T
  552.   H/ c! o# R7 `% ?8 O( I1 J5 z" I
  553.         // Standard initialization! X% _  h0 D7 F) `
  554.         // If you are not using these features and wish to reduce the size
    3 E1 i& p5 L3 a8 C2 M
  555.         //  of your final executable, you should remove from the following- G. n5 a; a. |+ G4 b: }! i
  556.         //  the specific initialization routines you do not need.
    5 D  \0 k# u4 [
  557. 7 m- g; T5 m- N
  558. #ifdef _AFXDLL4 }( |' S# v- e$ Q) A* T9 S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % P4 U8 a. ?% [6 i8 i
  560. #else; U% |' |- B# x& I# h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! c, m9 f0 H/ ^. v6 C: B( W3 h
  562. #endif
    ; b4 }# g$ H0 @

  563. , c9 o7 f, P1 f% e2 S* D( P
  564.   dlg=new CRevAppDlg;+ G7 b/ j3 E1 g+ X6 V
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 b: m  w2 \: r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 V8 ~1 i( w# b0 R8 v& ~
  567.   m_pMainWnd=dlg;
    - {& ]" X4 w; s  B% A

  568. 3 g: \7 j. `3 a7 _6 o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 D3 v$ ^9 b+ C6 s% ]! _1 i
  570. - y* G& B% ]8 Q6 A9 O  J
  571. //  GdiplusStartupInput gdiplusStartupInput;6 r4 B" `4 f2 T; _8 M$ g
  572. //  ULONG_PTR gdiplusToken;
    ' N- y6 W8 _: E1 ]+ ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 x% S+ s. K$ _7 K

  574. 7 x3 Y3 a" [& a9 B
  575. //        CRevAppDlg dlg;
    ( n  J. ~& w# G7 \
  576. //        int nResponse = dlg.DoModal();; S" R  i" D2 x$ K6 X
  577. //        if (nResponse == IDOK)8 P$ m. i1 A& K, O* V  C" p2 x! d
  578. //        {
    ; A+ T. \& F: t# `8 }
  579. //                // TODO: Place code here to handle when the dialog is
    4 ]+ g& H3 K" s  N2 E
  580. //                //  dismissed with OK
    2 C: M7 h7 `! e
  581. //        }
    / d$ ~# Z& @! O9 P9 G" z
  582. //        else if (nResponse == IDCANCEL)5 _2 h/ H9 s1 r9 b5 k! O
  583. //        {+ h# w$ a+ D& e+ g5 g# y+ ^- u
  584. //                // TODO: Place code here to handle when the dialog is( B2 U5 y7 b2 P( L/ |' x
  585. //                //  dismissed with Cancel
    . b5 v6 [3 X- E4 l
  586. //        }
    * |  G7 m+ g/ g; [' N; C3 c
  587. " i' j( D& g- P9 D
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 X1 N6 X% p' `- q+ _+ v
  589.         //  application, rather than start the application's message pump./ |. }+ t# `& y; w* }
  590.         return TRUE;5 G% n+ |3 y7 r% v6 o. P* c5 V
  591. }# g1 a" g" a0 k4 e* _2 y$ K1 {5 c

  592. 1 F! @. ]4 c3 F8 @7 R5 d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 y3 l) J! A  {* B
  594. {8 W2 y4 c4 ]3 G! G2 O$ L) G3 M5 ]" C
  595.   int i;" h4 b* v) y+ G0 ~
  596.   char *szRet;
    1 v' ?3 @9 b' W  C: b$ `
  597. , O  n/ ]- b+ x7 s
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 W6 ?6 U; _9 f8 A; y/ O# v3 H3 X
  599.   if(sztoken)
    & o1 U, S% J% k3 {  h
  600.   {1 K# T% W. W; g& T0 H7 q3 r& |
  601.     szRet=&sztoken[itoken];
    ! ]6 c- v7 x, |5 s
  602.     while(sztoken[itoken])
    " I5 M; j" ?. t5 H
  603.     {" \2 O9 v/ E- N) o
  604.       for(i=0;i<(int)strlen(token);i++)
    . O7 p2 w7 h7 x0 Z; t$ d' ]( a
  605.       {
    $ l8 {1 s/ X: B/ H& v' J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% Q) X3 X" T1 A  r
  607.         {( r) p8 P; y( @3 J9 n0 C. ]9 d; e* X
  608.           sztoken[itoken++]=0;
    7 ~" @' ?5 y* Y7 Q( ]2 o  x* h3 ~; h
  609.           sztoken[itoken++]=0;  e  A# X5 Q' X/ ^) k
  610.           return szRet;
    3 J1 U7 m- v8 g* q
  611.         }
    $ b* I) O; N6 j
  612.       }
    6 O% H- Q9 O" Q
  613.       itoken++;- ^2 v% J/ w+ A. }# e
  614.     }  s$ a' ]" ]7 X) N
  615.   }' Z) l9 ^) K9 a$ D8 ~0 Z
  616.   return NULL;1 o3 b1 P, R( R- d1 t8 ?
  617. }4 ?$ M7 U9 o! @* s' b2 S5 T/ ~
  618. 6 M) p) ~* ^. L0 k$ @% y6 {
  619. void ProcessProc(long Total,long Current)2 W1 F) z" @  B8 ^' D& ]
  620. {$ Q  L# {/ I" q! v
  621.         MSG msg;
    ! E7 W! V* q! V8 @$ W3 U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : b* A  a( D4 E, d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' M1 x' d1 f) Z* A/ W* A* q- L. s. H, V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) d2 d# B, o2 H3 L8 z
  625.         {
    % I/ P9 l3 f  q+ Y" R1 Y, \) W( l
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ h- s5 V7 |7 R  T6 T: O
  627.                 {
    1 f- i: y0 u% V+ C/ `
  628.                         return;
    " f8 w7 x' _6 f! A
  629.                 }
    , a" Q4 c5 N! ~! Y7 L
  630.                 TranslateMessage(&msg);6 V0 c) M/ M! T8 K6 t/ {& \
  631.                 DispatchMessage(&msg);
    9 v) E$ Q. M2 b6 V) L
  632.         }       
    ! v4 {6 K2 N3 |  u2 @
  633. }
    - ~, N4 X% e" A' U7 m
  634. . G1 t3 _  s# ]6 u0 W, Y; f
  635. BOOL bFirstChar=TRUE;
    : B& d* ^) v) t: |

  636. & r/ I. g  c0 v7 j  h. y& r. N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * \1 S. N; L+ i% T" Y2 g
  638. {
    6 z" i6 z  H& ~1 M) O
  639.         // TODO: Add your specialized code here and/or call the base class% F; v& V' g  M6 G8 }
  640.   switch(dwProgramState)
    : z& R) L) P/ |' f5 [
  641.   {
    & d8 T8 h- s; h; u8 _1 A* E
  642.   case AP_NOTHING:
    % T5 \. |( `% R4 i% c
  643.     switch(dwStartUpSteps)
    7 X$ v8 j( L5 C9 M; M1 w" I8 L
  644.     {& _1 H4 d' Y( {: z+ P
  645.     case 1:7 x5 t  ^& k. `4 \% V3 o6 Q
  646.       {  m' V0 X, d7 x; a3 }8 ?) |
  647.         int i;& F4 p  a( [1 P: z/ C3 d. y( v
  648.         CDC *pCDC=dlg->GetDC();; D4 i4 W5 i  t4 U  K
  649.         HDC hdcwnd=pCDC->m_hDC;
    / Q3 S  ~2 T1 w. q
  650. //        Graphics graphics(hdcwnd);
    1 }) R8 e+ f  I' k. f  R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! Q, ~  q4 Q9 P2 ?. e. V
  652. //        INT iWidth=bitmap.GetWidth();
    . L+ l* @9 \7 m6 E) b
  653. //        INT iHeight=bitmap.GetHeight();
    , v7 u% p8 z* k& A6 O  u! m' w
  654. //        Color color,colorTemp;
    3 _3 E0 A7 Z" g9 S8 p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% r6 n2 u. k' ]+ ]0 g7 g5 K1 Q* s
  656. //        {. S. v# W% o8 s, x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( o' C3 A2 d6 j+ [. j9 |+ N
  658. //          {) z! N6 w$ C. ^% w6 t( x7 T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 M$ q, ?5 o5 P( B2 m$ Z0 Q
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 u5 E% Y+ R: }2 K
  661. //              (BYTE)(255*iColumn/iWidth),: N& [% U) R) ^9 b! L  J- O$ y
  662. //              color.GetRed(),
    # r" j0 N  Q& l' G
  663. //              color.GetGreen(),( Q9 W; d& J# D; k8 K' |
  664. //              color.GetBlue()));3 O0 h1 a, H) p; Y! y  t9 N* j4 m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 W3 d0 t5 H1 b: A, U1 x3 M
  666. //          }
    + {: A: _/ {  N* ?' F  V: v: I
  667. //        }- M, s* I! Y" f. n) i2 U
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ C8 C, j% [, y1 b
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" ^& W7 K2 H) @( F$ b) d* V1 b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- n6 V$ R! D' D9 \$ E+ N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& k6 f# q6 p, J1 x- o
  672.         for(i=0;i<240;i+=8)0 R8 r& x. }8 }3 a' S9 j7 y. a3 g
  673.         {
    / L2 ~; p: B2 A6 t4 J& L/ ^% f9 [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 ~; U- M0 V# h* X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- k/ D0 [( h. D& h; q9 p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 c0 K6 S8 N5 x. {/ g
  677.           Sleep(33);' ]- X. P$ y5 f: C; t  ~
  678.         }" S2 v% m, o" ?. E  Y
  679.         Sleep(1000);
    5 p' u) X2 H; S6 f, S
  680.         for(i=240;i>0;i-=8)
    1 c1 D4 ^/ n. [6 k* i+ [0 C7 R
  681.         {
    ) x7 v  P. g  H4 i4 O8 I
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 ?2 L8 _: K  u3 v8 H* a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) V6 R+ d* y% E
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( T( |" H5 A+ x* ]7 G8 e
  685.           Sleep(33);0 n  R4 m# K% k$ u# }
  686.         }
    , x8 ?0 V# X. ?" Y! ?8 m/ I1 `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: I8 m, |' j) ^& Q0 U  L9 F" R( E
  688.         dlg->ReleaseDC(pCDC);8 G( i1 F& p( g; L# O1 m
  689.         DeleteDC(hdctar);
    5 {/ [+ j. ^6 @$ N8 o. K, M% e
  690.         DeleteDC(hdcsrc);7 `  L# Y+ m, C
  691.         DeleteDC(hdcorg);
    ( ^- b+ p  ^+ V. g" }5 A9 [
  692.       }
    ( a: z- d4 M1 W' \$ i  [+ j! p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ! _& l/ M( b  ]4 ~6 _' x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 Z' b8 K4 a( Z& f7 o  T; K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 E/ A- H1 f. I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' z* \2 G  @) k! E& w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . t% ?5 m/ L: ]; ^" d) s
  698.       if(!Dn.Connected())7 I5 y* p; y- X! ^5 C& J# ]
  699.       {
    " f2 C% A, f& T$ G$ Z* Y
  700.         dwTotalFiles=1;2 I: B/ [+ r/ P! g3 _0 z
  701.         dwDownLoaded=0;- O& R% J1 Q! ^( {. Y  C
  702.         bSilentStep=TRUE;: [" R, Y% o  |( \
  703.         bCompressed=FALSE;
    ) }( i6 D( B6 W$ {) K- A: |
  704.         strExtLocal.Empty();
    $ X" _# |* O) B
  705.         strFullName="readme.txt";
    8 c# u# i: C' j# ^/ ]& }0 I  F
  706.         dwProgramState=AP_CONNECT;
    9 K6 \9 i$ n& b& ]# k) [
  707.       }
    ( b- b+ Z5 z$ p4 _% [& f% o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    & K" S) l( _* H2 T( u4 f
  709.       dwStartUpSteps=2;
    ' A% ?  g% C7 s- x; W% \
  710.       break;# o2 M; ?: [" k8 K
  711.     case 2:
    4 \$ B+ b: l( ~$ a; h( c. y* A2 T
  712.       {
    . K' \9 d, r# n) @" b. V. i
  713.         int iEOF;/ t" M- k3 F. V; a" Z, ^9 q
  714.         FILE *fp;
    ' _9 H/ P$ S/ s
  715.         char szString[512];
    4 F6 N" x7 t7 c; j2 d
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' V- a2 I% T# J/ q* u# [8 r. Y
  717.         if(fp)$ A, v! R$ K" {6 X: c7 ]
  718.         {
    5 l4 j7 p8 x  B6 e) X0 y
  719.           do
    % J% Q- |, n- o1 V# F
  720.           {/ T9 I! y1 n0 Q: U" P
  721.             iEOF=fscanf(fp,"%s",szString);3 f8 c' M& |* U* z
  722.             if(strlen(szString))
    3 W& D" F& X1 o/ e
  723.             {
    ) q- S2 ?5 S! d. z! ]
  724.               if(bFirstChar)
    1 Q! T2 C& V2 w# s% P
  725.               {
    . R7 d2 l/ p2 \0 @, `* L8 V# V) |
  726.                 bFirstChar=FALSE;
    " S, d$ @1 y7 u9 l# T, r
  727.                 bConnectIsBig5=FALSE;+ O1 v5 i: c$ @" f' |9 X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 d; }) v4 x9 G2 ]1 `
  729.               }
    - _: ^. e0 R1 j3 [, O$ s
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, E+ h1 h' @( t; C8 J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      K7 L! }4 A: I) c+ h/ J
  732.               dlg->m_ListText.AddString(szString);1 \* X  x' \) w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 e* l& C; H! s; h" f9 u! K9 ]( U
  734.               *szString=0;
    8 k" Z& j$ ]  c; p4 Y# e# k: ^5 A+ j
  735.             }
    , ~) E8 `5 m9 a4 d, E, r& ?
  736.           } while(iEOF!=EOF);
    + L" f, v. K& G3 o# Q# p
  737.           fclose(fp);
    ( {4 i6 ^  |2 M! t" O
  738.           unlink(".\\DownLoad\\readme.txt");
    ! \& u" }2 d4 D1 k# i8 v. `! y  b
  739.           dwStartUpSteps=3;
      r& \0 a( i" C' Z0 G" J9 c
  740.         }, t' Q/ N8 [0 ^6 v  s
  741.       }
    ' r* p) a7 N; n; Z% h% C  ~
  742.       break;
    3 U7 u( G( Q1 V0 k
  743.     case 3:# T5 R3 Y  k( j" V* U# t. _. I
  744.       if(!Dn.Connected())
    ( c* M$ e3 ?- P2 i
  745.       {$ i1 F% h: C, F: n1 c
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 q3 ]4 a6 U# m! i  s9 {
  747.         dwTotalFiles=1;
    7 N5 ~- ^3 ?& S1 t) ]/ P. r- R
  748.         dwDownLoaded=0;- C3 o8 Y1 l5 Z7 z8 O- [9 `
  749.         bSilentStep=TRUE;
    6 r! n2 K1 z( y7 x  |# n6 M
  750.         bCompressed=FALSE;# R& x" E. g3 d7 w2 q1 t
  751.         strExtLocal.Empty();
    ) l- J4 A, z6 P. M6 \
  752.         strFullName="checkversion.txt";
    6 J4 u2 z/ E7 |
  753.         dwProgramState=AP_CONNECT;; g: m. K6 a" c4 ]
  754.       }0 h! D, d, y. J! i( ?
  755.       dwStartUpSteps=4;
    4 v6 ^; ?6 n6 {6 a: h
  756.       break;) N9 l8 _9 N* a* Q5 [5 R% j7 K
  757.     case 4:
    # ~) D5 H* Z, l/ b& F+ R8 V, |" G
  758.       {
    8 E0 L1 q# x7 X1 u
  759.         FILE *fp;
    & S( o6 {2 s9 U7 v$ i
  760.         char szString1[128];
    * P3 ?0 V, K( y3 @2 f1 r- v4 T
  761.         char szString2[128];
    0 x! S7 W% ?7 P: c6 u; Q6 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 M( U  d, n) a! R8 ]
  763.         if(fp); ~. o7 ]) L% U5 g
  764.         {
    $ c- ]( L# [( ~6 p$ E0 ?; K2 F
  765.           fscanf(fp,"%s",szString1);/ M' }5 |% H$ ]* `; R$ R" ?
  766.           fclose(fp);
    4 O) x1 E4 p8 w; v. C7 d0 L
  767.           fCheckVersion=atof(szString1);# M$ b+ E+ \' U, f( c9 b9 j* D! X& r4 d# z
  768.           fp=fopen(".\\checkversion.dat","r");0 l/ W! q* Z" }: v# g
  769.           if(fp)* m+ I3 H$ w. |% c0 u, N3 w, ]
  770.           {$ S- t' S. b$ N: h1 ^
  771.             fscanf(fp,"%s",szString2);
    ( M8 M2 J9 e, m! T1 X
  772.             fclose(fp);
    % @: K# H5 ?' Q8 d
  773.             if(atof(szString1)!=atof(szString2))
    # h0 a7 y) C, ^0 l0 p0 K( b* C1 i: _
  774.             {
    8 f0 B; n" d  J' H% E
  775.               if(!Dn.Connected())
    : G2 n- ^3 j) I4 X# B
  776.               {
    8 [4 P1 ^8 C5 }& W
  777.                 bFirstUpdate=TRUE;, M) i% B. A( E( b( ?$ x
  778.                 dwTotalFiles=1;3 E8 R  |  W$ [$ l/ ~4 h
  779.                 dwDownLoaded=0;
    . z2 M( q, \$ o; I! g3 `
  780.                 bSilentStep=FALSE;  S9 j1 _; {7 ]/ {7 Z: H
  781.                 bCompressed=TRUE;7 `9 `: |$ x2 X* S2 K- n' a
  782.                 strExtLocal=".\\DownLoad\";
    , h0 R' W4 k, r5 k6 y* M% V
  783.                 strFullName="update.txt";& ]# S# ~, I0 ?0 G
  784.                 dwProgramState=AP_CONNECT;
    " s" M- i+ s. u9 ^( `9 ?' |# n
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 y2 X7 R' O, {9 \0 n8 f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & |4 w* a# {/ e( t# z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' k# z! \. {& b8 Y- `) l

  788. 4 b$ x( _# K0 j/ s, K% I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& {6 {: S2 k) M6 S
  790.                 unlink(".\\DownLoad\\checkversion.txt");# \2 g+ D# D' t2 B: F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). {9 O8 P( u2 c5 V5 F# y
  792.                 {
    4 y0 T2 ^* K$ E
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- @5 S- E4 x6 C+ d( L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& k& o* u, v& q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 [% L3 t5 E, t3 [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 S: |& e2 |& ~3 @7 M, c" |/ s. k

  797. # X6 Y3 |0 [' p% ~+ I9 R
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 N( |5 c2 c' O. ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 O+ i0 }+ u- y+ W8 W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ E" Y6 D: Z' L* E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 y' C* M3 s; K2 u7 |2 o
  802.                 }
    , E( u# ]5 V' \. o- E. p
  803.                 dwStartUpSteps=5;6 {0 b" g$ N! ^0 N) c
  804.               }8 O$ T  M( w& f/ A: w3 w
  805.             }
    5 h( }- Y9 P9 x' n/ p
  806.             else, m8 e  E7 a& f* A8 e4 D' X
  807.             {
    . c# L  \! x- }) w7 N* L, M
  808.               unlink(".\\DownLoad\\checkversion.txt");# G: D3 ?, y" p3 p# P$ c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; c* B' c$ z, t9 y1 X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& q/ h% C" H8 N1 i0 `
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: a4 K  W, O7 y, }2 o& Q4 }

  812. * l. ]& l9 ~! S7 l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 B/ Z4 g- r/ W8 A- E  c) ?3 K
  814.               dwStartUpSteps=99;
    / [, q4 D0 F( ]5 R2 h5 c: \
  815.               bFinishUpdated=TRUE;
    % t4 P: U# S& b
  816.               bCanUpdate=TRUE;
    5 e" C, ]- W4 S4 ~$ P% O
  817.             }
    % ^- l8 Y. T6 f" B2 K
  818.           }( L2 s& W/ [! n2 h) T+ s
  819.           else8 E* g, S2 t6 p# ~
  820.           {5 w. K2 D( I% p5 W: I4 m
  821.             if(!Dn.Connected())2 t3 W$ A# J5 V8 Y: v% ~  N
  822.             {# g+ o* |- s) g6 ?2 ?7 q0 H9 @
  823.               bFirstUpdate=TRUE;( J& m- I' P( Q5 Z1 j3 D
  824.               dwTotalFiles=1;* m2 U# X" a. S& c) C
  825.               dwDownLoaded=0;
    1 _( B$ t. {; i# X
  826.               bSilentStep=FALSE;
    7 q2 `  y( a) }  u# ?. [( s+ l
  827.               bCompressed=TRUE;; ?$ X  e7 s. B- c1 }
  828.               strExtLocal=".\\DownLoad\";
    5 N6 S/ ^$ b4 ?: z
  829.               strFullName="update.txt";
    0 W* N' U: r% b& `
  830.               dwProgramState=AP_CONNECT;& ~) V" N. q$ X, i+ Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* Y" ]$ v$ _) g% n" P) B' a7 _# V7 g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) N+ ]4 k/ [& {3 K$ R
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 p' l% B4 A0 S, Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . n0 ]7 M5 u$ u3 _2 C: o* u
  835.               unlink(".\\DownLoad\\checkversion.txt");) z9 c. Y" e, k  B9 h7 E1 Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 B# N) V0 `5 D6 G5 U- ~' y/ T
  837.               {- w  }2 U0 R4 U
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  c+ F8 Y) U3 {+ S+ }, Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ L4 b" s( P/ a
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ' i& V5 |3 E; z, L  n. b' z5 d
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; B1 K: W- ^/ t6 v/ L  \+ ?$ S
  842.                
    / D4 |7 a4 V" e0 T3 h. W* V  A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" F2 s- t% d0 F4 `, o
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; D1 s& H" q3 R, d7 y" o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; i+ m; w  u3 D# f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ]; N2 Z- j! L& M1 f  h0 h- y# [: ?
  847.               }
    + a3 A& j; D3 j+ y
  848.               dwStartUpSteps=5;2 j6 ]$ N: t: G/ E8 |2 `
  849.             }0 I2 i1 y2 p6 x1 }
  850.           }
    6 `, `; }* C& E1 y0 \! }" |
  851.         }
    ; _2 |# E& N4 [7 [/ c% l
  852.         else
    $ |! C# h( ^$ }5 P& {1 M$ n: D+ {
  853.         {8 h" C% O3 n0 Q9 u  }& U; ]
  854.           dwStartUpSteps=3;
    ( y' [$ l0 p+ O% C
  855.         }) j! d4 c4 M/ V8 ~
  856.       }
    3 b6 U& u; S. r
  857.       break;$ b' h# b& k3 [+ j- X9 o
  858.     case 5:( ]7 g+ E4 U% j8 }# c# P5 g0 b
  859.       {
    ( |6 G1 n+ Q& h6 q4 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ K9 Q6 f8 u+ i% i" i/ }
  861.         {. V; `4 ?8 z  D
  862.           int opt_overwrite=1;5 n8 G7 }9 D9 J0 u
  863.           int opt_do_extract_withoutpath=0;/ w0 D( H5 N! m2 j2 n4 T9 b
  864.           unzFile uf=NULL;
    9 Z+ V, D: ~1 o5 a
  865. ! a: Q4 R4 P' r
  866.           uf=unzOpen("Wsa.zip");5 D" z" \3 z$ |: F5 k
  867.           if(uf)
    ' m7 G6 X0 a# q0 Z% y) y
  868.           {
    5 |% G' N6 J' B% e* P4 G3 h, ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 i( M  u( C' j& m9 q0 A" `) U
  870.             unzClose(uf);/ S; I9 G" y6 K; X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & N3 n. N8 E6 b. t
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 |1 e3 }. I1 S( [3 q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- ^5 B7 ?4 C9 D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & _. O! N% }- n; R% Y* }
  875.           }8 k+ t0 I! E# u  I1 X
  876.           DeleteFile("Wsa.zip" );( x8 _# O! w3 J0 }- m: Y8 U" e( k
  877.         }7 n3 _* [" r# W* I; s6 b( {

  878. 6 k' y3 N1 H5 H
  879.         if(CheckLocalVersion())) R) C2 t; H7 v# c( ^# s
  880.         {
    - {# a' f8 s1 t0 s
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 Q- z; j/ a$ w, E7 C7 L0 `4 Y3 F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ) i: ?$ V# Z% ]( H! T
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 C# Q6 G* q+ e; b* F0 c
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # e: K6 E4 g* b, ?6 Q% `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);. X& V& r# v3 D6 b: x6 A7 a+ D
  886.           dwStartUpSteps=99;9 j& W  E) d  v2 Q8 [" G0 h$ G
  887.         }1 F5 d; L2 a6 X3 ?7 J6 T1 N) h
  888.         else# p( R5 H, J2 c) s+ B
  889.         {% I. p3 q2 Z$ R% O+ B1 o' Y' j
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& _9 t3 k7 ~" ^( X: w; o. `! ?- K
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : \4 V! ]% Y' }. f  [/ \6 X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");* R1 A6 u  Z, f4 q( k! o

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

! n, k1 m6 T6 j% n2 a5 @8 s
! N7 X0 K4 d& x7 X3 t& U' c! l

評分

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