CSUpdate.exe源代码

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

+ n$ w# }/ x# z8 e2 ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * `& }; E" P1 M  C' _0 ^( F
  2. //% A3 s) X8 \! I$ X1 k
  3. 7 o5 J# R6 v0 S* H) f% t
  4. #include "stdafx.h": q: P% P; A% Q' g, O$ T# Z
  5. ! w* q- p% e/ x! A
  6. //#define UNICODE1 R/ U: x# J$ F! b
  7. //#include <gdiplus.h>) i& y9 B8 \8 W0 v1 d2 x( _( o
  8. //using namespace Gdiplus;( i' h# u$ A% e3 n: o6 V0 D1 Y

  9. ( }* M  D  X9 T1 B6 w' s0 u. a( v
  10. #include "RevApp.h"$ D$ u! G, ^9 i4 i9 l& q8 W
  11. #include "RevAppDlg.h"
    3 O8 ~& u- I, `+ J: k+ }% o

  12. - g, t+ S" K6 L4 s. w
  13. #pragma warning(disable:4786)
    / k& Y- s# A- {2 f8 ?
  14. #include <map>
    . H- z" T5 C* \/ |0 J! A: Y
  15. #include <list>9 M: F, B. `" A/ O" R5 {- U
  16. #include <direct.h>
    : }/ k- y5 {! M& R; m+ \1 c
  17. 6 t6 \" W  n/ B* a+ q6 o; z
  18. #ifdef _DEBUG# x/ D$ {& `6 G2 W
  19. #define new DEBUG_NEW6 b3 ~4 L0 c, T0 t( j
  20. #undef THIS_FILE
    : S% J* p- h( P7 l
  21. static char THIS_FILE[] = __FILE__;' v8 S6 r7 q  {+ T, M
  22. #endif8 x5 ~2 z/ \% I0 y1 V; B/ C# m
  23. #include "SkinResDef.h"
    5 p2 |/ h* ?: y8 I/ h. q6 }
  24. #include "ChangeBG.h"
    1 s9 R2 M# S5 c9 A
  25. #include "AFXINET.H"( H# P% ]4 v, F& }) C7 Q$ x

  26. 8 ?, \1 y7 A, I, H) a. B
  27. #define TRADITIONAL_CHINESE 0
    5 q: _. T) X2 V
  28. #define SIMPLIFY_CHINESE 1
    % t$ M  |9 L7 w8 Z# A/ b
  29. #define ENGLISH 2
    / ^) o# c; [" P, V% b4 |
  30. int m_iLanguage = ENGLISH;
    * s9 k- P! G6 j7 \
  31. /////////////////////////////////////////////////////////////////////////////
    0 a* M% H/ p( o0 X
  32. // CRevAppApp6 J& |% m8 N% \* k( c) c2 @
  33. . e1 @0 \; J9 [$ ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 \5 ]. `' `5 H" m1 ?$ b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    3 R& x+ C* I8 n5 p' X
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 h5 y, `9 ?7 U9 @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 E- \' L; O) C" p
  38.         //}}AFX_MSG
    ! f* H! R8 N  \6 J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 E: p8 q+ ?% @8 e4 g
  40. END_MESSAGE_MAP()% R1 F# D: W! c3 l; N7 S: F

  41. $ r( j8 T" P2 J, J
  42. /////////////////////////////////////////////////////////////////////////////" l# A7 Q  Z1 q7 ?6 Y. {. M' T
  43. // CRevAppApp construction
    , e/ y/ K" U1 _
  44. 9 {% \: ]4 ?7 X* n. N
  45. CRevAppApp::CRevAppApp()4 r  C: w& l% p) o7 R4 p
  46. {
    7 p# M* E" U' M
  47.         // TODO: add construction code here,6 f! g" e: o4 r7 e
  48.         // Place all significant initialization in InitInstance
    0 Z+ o! d* w' ]; y% o
  49.   bDisplayIsBig5=FALSE;
    / ?, `/ d+ ?& p6 J
  50.   bRestartUpdater=FALSE;
    1 P) }/ G5 r3 ]0 J% R5 g- F
  51.   bFinishUpdated=FALSE;" |! x3 ]& v; _5 ]& O5 V( V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * A# ~! q7 F" Z- z" c( e
  53.   InitChangeDataBig52GBKS();
    3 L$ V  |. f3 O7 h: W
  54.   InitChangeDataGBKS2Big5();# L# ^8 v2 k, p2 _) D
  55.         //
    . S- H8 R' n5 u1 W2 }" N. j- ?5 Z
  56.         bClickRunExe = FALSE;
    # Y" Y5 j/ U7 y# b- H
  57.         //) w6 f- H$ I1 u9 r2 o6 ]
  58. }# s" q. F1 L. H+ L( f2 J+ a1 p
  59.   h) p& F8 U2 J  B& z5 I% b
  60. CRevAppApp::~CRevAppApp()0 S5 ~) A5 X( h! G! i
  61. {
    0 d  g. e4 C4 r' W) {1 T- f+ t% D
  62.         // TODO: add construction code here,4 u7 H- ?( Q4 C
  63.         // Place all significant initialization in InitInstance
    4 X8 Y4 F8 I# T  s5 l5 ~! K! t- C& j
  64.   EndChangeData();
    8 w. ^; j" R: w
  65. }' T% y- u( H- u" \' L

  66. ; T& H7 f) E; a7 A. A
  67. /////////////////////////////////////////////////////////////////////////////
    ; [) d# ]" G8 U
  68. // The one and only CRevAppApp object
    * T) E* S+ c: m( c) c

  69. 9 l+ l6 }! V2 B, Z: N+ o
  70. CRevAppApp theApp;$ v6 Y+ t5 O1 t

  71. 9 Z, w$ b' h! b7 I; `( w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! I3 c" e- c, f2 Y  `2 u2 b
  73. {; b1 Y: `8 d# U
  74.   int iEOF=0;
    1 p& ~/ z) i4 Z6 N4 R6 l
  75.   char szTempName[MAX_PATH];
    ( B: h) Z( ^  f+ \. }
  76.   *szFileName=0;
    " z- P4 k( P0 j
  77.   iEOF=fscanf(fp,"%s",szTempName);# J% g# R/ \# D3 V0 p7 ?, M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  c5 w9 F& l) c4 [
  79.   {
    6 x9 {- M; Y; b+ d
  80.     strcpy(szFileName,&szTempName[1]);
    $ w) g! b8 g% J. q  q% t$ X/ ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 v4 O* [- w3 ^) |# y- ~. X2 K
  82.     {7 H  E* K* d6 V/ V6 d# e0 _
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & D  [, A/ y0 s+ y7 |5 x
  84.       strcat(szFileName," ");4 C7 X% Q7 }. g% q7 }
  85.       strcat(szFileName,szTempName);  M1 ~- M- o* Z
  86.     }$ u% i! T: R- u. b5 J
  87.     if(strlen(szFileName)>=1)- a9 {$ c$ B% N( o+ b. Z
  88.     {- F4 G5 ]& f% D( f
  89.       szFileName[strlen(szFileName)-1]=0;0 J5 d. b* G  \5 v4 ~- J7 u
  90.     }8 [5 ^/ [" T- t2 _" r4 {; W; k; R+ U
  91.   }
    + O( v, ]  D0 [& ~) a8 i- c' A/ Y) e
  92.   return szFileName;
    0 P' \5 N8 c) ^
  93. }/ u) X& a" |' R' T. W$ t: L
  94. 1 {% y0 A( `1 Y, q0 S- C3 H4 O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( B3 T. C+ u; }  @6 W
  96. {
    : H' A: ]8 i- ~
  97.   FILE *fp;
    ( _9 B# B" b" Y& T/ z# l
  98.   char *key=NULL;
    ( t- |  V4 {5 q( m+ i
  99.   char version[MAX_PATH];
    4 i  e  t( o" h: O2 o3 s; ~* c
  100.   LPUPDATEFILE file,olds;
    2 _0 d2 l1 [/ f6 f3 o' y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) N0 x7 D# \3 L# i& H" }6 b

  102. 9 _6 Z* P- E8 g) J- T* C5 a9 X; }
  103.   UpdateList.clear();
      E8 Y; }5 d- a9 o1 {* ^) o
  104.   UpdateFile.clear();* {) W3 l* W9 @4 p- n' y
  105.   if(GetFileAttributes(filename)==-1) return false;1 Y4 r7 v! Y- V& z1 F- C$ |4 Y" ~
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 i( d/ D+ W7 D/ ]- z0 L7 g# i
  107.   fscanf(fp,"%s",version);
    % u3 {# H9 n$ s0 h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }( G1 |) L: Y: d$ V: w& \) a/ d8 x; m
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 W1 K( D0 D+ o$ l4 o
  110.   {0 X5 z1 t) r8 U0 Z4 M" l3 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" _; Q, y& h- P, W+ W) Y) k7 P
  112.     fscanf(fp,"%s",file->path);5 ]* |/ \; v7 e' a  Q
  113.     ReadFileNames(fp,file->file);/ o! q' W$ Y3 r" Q; c
  114.     strcpy(file->full,".");
    7 H  Y9 S0 ~; H6 |
  115.     strcat(file->full,file->path);
      K) E# T" S  ]2 Q3 H- G( K( q
  116.     strcat(file->full,file->file);
    / J% t3 E  p$ B; [+ q6 W! Y( \  L) N( Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" }6 _# T7 E; M. x0 G
  118.     {( L# W8 U( {5 l! x8 }" ?; [
  119.       file->vers=(float)atof(version);
    ( z7 W" V$ g( f/ C4 L8 T' z
  120.       UpdateList.push_back(file->full);
    # i1 q5 t, t& K/ {3 d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! R# F; f. h$ s+ R; F/ Y  H$ I
  122.     }
    2 E1 T, I  |% j
  123.     else: e  ~& |- G  C  n
  124.     {
    : D+ k3 ^! K3 f
  125.       olds=(*p).second;# b0 j) u9 [# K% W
  126.       if(olds->vers<(float)atof(version))+ Y  I# _1 z4 ^
  127.       {
    - x, C2 }2 y% a
  128.         olds->vers=(float)atof(version);
    4 T6 z5 O( O& _: s& B, D; Z
  129.       }
    * [' [  I4 t6 Z$ t
  130.       free(file);
    , v+ S" @5 _3 z) i  g; g) N0 V
  131.     }" u3 P# q0 L: G
  132.   }
    5 |3 |$ Z0 P5 h% J" P8 H$ z. N4 Q
  133.   fclose(fp);
    0 F/ i9 p# q( C8 G. U
  134.   return true;
    % |3 V# U' g) D' @  @
  135. }) H, X4 r* t4 f) Z! o' a

  136. ) N6 k8 X  h4 E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( e6 W/ @' W; G0 k4 H
  138. {8 {/ T1 _  c  \9 m
  139.   TCHAR  szFull[MAX_PATH];0 e5 X3 T7 V% v* q! h1 S
  140.   TCHAR *token,*inter;/ Z3 y  d( g: c7 ]2 [9 K6 c
  141.   *szPath=0;
      k" H% O' A5 c9 m+ @; m+ ?$ l
  142.   strcpy(szFull,szFullPath);
      k3 z+ N( Q! I0 [; L2 x
  143.   token=strtok(szFull,"\\/");2 \: }# ~; r# [4 E/ I. {: P/ Y
  144.   inter=token;
    # ]* y+ F: z0 z7 p4 g+ R1 }
  145.   while(token=strtok(NULL,"\\/"))8 g9 C# X: F# b& x( a4 b
  146.   {
    % A4 G. K8 u" n! I! \0 ~* i
  147.     strcat(szPath,inter);
    ! i" g; [7 K  O. d% J. d
  148.     strcat(szPath,"\");
    $ g! K) v' `6 V1 G  U
  149.     inter=token;
    , S+ J  Y: E8 l( R- {( s2 [/ n
  150.   }  U- [' C8 {. W* o0 x0 k
  151.   return strlen(szPath);
    ) e  }9 E7 k' h3 T# f, C
  152. }* f8 Y! ^6 C6 _2 L# X+ z

  153. % N( ^/ k& Z! s! p' B' H
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . [+ w' W! Q+ k# W4 X. x
  155. {
    : C6 H$ y' A6 g& G5 x4 C; R* N( c
  156.   DWORD attrib=GetFileAttributes(Target);
    ' v8 ?' V% G: E3 x
  157.   if(attrib!=-1)
    & H/ R, E8 s: z' K; J- B, l
  158.   {
    2 |5 k/ y( @3 H# @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 d' _$ q, ?. J3 \& a/ ^0 Y) p0 H
  160.     {
    ' u7 ^) s6 ?! H: r, ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : A5 I& R7 b/ H$ P
  162.       SetFileAttributes(Target,attrib);
    6 q; S# E* [9 X) I1 j
  163.     }- I6 C& F. ~  ^
  164.   }
    / \7 g4 }5 p1 j6 U5 X2 j
  165.   CopyFile(Source,Target,Erase);* @" r4 K' z1 ~; a( _$ [
  166. }( M" F; {# f6 s4 T. G
  167. - y2 @' [, e0 @& W2 c# g- d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# b) l: Z# _* L
  169. {+ F5 N, n) K# i9 B8 v+ \
  170.      FILE *fp;
    % K  k6 j' h6 n; N6 \
  171.      char  szBuffer[8192];
    ( v; N, c  `' J9 s7 I
  172.   va_list  argptr;/ z8 [! t; G  r
  173. : ?6 \$ K8 `5 T% h+ n" W- K
  174.         va_start(argptr,message);9 w9 {- Z+ W) n! w, z4 |
  175.         vsprintf(szBuffer,message,argptr);5 U+ @4 Q& @* K0 k
  176.         va_end(argptr);$ V3 S" G9 \3 f% `) B
  177.   fp=fopen(FileName,"a");
    ; _% V2 S! ?7 k1 a" a. w+ P
  178.   if(fp)6 B) E1 d% V! l( f6 G
  179.   {
    * U( M1 h; k  y8 E  A
  180.     fprintf(fp,szBuffer);  P3 E/ \" x7 V/ H
  181.     fclose(fp);
    8 v. r$ M! x4 N& Z
  182.           _flushall();
    # M" H5 @$ G) c5 I
  183.   }
    & t( E7 w5 M7 J) E" _: e0 j3 z
  184. }" n' v- H' {' ]: Z4 b; u

  185. ' p' N( [9 O& B2 f, I+ D
  186. BOOL CRevAppApp::Fclearf(char *FileName). n! O( U+ f1 p  L
  187. {
    3 y4 V. w0 W1 A% k- i+ W6 ^; ~
  188.      FILE *fp;
    " G% ^3 \' u" c
  189.     DWORD  attrib;+ g" {) B  l0 F# x! S7 K7 v7 y
  190.   attrib=GetFileAttributes(FileName);' O; `# g: q' P. u" \/ c2 j
  191.   if(attrib!=-1)! O+ N- B$ I2 P* _; U+ ]: Z9 d
  192.   {. r# N# \) K% c& w$ h6 U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ c/ b# I7 O* j' h
  194.     if(!SetFileAttributes(FileName,attrib))
    " A' M; O8 O/ N- h8 A- ]
  195.     {6 F8 h5 A3 t+ ^
  196.       return FALSE;
    $ r+ F' k" F1 F. m
  197.     }( e/ }. _: P2 [
  198.   }  x6 l& s" U* g  z# R0 K7 s) S1 ~& w
  199.   fp=fopen(FileName,"wb");
    : b# f% X' R5 H7 Z
  200.   if(fp)
    * E% o9 b1 r' O+ h$ A* A, c
  201.   {
    6 d6 G4 r: |8 f7 u
  202.     fclose(fp);
    0 W2 N, ]. a: N1 a* \
  203.   }
    % Y( L2 I( w) S, B" _1 t; ?. s& h) L
  204.   return TRUE;
    ; w  H  T( [* C, n7 ?3 m* `
  205. }
    " ], v* e9 h% c( Z
  206. 6 L$ f, `! u' A* Z4 j
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , r$ c) m' E" E  |) C
  208. {8 y  n* g! O% u1 ?+ o; u
  209.   char filename[MAX_PATH];: F! y+ D" l1 T% n8 [( p. Z1 H
  210.   LPUPDATEFILE file,olds;. U; |: C3 a5 h3 N1 G! Z  E( _$ h. A( f
  211.   std::map<int,CString>::iterator i;
    7 A) G8 r+ @: U& }6 \; x
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) `2 e9 r" B9 ~! ^* x  H1 Q3 @
  213.   std::list<CString>::iterator l;9 Z. X# z- Y4 R4 Q
  214. : n( e0 K6 _" q
  215.   if(bFirstUpdate): d/ K4 H4 l0 \( z4 \( @. ~8 @# X4 h
  216.   {
    7 c+ K, L& e* L4 u# K& ~
  217.     dwCurrFile=0;" J+ w0 S( h  m5 [  B
  218.     bFirstUpdate=FALSE;$ y# Y1 r. d; n- H$ P6 @/ u
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 c) _; L4 s5 j0 C2 S8 h
  220.     {
    ' M3 y+ q' M$ i, v) n- l! m/ U
  221.       dwTotalFiles=UpdateLocal.size();
    / C) T8 W& O5 Y+ d* y" A% z/ g2 S
  222.       dwDownLoaded=0;6 v$ z. M# G4 |
  223.       bSilentStep=FALSE;5 i: C9 I% P8 g5 S- N2 R5 c. ]
  224.       bCompressed=TRUE;
    3 c- ~: L( K5 C" d) B  C& ?
  225.       strExtLocal.Empty();' h8 c& a3 |$ s6 m, D: c
  226.       strFullName=(*i).second;
    & N  ^! ^3 n: h1 K$ K) ^5 n
  227.       dwProgramState=AP_CONNECT;! W5 E* U7 r' l+ t
  228.       return TRUE;
    6 f6 v# x7 \2 M! c2 \6 p) [( M
  229.     }
    : Q. f8 x  x# c: G3 m9 }7 |  u: h
  230.   }" P7 G  o% D% t1 p0 {
  231.   else if(bRestartUpdater==FALSE)
    $ t' r& o, \7 W/ A" c, n
  232.   {* Y. v/ ]% K" i) a* W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " c0 L. U% D6 x% Y% d& S
  234.     {
    + \) L( P7 d. ]' e
  235.       file=(*p).second;# k0 p6 b& y- ?% X# P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ A3 {! D0 O' v  Z1 m
  237.       {- a3 U% I; G( b; A% k) h
  238.         olds=(*p).second;/ c4 b. o0 z; k: u0 o; w
  239.         olds->vers=file->vers;, \; |# v9 z6 s7 W
  240.       }
    1 o4 O7 v7 }2 s0 u/ G6 C  Z
  241.       else
    9 b' `+ f9 s% p1 ?
  242.       {
    1 ?: t5 V4 b0 x3 D0 p% n
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 F2 ?' g  ~& R: m$ G" W
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 i2 y# t. A, \8 i+ H2 v4 {( k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , ]. w' ^' l4 j! L4 {* [
  246.       }
    # v! K! G  J/ D! k2 T6 B/ s# @3 b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 S2 R' M" [7 V) k& \$ d
  248.       sprintf(filename,"(%s)",file->file);
    + h4 J" k& [2 o4 P# k7 l# q  L; H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' [. H" n9 B& U7 b" M) g& K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 A) {* K0 J# Z4 r, l
  251.     }
    , Y) t& N* v! L" ^
  252.     dwCurrFile++;9 I7 ?/ @, I+ A# A" P' n/ Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " f& W! P  S: C. H
  254.     {
    , Q/ h+ P. f& U: s9 g
  255.       bSilentStep=FALSE;4 S+ a" k: ~6 Z
  256.       bCompressed=TRUE;
    8 B) A7 y" R& i6 c) Y* X
  257.       strExtLocal.Empty();7 R: h/ J$ O% I5 P: W6 D6 Q
  258.       strFullName=(*i).second;& r% h+ P3 M/ g3 ]: d+ z5 B/ X
  259.       dwProgramState=AP_CONNECT;( q+ R- M: y/ w- A. B
  260.       return TRUE;
    9 T7 |; X9 O/ X+ Y7 s  p! w! `
  261.     }  |/ ]2 a* f1 }  u, @) N' ]/ w7 v
  262.     if(!bRestartUpdater)
    : [7 I) m5 }  Q4 W% Q
  263.     {6 B/ o* P( [9 j
  264.       int iCurrSize,iFileSize;
    $ n% ~* m& V% S1 w2 e
  265.       iCurrSize=0;2 o0 P1 E1 t5 d; z$ B/ U. ^5 ^
  266.       iFileSize=UpdateList2.size();7 f$ b2 S2 I) Z/ M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    6 Q7 b4 W1 L2 e! D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! h% {2 r# H: _
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ K4 M5 o6 Z( o1 w7 [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ F$ C8 @/ E8 V# x# M
  271.       Fclearf(".\\update.dat");
    . L2 X+ Y& x7 u  w5 w! B; A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    6 e! L$ G4 @) l; Q8 H' f6 X+ g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ C7 |2 |  o) t& O8 G$ l8 b
  274.       {% ~$ c" [: o% U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( b5 c2 T/ q0 N, D+ x. u
  276.         {" @7 s& ]0 n! @- T/ C9 J
  277.           file=(*p).second;
    & A  i4 h1 c! @0 X) C+ e
  278.           sprintf(filename,"(%s)",file->file);* u/ P! h! U' E8 M. z) m5 A6 E+ p. g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 Y9 o0 Q. L# z. k
  280.           iCurrSize++;6 L9 d7 F- f) [; Z  A: U
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" X2 u7 w: \% d
  282.         }7 \% T" n1 U2 @+ s6 d3 M9 h
  283.       }/ Q: [* L0 H% L) k" P; z
  284.       unlink(".\\update.txt");  v6 }5 j; _$ L
  285.       unlink(".\\update.tmp");
    / A. L) i' q+ T
  286.       Fclearf(".\\checkversion.dat");" {9 ~; F: }* Y! I8 w! g3 n5 b) [# z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : v4 H) r; E. r0 }+ i- d: _4 x1 M3 U
  288.       if(UpdateLocal.size()). @4 t/ o" D0 k) Q9 x# a
  289.       {# p# d" c% y# C2 F: a9 P' Q; E
  290.         UpdateLocal.clear();
    6 p5 w! F# d" w
  291.       }
    5 m' o8 c& f' f0 K, T8 U. @
  292.       if(UpdateFile3.size())' A6 l* h$ i  B" s% K
  293.       {& E* E5 a- S5 S. O4 r' s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); b9 J" l- K6 F
  295.         {3 l/ j" g; _) B9 Z8 ?6 d# T5 B9 b  u" c
  296.           file=(*p).second;
    % E! F7 L+ ^; P- B4 d) j& w! u
  297.           free(file);
    ' d3 L0 ^$ T) h+ ^4 }
  298.         }% }. V! P' y: c! Z# T
  299.         UpdateFile3.clear();6 D9 n$ u0 Y: X: e# i
  300.         UpdateList3.clear();8 o% h5 Y4 c9 J( r/ l, \$ d
  301.       }3 G- p$ H5 J0 p, r- J# A/ I  o
  302.       if(UpdateFile2.size())8 I7 G/ x6 u% c- x% Y0 _. q' `$ r
  303.       {6 N* V, S$ ]. c: @2 F8 y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% \# @% e$ A3 }& Q) r
  305.         {7 x$ S( I6 R4 H" l
  306.           file=(*p).second;" @3 C3 ?+ N, o: `! [: S+ ~3 `) [
  307.           free(file);
    7 N; h2 N' I) h1 `$ i  L+ }: |
  308.         }& _8 s6 _# J8 a7 }
  309.         UpdateFile2.clear();3 D5 v9 q* f" t+ j" b
  310.         UpdateList2.clear();
    % x9 N) N( T9 x& }
  311.       }! d) c3 \1 `' b+ S
  312.       if(UpdateFile1.size()): _/ n) @2 c; }& c/ \7 P
  313.       {
    0 _. X. H: C% D4 f5 D) y: h
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( p& [8 P+ ^) S  m" ^
  315.         {
    & ]( v# o* F4 C9 |- y! H+ h
  316.           file=(*p).second;
    , r: f2 x! {- _1 K- A7 h$ E
  317.           free(file);2 j; K4 i# a; h
  318.         }
    , k1 q! r4 J; h; A
  319.         UpdateFile1.clear();; [, Z- r! L( N3 C- A" S
  320.         UpdateList1.clear();( z; Y/ M. v! n! k/ Q& Y" E, ^+ @0 [
  321.       }0 R7 v6 E6 v0 }- I  @! H9 m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 x' q- n* K5 C5 o' |( j$ U" M
  323.     }8 h% U" m1 H1 Q4 Q% Y+ G' U. Q
  324.   }; T; G3 m3 R7 b% ?  c
  325.   return FALSE;
    : F; z; J' a$ M# W
  326. }: \; T3 o* H8 R4 a" O$ }* M# p
  327. ' ~1 ~6 c0 y8 C4 s
  328. void CRevAppApp::ClearAll(void)" V; t# n" ?, o
  329. {
    8 E. q5 E0 Z, ]
  330.   LPUPDATEFILE file;- s" m3 O: v1 e$ n- g+ Z: X$ O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ w+ S* L% |! c3 d! w& F. _; u  H
  332. , R  O" V  Q4 a* h4 Q% B7 _+ k3 R* c
  333.   if(UpdateLocal.size())2 u5 C0 |: g; Z
  334.   {
    8 l$ R' g% g7 c7 R* f
  335.     UpdateLocal.clear();  X6 A# W: J$ p( q% H; B
  336.   }
    2 D5 T3 Z1 v* I, @- |
  337.   if(UpdateFile3.size())  Y( q8 f1 F  t
  338.   {' N$ @6 d& m* f% E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 p5 [3 R+ V+ a- x4 M
  340.     {% m4 ]( @+ G6 l- Q( `+ T
  341.       file=(*p).second;
      ?+ u/ c* A" [' x
  342.       free(file);' Z2 r+ N8 _. B( F
  343.     }
    / K/ \# M( Y& k- g: D9 a
  344.     UpdateFile3.clear();
    $ O9 z: {% ]" L: g) R
  345.     UpdateList3.clear();* U" U1 }$ Z: N8 l
  346.   }7 L- }' t; k$ I& N
  347.   if(UpdateFile2.size())' n" ?4 }' O' v: r; N+ q
  348.   {
    & X2 ?0 H) M3 z& Y) m5 O1 _* f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 M3 l9 u6 v. C: ]# H( P
  350.     {
    9 B) e2 z7 C; T
  351.       file=(*p).second;
    ( q. D4 r3 V' o3 S* l
  352.       free(file);  G3 s' p: ?0 r' C5 J3 U
  353.     }
    ) M1 W4 c2 h' |
  354.     UpdateFile2.clear();8 A* f% @! V1 k/ A0 t
  355.     UpdateList2.clear();1 v/ X- p) @$ w* e
  356.   }& Q0 Q2 m- _2 K$ j! z# `1 a
  357.   if(UpdateFile1.size())
    5 z2 Z7 _, y! }8 Y) C$ X
  358.   {' N6 G. |4 b) ~( ^* @
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - X* G( X' X& M$ z) S
  360.     {
    ! c- H$ v' I; @& h9 y$ X
  361.       file=(*p).second;
    1 s# o4 K; F! t' \+ s
  362.       free(file);
    $ `* ^0 g* t2 X- \( W/ V" _7 V9 M
  363.     }
    , }0 U' s& n4 A* `2 V
  364.     UpdateFile1.clear();
    $ I: X  @$ U+ p$ b
  365.     UpdateList1.clear();# j) H/ w) B/ J* U  n3 E
  366.   }
    9 Q# I& f3 K1 Z% ]- S
  367. }  ; f8 C/ ~1 P  l
  368.   1 X2 r7 b- ]4 A
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 y: }1 H1 u  z" {% D4 A8 a
  370. {% |6 P: [( e( h" x7 Y1 H0 ]
  371.   int c;. X. r% _7 K0 Z1 z" y4 l4 J
  372.   LPUPDATEFILE file1,file2;
    3 V7 z$ c! ~; K, |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      B3 [7 _4 y! n9 X3 P, e# K6 R
  374.   std::list<CString>::iterator l;
    ; P1 U+ q" K( s8 b

  375. 6 l0 K# Z# {  c- u2 {& t; m2 S
  376.   UpdateLocal.clear();
    1 ~5 o! R9 g- d6 K" Y) x. z4 b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 T6 y( }1 R+ r- m0 f  t# F
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; R8 F5 e$ W" @! p: e! ^+ q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & l: y" R! E" ]
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 ~& s. M/ _$ b  b* G5 x8 e
  381.   if(UpdateFile3.size())
    8 o3 |2 w1 g  B+ e& X& t
  382.   {
    0 b8 N* r( J/ b: _# v* _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      M# N9 d, o" P8 P: E
  384.     {
      J2 y8 W: P$ H: O# x/ V, B
  385.       file2=(LPUPDATEFILE)(*i).second;
    & B' `% a' F  h* s  q; H4 U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 f: j* b: s+ }4 C  c* ]& P8 a- h
  387.       {+ v& i5 A! k' ~+ z' C
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) y4 e3 N: R' ]: T
  389.         file1->vers=file2->vers;2 c, L* _0 w& S- U
  390.       }
    ; z# E8 S' p  @4 n! f; i$ B
  391.       else
    6 c% B# a6 a0 S( C
  392.       {0 r& l% L+ ?& f+ h0 m" s; z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) Z. H1 ^1 T' C% ^, n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 P& t$ H3 {* E, f1 n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' t7 b! y2 R8 A3 k
  396.       }( I5 z; a; b  P5 H$ L( h
  397.     }
    " r# }) o. K2 D8 ]
  398.   }
    ; ^* U& f# f# L1 M8 Y4 D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' `+ u9 N9 F6 m0 S
  400.   {
    " ?" I9 b" E: U* v7 _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 l2 t6 l& {! O3 \
  402.     {  `) w/ ~5 _9 Q( t  f, f
  403.       file2=(LPUPDATEFILE)(*i).second;+ k% Z3 I2 H. F  g7 E/ \% m! P) \' k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 y: M* m1 _) Z9 I5 D- u5 o
  405.       {
    ( i/ F3 ?5 |9 o8 Z9 @6 m$ U
  406.         file1=(LPUPDATEFILE)(*p).second;
    # v; o, _+ _4 k$ Y0 A: o6 G
  407.         if(file1->vers!=file2->vers)
    : R! w% [  t6 I; f9 u
  408.         {
    - m7 i" V, _6 t( N5 y2 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - `+ a9 s3 w9 r& Q: F
  410.           c++;4 d- o$ t9 s: e9 `4 ]
  411.         }0 x5 ~. `  f- `0 g6 r
  412.       }: |& T/ z" Y' M  }* X, l
  413.       else
    % O$ w& D& s8 M/ L& k, B) e! l
  414.       {2 E/ @# P4 z. ^& [' c! r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# ]/ c% ^) V% A# M$ |1 y& d
  416.         c++;4 T3 ~- M4 h* H  i% a5 ~
  417.       }6 `* x+ N3 B! `$ o$ k5 m. j. T, u
  418.     }
    9 ]! {" M/ r3 C  Y' ^4 u8 q7 C
  419.   }
    " l, P1 E+ h5 _  c- ~. ]2 q
  420.   unlink(".\\DownLoad\\update.txt");9 p( N! Z  }- G9 K) s
  421.   if(UpdateLocal.size()) return TRUE;
    : e  o  W7 M5 m% w; R
  422.   else                   return FALSE;
    ( h$ t  [: k$ {9 r( v, s
  423. }# c' ^+ i2 K0 v! h8 e
  424. + ]8 ~( [( v( A9 F# m7 Y2 L6 a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ K  u. E( m2 j& J- d) t1 e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 w+ I4 V% Z1 ]. d
  427. 9 o, k3 L0 o2 k( m* b

  428. * |" F$ [! p) x( s% }
  429. & C, t" R0 v6 S) J2 T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& u: e4 o9 v4 s% [1 ~
  431. {2 f: ]8 \2 A3 Y% M, h- G1 c$ Z, ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; C# M$ U5 A% n% R0 h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 C# k$ ?6 w" A9 E
  434.   {& j) M0 c- M, Z+ `8 y' |
  435.     char szLanguage[50];6 Z  w  M3 y+ @+ `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 k* H' a+ @* r# q( Y8 s# C: _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: u  F8 K/ G) h/ p1 }' C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; V" \8 g  |2 R9 b. ^- m* d
  439.     else                                   m_iLanguage=ENGLISH;
    % U) J6 ?2 ]5 N5 ^/ q+ u9 M# X) o1 V
  440.     char szRegister[100];
    5 C# d- ?6 q4 \$ k: Z. D4 v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ r' i( g( U/ Q, \' X/ C
  442.     strRegsName=szRegister;+ n" U0 e; F% c, M8 v
  443.     char szPatchURL[100];
    1 U! c  B% j" _/ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 m) S; u- H+ h$ V0 k: F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* V. `3 p: S4 x% }; q7 q& }( f
  446.   }
    + G- c3 W" N+ ^/ T
  447.   else+ y6 g2 U: R& O# @+ C
  448.   {
    9 R; n$ }# w) ^2 I& y8 b2 [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ Z7 R' s. g7 o8 S, Z
  450.     strRegsName=DEFAULT_REG_URL;
    3 K4 X) `: q3 x6 v/ ?6 [# O
  451.   }+ l3 S' {- @1 c2 Z# I$ K2 k7 m
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : z1 }8 O) N+ ?' U
  453.   {" v- M) P+ X! V% l  u9 Q! C5 H. U
  454.     char szIP[50];8 D! d/ A+ l* Q# i2 s6 V
  455.     char szDIR[300];: a; q' Z  A  m+ b7 `. M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' w( H7 a% P: ]+ M4 e. w
  457.     {
    , k4 Y1 K( H6 l* R9 Z7 Z9 ]
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; ]6 }" \) ~( ^' c  G
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % q0 U3 V4 d& h& x3 Y- x3 X- A. d
  460.       strHostName=szIP;
      F) r4 u- g% S) S; ^' P
  461.       strHostPath.Format("/%s",szDIR);" U' B, A: C- }2 b# B
  462.     }
    " g* x; k" f: ~/ U+ U  a" |$ M$ D' l
  463.     else
    1 m* a$ l! T! \% v" v
  464.     {
    $ Z" H0 p* F: K  [2 g$ p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : M! h, p: D. v
  466.       {
    7 Q; \9 `& y3 @' S8 V
  467.         char szLanguage[50];
    ) J9 j7 [( I. L5 k2 g9 X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & b2 ?4 x8 U9 A& i/ G' @3 A2 |, `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ S. a# s7 u# O+ f+ @$ y' v1 ^4 J# q+ I
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 I3 G5 B& U; a6 z  K) ~
  471.         else                                   m_iLanguage=ENGLISH;; w4 Z9 w# j& s, W( J/ f
  472.         char szRegister[100];
    & ~4 z% q# a4 i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      T! u# p7 v8 {& ?6 h
  474.         strRegsName=szRegister;
    ' ~+ C* n* }8 Z
  475.         char szPatchURL[100];
    9 ^9 u, h3 V; A( g. ~5 t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( z; _5 }$ h& H: c7 x4 t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' T, W/ p# u# j
  478.       }
    . T- {) G, \2 ?, W' j
  479.       else
    : @' D8 m1 i' G' H- t" O
  480.       {3 C: H- u1 r  Y+ t5 {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; h1 O* h  W8 g1 a
  482.         strRegsName=DEFAULT_REG_URL;3 e; {2 W& E& y0 N1 k
  483.       }
    + W2 K  a5 z$ m3 p: w1 f
  484.     }
    0 w  r( Z2 X5 Z2 O* A
  485.   }
    # o8 C0 x6 u+ \/ P  P
  486.   return true;) g3 X& m5 h" p/ R5 ~2 _+ ^0 v
  487. }
    7 |+ d5 U# J8 T2 p. B5 P" M: w
  488. & M- n. a- D$ C* q3 C4 C( @8 a6 g
  489. #include ".\ZLib\unzip.h"
    ' U: x6 J: Q% m1 N4 s- q9 Y" k2 g2 n
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & d  c! v' g- a2 @, O# b
  491. /////////////////////////////////////////////////////////////////////////////0 k; X. L8 N; d: O+ v
  492. // CRevAppApp initialization* z5 ]$ x# A, J/ L
  493. 5 c4 \+ n- v" e2 I9 S9 _+ Z
  494. BOOL CRevAppApp::InitInstance()
    3 ~0 {- g% \8 l
  495. {
    + A% t& M% E( P& @# w! g6 j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " Q' m) l9 v6 Y6 I2 A
  497. 4 V! j" ?9 s5 K( J. ~  \# A) ]7 q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 u9 U: }* |. ?* b; g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - q' s! V) o1 u; b
  500.   {
    7 ~3 F! P# w% u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 T; t. w1 u, c) G( V$ D' U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) G) D3 l. Q9 _' `+ ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); {) r5 y# i* C) Y) p: z& e
  504.     {
    5 G2 J- H5 v& V0 B# w' N" A, N
  505.       strcpy(szPath,szPathTarget);
    3 O3 M6 t" i3 N4 ?6 P, h7 m+ z0 w
  506.       SetCurrentDirectory(szPath);! i8 u6 G) ^' F3 W, \- U0 f
  507.     }
    2 u" ]: B' p' p5 m( A9 ^) W" ?
  508.   }1 Z1 K$ r) t; _
  509. #ifdef _DEBUG& B1 U( K5 I# B$ g& m/ f+ D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 ?  K- h6 Q  S4 B. e( o% _/ o
  511. #else# |" T4 T; O% _$ w
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % {5 `5 l  t) I" o# w- g2 ^
  513. #endif6 ]5 P( n& v/ ^' _  {. p
  514.   {; _6 ]+ D7 z  N6 [+ t. U
  515.     char tempFileName[MAX_PATH];
    * J5 y9 B  @2 d
  516.     strcpy(tempFileName,szPathSource);( V  s2 R+ N" C4 q7 C- C/ y  R2 V, n* H5 F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 _8 }0 ]" |; i1 ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) z' L8 N+ }# ~- E* f$ J2 L6 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 o3 R; S$ t8 Y- a/ G4 F  l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 S# I% _2 ~- {+ \5 g2 @  j
  521.     return TRUE;1 h- j% k9 l# H3 _! k
  522.   }
    , ?  t4 n$ x9 f$ @" I! Z
  523.   // Nuke 0118: Delete run.exe  c- T2 X8 L3 Y. ^9 L3 F( R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 s. a6 l1 C$ v" A
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 \1 R& U, x$ Z# w3 l' I
  526.   if(!ReadCfgFile("Config.ini"))
    ) d; M' C- D+ h% [. ]( \
  527.   {
    ( }; L* v! U9 H, U4 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 r. o- t1 m9 z$ m, ]
  529.     return TRUE;2 D2 y/ r4 m3 q) Z4 h6 o1 c
  530.   }
    1 l: G* M$ b: m( O, b+ c
  531.   HANDLE mutex;
    9 m. P3 {5 b! ^/ b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    * R1 z9 A# \  f$ R
  533.   {
    ! O  q0 O8 H6 W& ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . n1 O  G. J7 P: r- s) G; y8 k
  535.     {1 V; B3 d/ G; ?- @( I) G
  536.       CloseHandle(mutex);9 ?  d) A9 a1 h7 X. x9 X7 a7 q6 L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- x1 z7 ^1 w3 S
  538.       return TRUE;( t, Q  E# E' O
  539.     }
    6 K6 F  O, f& z" V5 r( m4 ?
  540.   }  
    * x$ b( e8 N! m+ ^" Q$ l
  541.   CloseHandle(mutex);
    5 x% q; x+ L' @' g% d7 \0 b
  542. 7 c. M" ]# F* j" O% \$ _' h8 {1 q; J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 a- [$ o4 ~9 ?: m( p

  544. % {& z+ m9 x0 o/ G6 N/ H4 p
  545.         AfxEnableControlContainer();. l/ Y9 ~- j  n- H  d

  546. - c' t6 U7 N; }4 e
  547.   bCanUpdate=FALSE;
    0 `) i/ q6 t' x
  548.   dwStartUpSteps=1;
    ; C, l3 C$ z! l) W1 C
  549.   dwProgramState=AP_NOTHING;+ R" X9 d" x3 ^9 N# w

  550. * ]9 D% m# k8 c4 t0 t% g5 Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 c- y; ~$ h" n

  552. * k! O) d0 s; Y
  553.         // Standard initialization
    9 p; U: O0 c1 y
  554.         // If you are not using these features and wish to reduce the size
    9 R2 B! N0 v4 `( d
  555.         //  of your final executable, you should remove from the following
    * ~7 w& T% G3 D+ i
  556.         //  the specific initialization routines you do not need.
    2 I$ p+ A1 U2 i

  557. 0 f: [! j, q6 t+ _) \4 q9 Q4 b3 }
  558. #ifdef _AFXDLL% J3 Q- a5 P1 T# p) d9 B8 }& R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - v% [$ B1 `% J0 n
  560. #else! {2 _$ Z9 x  N& A2 I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: e* C5 g" o1 X! Z) r5 {: {6 \# E
  562. #endif1 y. M; P; Y7 [* |' b
  563.   g* P2 i; s1 B5 a! \6 b3 \+ O$ g
  564.   dlg=new CRevAppDlg;& z- ~! W" k/ e  _1 z# `
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 `- d% H5 P. R( R  i) T7 c. X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 F8 D2 J* W' q% x
  567.   m_pMainWnd=dlg;
    1 S% ~+ W/ k, b/ V
  568. 1 ~- L, A4 L# O( @+ k) h0 w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      j+ D9 [  x& _# {; e- W
  570. 0 y. z% y! X( ]/ o; _( o2 \
  571. //  GdiplusStartupInput gdiplusStartupInput;; M) t: D- [! P+ N4 W) u1 F
  572. //  ULONG_PTR gdiplusToken;. ~% c) A9 S1 |) }! _$ w6 E
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! w. E% [. ?4 {7 p- a& y/ x
  574. 5 m( Z: z: t2 [1 K
  575. //        CRevAppDlg dlg;
    3 `8 U) L  c& E8 g+ O! g
  576. //        int nResponse = dlg.DoModal();
    9 v8 I* c: B+ @+ b9 ^
  577. //        if (nResponse == IDOK)
    ( a/ z/ D# l0 X, p/ e2 l  q
  578. //        {
    8 z* Y! U) d* _- ?! v) u" R/ \
  579. //                // TODO: Place code here to handle when the dialog is0 M" J! x* ~7 Y+ B0 L9 `
  580. //                //  dismissed with OK
    0 d) ]! T# i9 E
  581. //        }6 I9 ]/ c( B3 y7 a4 O! k
  582. //        else if (nResponse == IDCANCEL)$ W( J8 f$ I- t
  583. //        {
    7 `& r5 p+ L5 d" r- d
  584. //                // TODO: Place code here to handle when the dialog is: E  ]& t* Z( F
  585. //                //  dismissed with Cancel& R1 Z, M- m2 L, }7 B
  586. //        }
    ' A9 @5 p. t1 i" f8 W2 S

  587. / A4 \4 X1 U# @- `% M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    3 W  Q2 o6 T3 Z. n3 G+ j: Y
  589.         //  application, rather than start the application's message pump.# H8 X" @# ^, [( p
  590.         return TRUE;
    ' J5 [# _' U) h3 r) i9 M
  591. }; U: f. c8 u' o
  592. 7 q. X, I4 }4 Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 \' h) W4 `' d/ ]4 E1 n( U
  594. {+ \0 u% [$ g* R5 p) G
  595.   int i;% h1 W0 W- U' d, v; d
  596.   char *szRet;; z/ k* x  W9 e) U1 U
  597. 9 l+ i1 D9 ]+ q& E0 |% O3 _
  598.   if(pSource) { itoken=0; sztoken=pSource; }7 ]- p+ m. n* J8 n
  599.   if(sztoken)+ N& Z# d" ~" @$ f9 a) J
  600.   {
    , ?1 [+ ?4 h8 j* C% A6 ~
  601.     szRet=&sztoken[itoken];& J3 @! F6 c. J. `- f$ V
  602.     while(sztoken[itoken])8 V- F2 M9 q' ?5 U; R6 @7 k
  603.     {! A/ |( n. B  I! O; G. e. ~' v% S
  604.       for(i=0;i<(int)strlen(token);i++). F7 y, c4 k9 k
  605.       {
    2 _- n% z& D/ V2 h  i2 V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' c. D  e- ^: w) W1 |' D" Q3 e
  607.         {1 z7 j9 L1 G. k  f
  608.           sztoken[itoken++]=0;2 \# v1 b3 X  o4 K; |
  609.           sztoken[itoken++]=0;+ R1 Z  Q+ w2 X
  610.           return szRet;
    . ^1 T+ w1 }4 h, z5 v
  611.         }
    $ e4 M( |: n4 W3 a
  612.       }9 ^# c" z  F' I/ Q
  613.       itoken++;$ ?4 c( q& A5 x9 [
  614.     }6 C! w; |, `( b
  615.   }1 N& M0 k# G( j3 w: l
  616.   return NULL;
    0 ^( p# w7 _$ b) o" a# e
  617. }2 S8 z- b. F0 R! h

  618. 1 D+ ~) ]4 p7 i
  619. void ProcessProc(long Total,long Current)6 c2 D- c8 Q4 w( ?7 X
  620. {
    2 D/ |% s0 D, \% V; V' d, }6 [5 m
  621.         MSG msg;
    6 |  d- c- k$ h8 W% y0 \0 U% p, {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . ~7 ]: b/ w$ W/ Q  v, N9 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    / r6 s: ^. G5 p' j, o' F5 y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    0 ?$ e: Z/ @5 j1 L
  625.         {5 n7 m6 \& f( E5 j! S4 L
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / s2 D, n6 p7 K. ?: p
  627.                 {
    8 V% N7 s1 a- ?. r; L5 e
  628.                         return;
    9 [  U& D* Y, b/ g7 V6 A; \
  629.                 }
    . \; C2 v. V" O
  630.                 TranslateMessage(&msg);
    . A% q) a" X1 c
  631.                 DispatchMessage(&msg);
    : Z+ `3 e$ [: X) b
  632.         }       
    " e) P( |4 K6 T/ K( u
  633. }$ f! f4 I0 Q& ~" ?" Y  r) y" d

  634. % r2 _+ V  h  l( g/ G4 k) d4 f
  635. BOOL bFirstChar=TRUE;
    / h$ r3 U1 H3 ]4 Y. Z/ v9 }$ q

  636.   Q. Z: x/ n5 ^. S0 g9 G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - q# `4 J9 b& C& C1 W3 E
  638. {
    - f* w) B  _3 K; k4 T6 R) B3 c- `
  639.         // TODO: Add your specialized code here and/or call the base class$ n8 r+ F. @% Y8 Z  U7 A
  640.   switch(dwProgramState)1 H1 @: e& y( q" }
  641.   {, Y' ]% u2 G6 c# Z3 v, Q: |
  642.   case AP_NOTHING:, l: h; w& i( _# i4 D& }: w
  643.     switch(dwStartUpSteps)
    1 q* t1 W5 X( v! b2 w5 B
  644.     {
    2 {3 i/ C+ z0 w; T- n
  645.     case 1:0 t0 M( m! d8 c' ?8 h3 h& F, g" N& U
  646.       {; A) [8 C: e# e  o% [
  647.         int i;8 l) E/ f$ x! Z* P  q! ?- u( c, R
  648.         CDC *pCDC=dlg->GetDC();
    8 [1 R/ {# D: `2 z! X9 h
  649.         HDC hdcwnd=pCDC->m_hDC;
    + ]" c7 X% h3 s* [0 t) {
  650. //        Graphics graphics(hdcwnd);
    % U, ^2 g/ T6 Q2 ^0 |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. `) I2 I! u6 [
  652. //        INT iWidth=bitmap.GetWidth();
    ) {' i' N. f2 s) K$ |
  653. //        INT iHeight=bitmap.GetHeight();
    7 ~& c3 p( P/ F# u2 H
  654. //        Color color,colorTemp;
    : s6 j! y& y! f: S8 Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 i, A, C# _1 S0 L* h+ e5 ?
  656. //        {# }$ _& ~3 s  E% R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 ^0 ~: Y% w; y3 H! W# a) X* `' ]
  658. //          {' q* K/ N$ ?$ S4 @. r! y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& Z! @* {9 J, u( O* t( I( j
  660. //            colorTemp.SetValue(color.MakeARGB(
    % Z! s/ v; O6 q, B( ?# d. G9 f5 U
  661. //              (BYTE)(255*iColumn/iWidth),
    6 y9 R- R6 z7 z$ m8 Q
  662. //              color.GetRed(),
    $ g! K! _/ ~$ [6 u
  663. //              color.GetGreen(),
    " t2 O2 D! u1 X4 q4 V$ E
  664. //              color.GetBlue()));' D3 u! e/ @+ W$ p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% y/ G$ V4 A2 ]! l) z  u
  666. //          }
    & \1 x6 O0 I0 H# K6 I
  667. //        }
    % F4 Q3 Y9 i3 W2 Z1 V! P6 a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + q. |, K0 b: l1 ^% y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 P  \9 x! V* ~; a: M- e
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( O6 ?4 _# n9 C3 k* [$ V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * A7 K* s1 ?$ W
  672.         for(i=0;i<240;i+=8)
    6 C- J" n- Z5 y7 N+ Z
  673.         {
    3 }; }  Z. T' H3 _
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 g& H2 r3 N% T  Z3 [! I5 A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& a, R0 q" h9 q8 _9 ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! ?+ i" L! J7 U+ r- V; w
  677.           Sleep(33);* @  I9 i* {* l. r  ^# _
  678.         }
    % n% z" @5 ~1 e# B5 g
  679.         Sleep(1000);
    " r5 s' |" E. @" B- C9 M
  680.         for(i=240;i>0;i-=8)
    0 T$ \6 f5 p0 e  K
  681.         {- [* v! R) W4 g9 E7 n5 K
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " ?+ k2 \) f# j( f. c- M  Y* U8 K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 j$ f! ^% D: F) z7 Y0 o
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 W0 D" k$ I6 E9 [) R
  685.           Sleep(33);
    6 M" q4 @* R' {5 n8 Q. q- s
  686.         }
    6 |8 B3 k% M7 O  m- x0 T# h' e6 T; e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; Y) v2 |; g; @- P
  688.         dlg->ReleaseDC(pCDC);
    4 i! ?8 `1 S5 [  Q
  689.         DeleteDC(hdctar);* ~& _" L, d; q! a$ |4 w) y% Z
  690.         DeleteDC(hdcsrc);
    6 @$ c9 h" K5 R( ]
  691.         DeleteDC(hdcorg);3 K2 T3 P0 b, E1 `
  692.       }
    / G' n/ [1 b  }  m' P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & U. \2 O/ W7 Y) e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' y: g, G' @# F* X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");0 e4 l- G$ p1 [2 P2 [
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% z) N9 \1 S2 R, `( Q3 l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ a6 p: z6 D/ e# s
  698.       if(!Dn.Connected())
    ( A1 y& E6 d8 O7 t
  699.       {
    . W; m& S; O3 R/ I# y! `
  700.         dwTotalFiles=1;. a% ]/ c+ B% \9 z$ Y
  701.         dwDownLoaded=0;7 L  v. `% L$ k5 _2 [1 ]; ?
  702.         bSilentStep=TRUE;1 P6 E; t1 c+ e1 m
  703.         bCompressed=FALSE;2 _. j+ H& L6 ]7 Y
  704.         strExtLocal.Empty();/ b+ [" \+ b9 }/ l
  705.         strFullName="readme.txt";
    / J+ _2 ?0 |2 F1 h+ V( h. [
  706.         dwProgramState=AP_CONNECT;4 m) M, h# w7 D; O2 @& w3 T
  707.       }: i6 [% H+ w# t6 Q! ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 P6 n5 x6 C2 K7 o! T0 S* x
  709.       dwStartUpSteps=2;8 j% |" v' p" v- w9 h0 ?7 z
  710.       break;7 o% x8 W7 H3 Q/ H0 I$ y* ^) x
  711.     case 2:
    ! Z. z% Q) I  M
  712.       {# u+ R/ M  t8 l3 d$ h9 J
  713.         int iEOF;
      i1 h, e/ h  ?! f) k
  714.         FILE *fp;4 x7 T+ u, ]& g; P
  715.         char szString[512];
    * S6 W% B: u& N$ ~6 M6 n2 W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' c8 I  x% N7 a7 v, n
  717.         if(fp)! Q" d/ ?  S% O2 `
  718.         {' u: N$ y7 d( z6 u0 S1 a3 q9 |
  719.           do
    8 o7 h0 B: J/ p8 j# B5 _9 n& g
  720.           {5 G. J# m; M, J1 z( G
  721.             iEOF=fscanf(fp,"%s",szString);
    4 j  X: ?$ m! S- W2 N3 x
  722.             if(strlen(szString))
    & V0 x6 c* J1 Y3 g3 Y3 v
  723.             {
    5 a9 y& b5 Z9 W6 T6 \% X; p6 ^
  724.               if(bFirstChar)
    ' v& ?) k" u5 a$ s8 H  O
  725.               {% s' h& D- J) r/ j( u# I1 S6 [
  726.                 bFirstChar=FALSE;3 ~7 a' k2 W, U: @
  727.                 bConnectIsBig5=FALSE;( f9 ^+ P, z* T1 L8 {1 ~9 a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) \- r$ N; u2 |8 F3 W# R
  729.               }5 A8 X/ s9 V8 [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# o: f# U0 S( U1 E! |* N5 v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : o( W+ b. ?/ R8 h" E
  732.               dlg->m_ListText.AddString(szString);
    % G) M* c  q4 n  d' y/ M! R9 M4 m. C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 x* c$ s) a; x+ I
  734.               *szString=0;
    0 C% n5 ]- ]+ }$ g5 F5 K
  735.             }$ v5 r2 p( O5 X  z
  736.           } while(iEOF!=EOF);; @1 i: U# K! H% ~
  737.           fclose(fp);- G) [; s0 s) a" S. W7 J6 L
  738.           unlink(".\\DownLoad\\readme.txt");. L* p+ S3 N. f) @5 p4 a+ ~
  739.           dwStartUpSteps=3;
    & u7 s* o5 [& t. X' ~9 j
  740.         }
    1 C* c% n" t: k, Z6 s: _9 d
  741.       }3 {2 i) z; f& _2 i; k1 V7 Z* \
  742.       break;
    ' I$ x/ j' x8 Y7 Y
  743.     case 3:3 _( j4 Z% n' J' Y. X
  744.       if(!Dn.Connected())
    $ s/ t/ v$ _0 U- O# x1 ]
  745.       {: r4 X9 Z/ G8 a  [+ h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 \( X9 a' G$ ^
  747.         dwTotalFiles=1;
    2 _) ^- P9 ^8 C0 F
  748.         dwDownLoaded=0;* F) C; x7 d& @0 t, t
  749.         bSilentStep=TRUE;
    % J7 l: E) S( k2 O
  750.         bCompressed=FALSE;& [9 m5 [* N5 L% J1 n0 S% o
  751.         strExtLocal.Empty();# g  V  j- X) C& B- i2 |
  752.         strFullName="checkversion.txt";. a2 ~4 b! r0 w9 {( k) X! k  ]
  753.         dwProgramState=AP_CONNECT;. Q, T- z+ x# A+ b  ], I
  754.       }
    6 L. E5 S" g" L
  755.       dwStartUpSteps=4;3 [7 o3 A1 T) h. n' [0 a4 A
  756.       break;# f5 {9 O6 R3 |3 S
  757.     case 4:* r2 o# k2 w  I- F; G6 \
  758.       {' n. T8 h1 {) r6 d  {
  759.         FILE *fp;$ p0 x* M% p. B9 D6 k
  760.         char szString1[128];- y  E! q3 _8 ~/ h1 o
  761.         char szString2[128];
    6 p  x' l7 m# ?0 G8 i; u
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 I$ r& {; }! w$ |6 O: j+ g8 c  j
  763.         if(fp)
    + g# Q! w) J7 F
  764.         {
    9 \! s$ Z, m2 }# O8 u
  765.           fscanf(fp,"%s",szString1);! }  h" G/ @$ @
  766.           fclose(fp);
      G6 f2 @! J) P: e7 b1 Q, {, x
  767.           fCheckVersion=atof(szString1);
    9 l5 i0 X9 W; H& T" l: l3 s& v
  768.           fp=fopen(".\\checkversion.dat","r");. G& I& a9 i- s0 Q8 h
  769.           if(fp)
    ; N9 ^$ {7 @0 l1 Y) B! m" B
  770.           {
    - Y' M% z7 V- J5 ~! r! ]
  771.             fscanf(fp,"%s",szString2);  C) R3 [* x( Q  Z, T
  772.             fclose(fp);
    / a3 H9 u# e, a3 h
  773.             if(atof(szString1)!=atof(szString2))
    + a) B& `: q6 A! h$ H
  774.             {2 Z% @1 F* [3 i7 `* n+ c
  775.               if(!Dn.Connected())
    6 c* F7 X5 X+ T1 o. N
  776.               {
    % J; C/ |3 r; G
  777.                 bFirstUpdate=TRUE;
    # q+ I; i5 s' S& r; V7 v
  778.                 dwTotalFiles=1;8 A0 n6 _3 |8 d2 l2 w6 |
  779.                 dwDownLoaded=0;8 J0 e# u- T1 N* U) ^0 J
  780.                 bSilentStep=FALSE;" Y$ P4 X  Z6 H' P4 c7 `' Z; v
  781.                 bCompressed=TRUE;8 M3 Y1 Z4 n8 i2 L
  782.                 strExtLocal=".\\DownLoad\";9 V1 i9 N9 N7 o% J  Y, y0 |  e4 S" |
  783.                 strFullName="update.txt";8 X9 F  k/ u" q; z; I8 J, f
  784.                 dwProgramState=AP_CONNECT;0 J! k! i2 j0 m# X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! d$ m8 Z# v" V3 U; k/ J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ _9 r# Z( ?0 ^3 n1 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. k8 n7 E1 c( ?# g

  788. " U+ i0 n( x# C/ r; e; E" W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: f* `) w1 Y  F9 V( l, O2 c/ h2 G" x* x" p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + i8 U# ]' ?* }" J8 r& Y1 l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)$ u6 R# `9 N6 t1 x+ I0 U5 Z
  792.                 {
    . T) j, [% A4 m. f9 Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ o" I2 V6 [$ Y  _' v, w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* i- Y* }- a6 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 |% f" q# Y0 J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 {$ E) q3 G. x9 Q: H

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

9 |+ ~7 z7 Q. G. H! }

評分

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