CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
9 q. s* }, l- I  s* q1 A* c- R3 L6 @
  1. / RevApp.cpp : Defines the class behaviors for the application.. d- _8 X9 a% `9 a- U. L
  2. //; K. [: ~0 q3 V+ N3 p/ J# x; C+ G
  3. $ ~* f: I* ~( o6 k
  4. #include "stdafx.h"# I) {- L; W+ N# }7 G$ M: }

  5. ) N" X2 Q' A" i+ [6 g* u
  6. //#define UNICODE1 Y: V% s  B. y1 P
  7. //#include <gdiplus.h>
    6 a# Y, o. q4 k* V
  8. //using namespace Gdiplus;9 N( R$ a, K  @/ v

  9. 2 F; k, k& g) b# i
  10. #include "RevApp.h"
    & w1 y' S5 B7 b6 `% _
  11. #include "RevAppDlg.h"
    ' u/ a; p4 f) \/ \$ m7 M
  12. 2 W7 [+ o- {4 C6 J' ]; B0 H
  13. #pragma warning(disable:4786)) Q5 Q+ F" y4 R
  14. #include <map>
    + f* f, P% v- n* G# m7 J& @3 _$ @9 N' G) O
  15. #include <list>
    % C2 {# {6 D  I0 f! n6 r
  16. #include <direct.h>  Z- H) {! r; l5 N( t1 i* \9 L* I

  17. : y4 @* Z- r1 C
  18. #ifdef _DEBUG- j; y, R1 b2 V; p
  19. #define new DEBUG_NEW; B. r, h2 e9 b' b+ H
  20. #undef THIS_FILE9 A5 r3 E1 W& o8 z8 b) j
  21. static char THIS_FILE[] = __FILE__;- o6 K8 r7 v5 p
  22. #endif! T' @2 f: e- U! q0 d0 i
  23. #include "SkinResDef.h"
    7 U' h- h9 Z! f& K
  24. #include "ChangeBG.h"
    ( B1 T6 P$ ^7 [3 A
  25. #include "AFXINET.H"( A' g+ [) x  Q4 r: T, e1 I9 Q

  26. - I1 B$ y4 `* A6 z9 j
  27. #define TRADITIONAL_CHINESE 0
    4 T3 }4 M! T+ E: ^  w5 V3 h' R
  28. #define SIMPLIFY_CHINESE 1
    3 u, s" Y9 }  o+ K
  29. #define ENGLISH 2& E' v; [9 b$ I3 T* X7 G* v4 o
  30. int m_iLanguage = ENGLISH;
    ' O1 ~8 X! x# ]% S" t
  31. /////////////////////////////////////////////////////////////////////////////
    , Y8 |  E3 q1 N! ?, d# R( m3 v( m
  32. // CRevAppApp$ Q: q7 ^/ B! B# t$ ]3 n
  33. , _5 b8 s- c3 i) U5 Q! C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & l. l8 U$ M" O7 d
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 S2 N( ^* k* K
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . T" n9 I3 M7 m* s2 E( G* G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 \" q; ~$ r, A
  38.         //}}AFX_MSG3 v! i$ X1 u- i$ v: }$ l
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 \* n! i# s8 l, x- S: S
  40. END_MESSAGE_MAP()
    / \- f9 t/ _+ p: M3 B( u$ c# ^

  41. 6 y8 ?6 d0 _: v  s4 `
  42. /////////////////////////////////////////////////////////////////////////////. [4 }0 q! |* b: h2 o0 E
  43. // CRevAppApp construction
    8 n4 I, ^/ C3 B, |& q3 T$ j. L
  44. 2 o) C# P1 Z0 i: G9 W: v% c
  45. CRevAppApp::CRevAppApp()* y1 d1 e' m2 B7 y. p! y& M
  46. {
    6 }' U2 t2 _: g4 Z
  47.         // TODO: add construction code here,0 O  g0 V* A4 f3 z% H3 H
  48.         // Place all significant initialization in InitInstance. E  |, j2 f+ G) Z
  49.   bDisplayIsBig5=FALSE;
    # Y, s4 ?: _+ A; [7 V0 L
  50.   bRestartUpdater=FALSE;
    9 z2 D, U. g/ s) G
  51.   bFinishUpdated=FALSE;" z$ {# Q  l+ V+ ^  h. D; b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' E# n, W) s5 E5 ?* J  R& {/ B
  53.   InitChangeDataBig52GBKS();
    0 a( G: j- `+ i- l1 x4 N9 F+ ~
  54.   InitChangeDataGBKS2Big5();
    9 c/ O4 \& Q6 a* u# G. c! @: Q
  55.         //; S; v; j% x* @( b1 {* N( Q5 y3 B
  56.         bClickRunExe = FALSE;: |/ r0 j7 z9 o( ~- c, p
  57.         //
    ; H* p5 @" T/ t9 C$ H
  58. }2 U: X5 E; G3 N6 [
  59. 5 V& j" n& S& Q& r; H1 G$ ^3 d
  60. CRevAppApp::~CRevAppApp()
    & D7 K4 \+ R; {, q4 z
  61. {% n4 n; X3 q% `
  62.         // TODO: add construction code here,( s/ B# N1 Y) `& d9 E0 }, o
  63.         // Place all significant initialization in InitInstance6 d# H4 i( H' B
  64.   EndChangeData();
    * k. g; u' E- d2 z& F8 ]
  65. }5 L6 T2 t0 R6 i3 l( A* c- T( ]5 h

  66. 8 S& x/ a$ v6 i' ?+ f) l$ f
  67. /////////////////////////////////////////////////////////////////////////////
    2 \, f% D: ?( s7 I
  68. // The one and only CRevAppApp object' z7 h: [, h8 ?) w# q; N5 ]

  69. 4 D) r! F0 I1 r; E
  70. CRevAppApp theApp;
    5 O. k+ E' X! U" _

  71. 8 |/ F. D( q2 |' T1 C4 t5 x" _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 W* W8 f3 U' W+ p, B: O  S. Q3 U
  73. {6 ^- z$ k9 j, N: U7 Z( q7 H% ?: T9 ~
  74.   int iEOF=0;3 ^2 v, N$ n' r0 M3 w! m
  75.   char szTempName[MAX_PATH];
    2 @$ H  g4 ]2 _- g5 w! [+ l5 R
  76.   *szFileName=0;
    , L! p' M$ N2 }5 W1 u9 ?( K- _  T5 p
  77.   iEOF=fscanf(fp,"%s",szTempName);
    . v+ l. G; p, n& |2 a4 Z) |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 `) d( ?( N* j. h% P5 Y
  79.   {* R9 J* a7 e& Z: b' R' f5 E
  80.     strcpy(szFileName,&szTempName[1]);4 G3 u2 _1 H% ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      T8 s6 |6 c$ f- {. v
  82.     {% L/ s& n6 K8 K2 b! p
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , m- ?  I2 @9 {+ a& s& g8 z
  84.       strcat(szFileName," ");9 d  @1 n1 e& `- F
  85.       strcat(szFileName,szTempName);( \/ h  G5 I; O$ U* B
  86.     }. [/ I- ~7 D( a% \: ]
  87.     if(strlen(szFileName)>=1)
    , A7 a) t/ s5 Y% [
  88.     {6 l9 t5 c; C! c0 C$ |
  89.       szFileName[strlen(szFileName)-1]=0;. R, K$ I3 p: F! G. u: Y
  90.     }
    & c+ b# y1 R- j( h
  91.   }* h& U- w- }9 z3 H9 {* `' d
  92.   return szFileName;
    0 Y/ _* \' P# i0 Q3 b* e
  93. }
    ' ?% M! o) D9 C

  94. 1 L; S/ g5 }' F# s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ ^0 ^8 v6 {  L* j+ b) S" c4 H
  96. {
    ) \8 Q" ]6 ^" q2 v1 _0 Z4 k) T
  97.   FILE *fp;, W2 y3 _6 ~, d! {; l( a+ }# U6 w# g
  98.   char *key=NULL;
    " b* U$ i" l+ h9 E) z
  99.   char version[MAX_PATH];5 n$ |/ }6 f8 V/ [* T1 y
  100.   LPUPDATEFILE file,olds;
    1 F" f* c: P* k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      I% |; P9 G9 k& [

  102. 5 t, b+ M  i5 a+ A# s9 V
  103.   UpdateList.clear();
    / u# Y) V! q$ Y; x; j: @
  104.   UpdateFile.clear();7 @3 b; a5 Z3 @' f1 t) c+ z
  105.   if(GetFileAttributes(filename)==-1) return false;
      d- j3 L* v- m' H( Q5 Z* _; A" b
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , P" u3 t* w5 O2 O6 m6 H. }
  107.   fscanf(fp,"%s",version);
    7 S2 V9 \6 j: {5 D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: W0 G- i1 n$ V8 F  |# x
  109.   while(fscanf(fp,"%s",version)!=EOF)0 M  J- z' ^9 w5 [  T7 y
  110.   {
    7 D7 P# j* Y+ z3 ]) i; e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 r5 r7 n: |/ ]
  112.     fscanf(fp,"%s",file->path);
    % N0 |& ~4 j3 Z$ \4 I' a# ?, g5 [
  113.     ReadFileNames(fp,file->file);8 k6 k" I3 r$ k. I. E- l5 I% y
  114.     strcpy(file->full,".");+ p, |+ S- C7 v4 A% ~9 {
  115.     strcat(file->full,file->path);6 e" m  Z1 I% t+ y. J
  116.     strcat(file->full,file->file);
    5 c- e3 H% i6 ~7 {. Y4 s5 V' K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" P, y* O- {1 l8 A* C  Y, x% Z
  118.     {. Q; L: |. C' [& V; P
  119.       file->vers=(float)atof(version);1 H, {9 A! J3 `: K
  120.       UpdateList.push_back(file->full);
    0 h& ~! b. K* J  M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));$ ^9 @' ~0 B9 b8 L
  122.     }
    # v7 a% c6 }: j& l; x% ?9 g
  123.     else; X, h0 L. M$ S+ U4 A. j5 D
  124.     {
    4 z$ V1 ^$ V9 E# V0 y3 f/ |
  125.       olds=(*p).second;
    $ g4 d; f0 U. d  ?
  126.       if(olds->vers<(float)atof(version))! k9 B9 j) n4 p* W7 e% }- s
  127.       {
    3 H1 ~$ Y# f! e: B+ k8 g( |
  128.         olds->vers=(float)atof(version);
    0 w% \' n- V5 W6 U$ g; q$ H: x
  129.       }
    ' {' S; P% [; V) V+ r5 k8 R
  130.       free(file);
    # \! b" M8 [1 Z8 o( ^8 |
  131.     }: D3 v7 U5 ]0 c
  132.   }
    4 r3 q! W. _( ~* \& n# U
  133.   fclose(fp);4 r0 m2 n: w. D$ f  W. q
  134.   return true;
    ' f; g9 I7 }9 X0 k2 N9 w
  135. }
    2 s. v$ t/ I: F; k" f5 Z7 ?
  136. " ^& H$ R1 [5 k: e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- c. A# d4 `; E# A! w* V% R, Q. O. Z
  138. {
    ; ]- L: h; d) k& u2 t; H
  139.   TCHAR  szFull[MAX_PATH];3 D6 G" t8 H) }; M
  140.   TCHAR *token,*inter;
    + J! {) J2 L6 x' Y. i* |( Y: |
  141.   *szPath=0;
    . m: K- T. e. Q. w9 ]
  142.   strcpy(szFull,szFullPath);) q& }0 H' t& t
  143.   token=strtok(szFull,"\\/");- B/ s, j9 _# j5 S
  144.   inter=token;8 K% R2 I: I" j/ Y+ @4 n5 X
  145.   while(token=strtok(NULL,"\\/"))
    . i) _2 X+ c1 a, {1 n* z
  146.   {
    6 C& @7 [( ]4 }8 t. M8 F4 \9 y
  147.     strcat(szPath,inter);
    4 L2 i" l' i! ]  t
  148.     strcat(szPath,"\");4 Y# z) t% ]/ t- M0 h
  149.     inter=token;
    7 T1 G: t- ^6 F* Z% c
  150.   }
    $ e" \( |( A% p  \
  151.   return strlen(szPath);6 G) b4 d! s+ D' [
  152. }
    4 g; i5 |+ ?+ h" i5 l' l

  153. ' F" ~' ]/ T! R% p* {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) x# H! s' q5 P
  155. {1 b+ T! x6 Q" P: V6 \1 r
  156.   DWORD attrib=GetFileAttributes(Target);
    ( ~+ }3 H( i/ i4 ]; _, y- ]9 M
  157.   if(attrib!=-1)* B7 h6 F, P3 v/ w$ R9 @
  158.   {# D8 D5 ^: q7 p' `5 ~3 L% h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    4 _: y. \) a7 C
  160.     {
    # h. [3 J* |) h* g* S/ \5 ?. y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : |$ w# o/ Z) @3 r; ]: y4 X
  162.       SetFileAttributes(Target,attrib);
    ' d. T' K9 [- B6 B; Q( Q
  163.     }1 [; q1 L  k/ m3 t# R
  164.   }
    ( O1 _+ X2 p6 s* L% p
  165.   CopyFile(Source,Target,Erase);
    0 @( g( J0 w0 `
  166. }
    # Y9 m  N  w2 W' j* }

  167. 1 _9 {* t: b$ j/ u. g6 u
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , {2 n) R$ n- Q- E
  169. {4 ~# f" |+ r; d4 A# G
  170.      FILE *fp;. g5 s& B! u5 y" \5 t- b, ?
  171.      char  szBuffer[8192];
    6 v8 M0 C0 U) t% n9 E% t) T& Y
  172.   va_list  argptr;, V, V% R; o# H
  173. 7 d/ t9 {1 @+ I/ P9 h/ f
  174.         va_start(argptr,message);% n- |" S" b$ t4 T+ R3 l
  175.         vsprintf(szBuffer,message,argptr);! ~, {* ]+ N- X
  176.         va_end(argptr);8 ?( w6 {% e* G1 b8 L- t
  177.   fp=fopen(FileName,"a");7 f7 d2 A0 z+ Q! k/ M) M% n
  178.   if(fp)
    , n# X3 o" t) O% t. x- x( [; T& N0 X
  179.   {- q4 n  C# v6 N" s9 `7 w7 z" X; Y
  180.     fprintf(fp,szBuffer);
    3 X% W2 ?. T* F6 m7 z1 R
  181.     fclose(fp);9 k$ Z8 U8 Y- T& u
  182.           _flushall();
    ! b7 D2 Z% [0 G/ z4 N
  183.   }
    1 _+ L  t8 S8 s8 y4 l& q% t9 D4 z3 g
  184. }" ]4 U$ {! r4 u! @; g' m4 t' D

  185. & F! E6 ^! Z+ U+ w8 }: a
  186. BOOL CRevAppApp::Fclearf(char *FileName)& h$ ?( x! |" J* V+ @& @0 x# k
  187. {1 j) m+ q/ r7 x* b$ X5 Z1 I# W) l- i
  188.      FILE *fp;
    1 p9 y" w7 w: Q6 a2 t! `9 R- y
  189.     DWORD  attrib;1 F3 P, }7 a, X
  190.   attrib=GetFileAttributes(FileName);9 \0 @. f) b+ x, P/ [
  191.   if(attrib!=-1)
    ) ?& l  a' K( r2 Z
  192.   {4 x& ]* M$ H6 a; v  b1 R6 q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 t' o1 N) R. F
  194.     if(!SetFileAttributes(FileName,attrib))
    5 X+ b% }8 k; p; {
  195.     {% j9 r( K$ ?' b5 Y+ w
  196.       return FALSE;
    ; e/ e9 a7 W7 S* h: R
  197.     }
    " G5 }/ c# `& ?  v4 i* q
  198.   }
    1 H' D! \$ C% |- a; N
  199.   fp=fopen(FileName,"wb");- }' b: e9 R5 R/ z2 B* A; T
  200.   if(fp), R" R  [) [* P; m) [, A8 X7 j
  201.   {
    / L6 j7 U" w5 t- n# S
  202.     fclose(fp);
    ' q4 a8 h1 P' F3 F% q
  203.   }4 |1 l3 y+ ?4 S" h, ^
  204.   return TRUE;
    ! w, M7 J+ H  z# U
  205. }' y- {, z# Z9 Y& @8 {& O. H/ \

  206. : E- F5 P3 _/ d3 m% C1 Q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 f6 ]; F; U' v5 q6 a
  208. {
      ?6 L" n7 V: m2 j4 o% U+ a" F9 ?( ?
  209.   char filename[MAX_PATH];
    ; _1 h. I* `  Y7 d( \
  210.   LPUPDATEFILE file,olds;: E' @: j; V+ A$ p
  211.   std::map<int,CString>::iterator i;
    , o3 p  d2 d5 E4 P& w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* H: e0 L2 F8 y3 ^4 X1 }
  213.   std::list<CString>::iterator l;
    # {9 u8 L2 g! E- o. x; E

  214. 1 w+ x5 }4 h/ r8 }6 m7 z) }
  215.   if(bFirstUpdate)
    1 s! b+ p' g4 T& j& u* v. o
  216.   {' z: Y' ]  y" d5 y: c# s/ l
  217.     dwCurrFile=0;
    8 e- ?  }$ H# P$ j% K$ ?
  218.     bFirstUpdate=FALSE;
    ) x" u0 L$ r6 ^/ D2 ~; N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 Y, Y* P7 [, H6 r! {& u# j
  220.     {
    ! M: P  A( w2 w5 G. D# R
  221.       dwTotalFiles=UpdateLocal.size();1 z$ y/ \0 P7 B" H2 ]6 |
  222.       dwDownLoaded=0;
    ' a7 Y! m* @) n
  223.       bSilentStep=FALSE;% ^6 z8 n4 b1 R3 o
  224.       bCompressed=TRUE;
    7 r0 y1 _1 m1 C3 ?, V' |8 L
  225.       strExtLocal.Empty();+ I4 H  h0 l  |; f7 p# w
  226.       strFullName=(*i).second;
    % {2 `- ~8 h7 E. h
  227.       dwProgramState=AP_CONNECT;& Q2 q4 Q8 D* O, |- ?) i
  228.       return TRUE;# Y* F+ U' H: }. K; {3 h* k) d9 @
  229.     }2 P. N# H  T9 V& |/ K
  230.   }! ~6 ~3 h# e! q
  231.   else if(bRestartUpdater==FALSE)
    5 A( V1 b2 |" l. a( m8 c: D% j4 L
  232.   {
    7 X7 J$ Z4 P6 `8 @0 J$ H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 B5 l) y* t/ M1 h
  234.     {
    , L9 ^. L1 v' Z8 `; I2 H+ V
  235.       file=(*p).second;$ s) |0 v" [6 a7 q( S- X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * `, _7 A; l8 a/ J* e- @
  237.       {6 L, s# Y2 ]0 K' A& ^( c5 ?, G
  238.         olds=(*p).second;
    4 @# [9 P, u: ^" j+ w- Q6 ?
  239.         olds->vers=file->vers;
    * F1 C% w3 h$ o! {& a
  240.       }
    5 R' g) }9 f0 B1 i  Z) x/ B
  241.       else& C# q8 k# E  u" l9 ~; ~' L% e% q
  242.       {' W* d9 [+ ~& \* [  h' ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 z7 g8 w/ i! Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    7 z) `3 u3 u* L) E- r9 b$ u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / v- E( O* Q8 i" x. y9 T# f! [
  246.       }
    & O, s( y  o+ E9 r4 l. v; y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & U+ a' @, O% r1 G
  248.       sprintf(filename,"(%s)",file->file);
    9 ]: Q8 k$ Z7 V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 `0 }* g3 ~( o$ `5 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 K9 d: P- o4 T1 X5 m+ e
  251.     }- W+ R$ d$ l0 f6 X  b: S) y2 u
  252.     dwCurrFile++;
    & z! {* c' s1 B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). E' H5 f1 j' E6 j, i6 M
  254.     {
    7 v6 C/ }( [! r
  255.       bSilentStep=FALSE;* L4 ^/ e0 V! e3 `
  256.       bCompressed=TRUE;  ?1 [8 n7 E2 c; _, y1 E
  257.       strExtLocal.Empty();
    # T$ F9 l# a2 w8 @5 B( Q
  258.       strFullName=(*i).second;- ^, L* Z7 b7 f- R4 k  Y, q+ f7 b
  259.       dwProgramState=AP_CONNECT;
    5 r; {5 G; Y4 T3 ]* U' r
  260.       return TRUE;
    + S1 C% X7 _1 u% @
  261.     }: I7 x" R' F. t, V3 w7 J1 l
  262.     if(!bRestartUpdater)
    0 ?- H* N- b1 E# P! k
  263.     {- d% S  O; ]. D
  264.       int iCurrSize,iFileSize;
    7 U8 m+ ], B  [& S* h
  265.       iCurrSize=0;
    3 r# m8 p; v: H" P/ V
  266.       iFileSize=UpdateList2.size();
    , _, L: x+ b6 {, [
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - i0 ?/ ?/ ^" h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( |/ D( A+ K: a+ G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! a6 ?+ d: K8 x; m0 K' c$ S' S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Z( o4 H9 X  T! W
  271.       Fclearf(".\\update.dat");
    + E. Z& o* t) X( A  @  o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 s1 Z4 W1 S8 X* w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) r+ _9 O. |& ^+ x
  274.       {3 j" n0 R: T. p. r9 x2 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): o8 G! g) K) o6 J
  276.         {
    + A- C3 ^, d5 [2 R
  277.           file=(*p).second;
    , P" O1 W, i) x: y* e6 s
  278.           sprintf(filename,"(%s)",file->file);
    ( Q5 @8 y& [8 B% k: H3 ^! G. @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " Y6 Q* \+ s' V- @; B6 {- U. |
  280.           iCurrSize++;
    3 p! G- E5 I1 s/ f1 A1 G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));  ?6 P% ^. H( g1 U
  282.         }
    & f5 K! T8 E; b) W0 w
  283.       }6 K3 T' S6 A. u# L" ^7 [
  284.       unlink(".\\update.txt");) P) o$ \8 j7 @4 B; ~8 D9 J% J
  285.       unlink(".\\update.tmp");
    ; \% R. _0 w! A. N9 Z
  286.       Fclearf(".\\checkversion.dat");; P! q! m, Z" T* e9 T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' U) B% `  L% E; l- M
  288.       if(UpdateLocal.size())
    & z; v. _- N, d; h' {
  289.       {
    ! j  O% A8 q' C" D% B
  290.         UpdateLocal.clear();/ y' a, P- E/ h% h$ e* v, l" o$ J
  291.       }
    $ ?1 J" U# X8 ~" V: @6 Q7 O
  292.       if(UpdateFile3.size())+ K6 u, t6 v) ~3 r" Y# x6 n
  293.       {+ a' b) Q  D+ h/ o& k: z6 x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - D2 U, H! V9 |& \) U+ o
  295.         {
    + R: P) `+ _7 s4 i( j5 T
  296.           file=(*p).second;
    6 h5 ~! |0 i! @3 W! d7 x
  297.           free(file);
    . `! A3 ^7 H! S0 g! E+ y# |
  298.         }
    5 V  H. L5 ~$ k! i% T2 S: W
  299.         UpdateFile3.clear();
    / Y; ~3 f' R) o0 W6 _8 ~+ X
  300.         UpdateList3.clear();0 b* Z  t# I$ d5 E# m: i
  301.       }$ ~. Q2 x9 e! {" m3 K& X* m' ~
  302.       if(UpdateFile2.size())! l8 P5 s" N4 Y" U. c) _  g* A
  303.       {9 f$ ^5 [$ Z  f% d& j1 L, ^+ X
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + @5 P: J1 w  K1 N6 a% y  w
  305.         {
    : s3 X4 o! V% S* v
  306.           file=(*p).second;* \1 o" B- a& I* a, I2 k. y' r6 W7 r
  307.           free(file);
    ' w" q% S. `) p( t( a6 U6 p
  308.         }
    ( g4 @0 z4 |  _' T% `% w
  309.         UpdateFile2.clear();
    ' }9 Z: |5 U) Q# N7 T1 m; @, O
  310.         UpdateList2.clear();
    ' A& L5 C2 P* |% t# q
  311.       }
    $ `0 H5 r5 F0 {- I4 d
  312.       if(UpdateFile1.size())
    . _1 y7 Y, L0 V# z+ T' S
  313.       {
    * C# J5 [3 ^6 a+ K: F1 Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & R2 V' C5 ~7 ^
  315.         {( H. ?2 B3 V% H* f, y
  316.           file=(*p).second;
    $ T( r" c  \2 a
  317.           free(file);
    6 |( [8 ?4 h2 D/ k9 F
  318.         }7 o7 k( M: A; L5 Z+ p
  319.         UpdateFile1.clear();
    , \0 h& u: }; j1 W4 V
  320.         UpdateList1.clear();
    5 y( Q3 ]6 m$ ]& m& d* j
  321.       }
    : S$ A2 ]4 S  x# ~) D% g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! y, a+ y3 W8 w
  323.     }4 _/ K5 A' G3 t# V
  324.   }
    6 M( K5 K) S& d' T" U
  325.   return FALSE;
    ( G2 Y: y0 [+ Z
  326. }! c" J0 j2 W7 ~  c6 P7 Z* \& [8 Y( \# Q
  327. , @5 u3 Y% a9 L+ Q8 p% W0 M* ~5 C
  328. void CRevAppApp::ClearAll(void)5 p" |1 E% e0 K
  329. {6 A0 Z+ B& g8 I6 Q9 O5 f( Y
  330.   LPUPDATEFILE file;6 L. O5 u3 K9 m7 {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% N# p8 p) b" I* O: \, P
  332. 6 R9 }, T. E. i
  333.   if(UpdateLocal.size())
    * b# ?# w8 Q% L- G; @
  334.   {
    . q2 R! w# g. Y+ p
  335.     UpdateLocal.clear();
    , ~3 r  c' G0 m$ ]$ ?9 V& I
  336.   }; v# _+ S" B) J6 i% \% b5 P
  337.   if(UpdateFile3.size())
    5 s- E  C; d+ _: Y3 a
  338.   {0 w7 r5 L' ?/ S3 a# j( [; m9 s7 G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& ^8 B# u) Z! p! \
  340.     {; m2 k$ p2 R5 W- O- j
  341.       file=(*p).second;) Q+ t8 I$ O, ^" h( X- m) t
  342.       free(file);8 \- w7 G. a8 s3 I7 r3 X+ P
  343.     }
    ' ~1 S6 i, \5 M2 q* H
  344.     UpdateFile3.clear();& G  g+ l. Z6 [7 T9 A9 C
  345.     UpdateList3.clear();
    9 g1 ~; j% Y2 ]- {7 b, {! e
  346.   }
      S, e4 U) n1 ]& c! S5 p; C
  347.   if(UpdateFile2.size())6 \& H7 \/ {% D7 b- [
  348.   {+ W/ ?$ }5 \: B, C2 |
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% e1 a* a4 E% a
  350.     {
    ' y- Z  E, Q8 `$ X" X8 x
  351.       file=(*p).second;
    : E6 e! k+ s6 B& h
  352.       free(file);
    ) e; D6 ]9 o  _
  353.     }
    / r( f4 ?: M: f1 i" m
  354.     UpdateFile2.clear();
    ! M0 _- Y! |" c8 c3 {+ Q5 ], k
  355.     UpdateList2.clear();
    # L2 K+ y0 W2 _  f$ X$ E
  356.   }
    $ G( m. A8 k( O+ P. i/ l4 H1 F8 z8 ?
  357.   if(UpdateFile1.size())
    7 N7 o3 a0 k9 j; n' j1 a, q1 R  g% W
  358.   {
    ( m+ a6 w0 M* f& I, T2 u. U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 e4 e- L) ^& R9 ?7 I' B
  360.     {
    , Z5 e) I) R) n5 L: Z% W- |. s
  361.       file=(*p).second;. H- D3 o" b2 O5 e
  362.       free(file);
    + O/ ^, R/ A6 z( n1 ^9 e/ F, Q
  363.     }* t  o4 X; v) S# s6 O- f
  364.     UpdateFile1.clear();; X0 w9 I2 a+ v" t% d* o; Y
  365.     UpdateList1.clear();
    5 t9 m2 f, Y4 K) _/ V+ k  m
  366.   }
    9 f2 K# F6 ]) k1 O' @
  367. }  
    4 {2 F4 ?. g" t' a
  368.   ) N; K) B0 ^% i0 U# G
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ p+ x9 ]& F* D( g3 V* l5 U2 v/ C
  370. {. v5 l# h; n" E5 c6 Q/ f7 d4 l4 m  ~
  371.   int c;6 x  ?  V. b+ _( `
  372.   LPUPDATEFILE file1,file2;* S( M; z, u2 r) @0 ]- {! I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 I$ ?8 F! v7 c% w! q
  374.   std::list<CString>::iterator l;) H+ ~/ ^4 K! S$ H5 B( l
  375. 5 s( y" z$ e" ?" K$ n
  376.   UpdateLocal.clear();: I* L$ U/ N& F: z# z  Y' F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 D! E$ [. n2 u( B/ L8 y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 x- [! F7 s3 U7 r- ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! [; O! z+ n( S$ r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 d6 U, U7 i+ L
  381.   if(UpdateFile3.size())
    ' e+ o6 J+ {+ \& f6 w
  382.   {
    / x8 l7 p8 @  B4 V6 J! V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 X; s0 T6 ^% S8 i
  384.     {; [) L0 l" l5 h, U* L0 t0 x3 p& H
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 |0 |  c, j5 y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 q$ p, {& e  U- M7 ?# n1 P
  387.       {0 @) O5 ^  o. V" R* p- P
  388.         file1=(LPUPDATEFILE)(*p).second;
    & h8 j5 Z6 C: p' S' h
  389.         file1->vers=file2->vers;8 q- V  {5 E9 y/ e
  390.       }2 I5 f: i+ n# f
  391.       else
    $ f- n1 ]6 G. z2 q
  392.       {. M1 A/ r- J' H* B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. q+ J5 j& N2 i' C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    3 z- F. f5 I8 a7 ~$ f. @
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! j7 S$ q* r2 C. ^
  396.       }
    * H0 d5 G  j. V' O) Q
  397.     }- U" I7 y; j. ~" q1 x; l, G2 H. Y
  398.   }) H5 ?3 I! a/ L! r4 M- j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 Q8 b8 U' b4 O8 A, {
  400.   {2 X1 s# _$ C1 s0 d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# o0 a' ?' u! |# I6 D
  402.     {
    / i! B8 e% J3 x: h3 y' R
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 m* `. W5 w( d% O+ L; R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / i( B  S) `+ C
  405.       {0 F9 i( X5 w! M& J
  406.         file1=(LPUPDATEFILE)(*p).second;
    # S* w& r. u6 k$ h
  407.         if(file1->vers!=file2->vers)
      b3 O5 V  C- Q6 Q/ O/ e6 p* w
  408.         {
    ( g5 z  Q) B/ H. O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" M5 N' Y4 R) h; q7 q
  410.           c++;' ~' X" }! ~7 O2 n/ o" B& `* S
  411.         }
    ( a' q+ [3 U6 H# x- B. d5 ?
  412.       }
    " E( n7 O# C( P% d, l% D
  413.       else% Y$ G& ?/ c$ o! h) X
  414.       {
    0 m; P. v& |& d/ B, c0 r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! x1 A9 G+ n& A' p$ c2 D
  416.         c++;
    # a/ f1 \# F; s. [7 C
  417.       }
    + a) F; M3 i9 p
  418.     }
    * v! N* C% y" \8 y# a
  419.   }, b: {5 [) J4 i9 u1 s
  420.   unlink(".\\DownLoad\\update.txt");" J7 `% c: M: O2 j1 F0 y9 b
  421.   if(UpdateLocal.size()) return TRUE;
    : Z1 p; B8 `+ i
  422.   else                   return FALSE;: D" j. }6 r2 u* h2 K8 Q8 T* @
  423. }
    . E# C: I) |/ ^* I; k, t

  424. $ u, c0 X7 |- g% Q7 g' D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 e; C$ O  o% j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' b- _5 G( G$ X

  427.   ]2 J  T; J! j' u6 @" B' Q' c) f6 C
  428. 5 q# Y$ I: F4 U- h
  429. 4 b& q( Y, r) T2 H! o: P8 G
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : }5 ~: J7 C1 ]. L7 w- x  T$ I
  431. {& o- D9 C6 j  J6 o6 n+ C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 [1 c/ V3 E' O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 X8 A% u7 Q3 y5 {* k
  434.   {
    # m# _* Y+ t4 d" [5 B2 s
  435.     char szLanguage[50];8 F0 a1 h9 n1 z$ }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ O, t+ S8 x2 @( N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& p1 I8 E) E0 Y" h" i" u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      N; f9 s5 d" B  i& a5 f
  439.     else                                   m_iLanguage=ENGLISH;
    7 w' |  G' \3 {) N  v8 q1 j
  440.     char szRegister[100];* ?4 w3 u, S% i9 N; K1 J8 ^6 B
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ S  h  r  w4 b
  442.     strRegsName=szRegister;$ a, d! D5 w! Q& n1 K
  443.     char szPatchURL[100];# i' i( N( a& `$ Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 m8 _  R0 _7 }# b% e# y( Y, z% I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 W" d1 i' V, ]' h
  446.   }
    - P! S) j, V% Q$ u3 g# s# u) {
  447.   else" V' }8 S$ L+ u- z
  448.   {
    2 P- P2 w  `8 x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 c- K( L2 u- K9 l
  450.     strRegsName=DEFAULT_REG_URL;& y5 m& A6 v! J
  451.   }
    - D1 D; r! Y% B
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    # }8 W/ P7 t* C
  453.   {% t& L6 q$ ?3 b$ e* b# D
  454.     char szIP[50];
    , `$ @* d. z% ]+ z, K9 f2 B
  455.     char szDIR[300];3 a7 E) d. g- ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 J+ ?6 B. v; `! c
  457.     {8 q7 K, D$ j6 ]7 U% e; H: a  p
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) B2 ]( S9 r4 \" j  D$ a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# i# ?  O0 y" ^
  460.       strHostName=szIP;
    8 r  n' N& D6 [/ C% ^3 I
  461.       strHostPath.Format("/%s",szDIR);! ^. n" ~) L  d. s
  462.     }
    ' c9 s) t# h7 ^# ]0 t  n
  463.     else8 b! t; [7 f0 c, n; B
  464.     {$ W+ [. E5 i2 h2 d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 i( G7 I8 I) L% S* B
  466.       {
    7 L) _/ U4 s9 X% g  y! t' F7 ~
  467.         char szLanguage[50];9 U% P* M' R1 Y0 u6 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 q* Q" e8 V! q/ \
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " L6 h7 j! N# |; _$ T+ U' d, o
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 g% `& U2 j' x( y- s
  471.         else                                   m_iLanguage=ENGLISH;
    9 D* N+ J# ~8 q3 ^0 |
  472.         char szRegister[100];
    7 A! }- f; |6 ^2 o% p
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! z* j1 L) N0 h. Q
  474.         strRegsName=szRegister;
    . u  |( \% j; e7 F. }6 P
  475.         char szPatchURL[100];- i) d% }& x8 k" n+ W- H! U, f* u: h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * V: v+ {  I, ~" i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 I; U4 c. ^0 N' n& s5 y
  478.       }; i  N: E) x7 |9 [; P7 w. x. q
  479.       else
    0 U1 w5 x$ U2 x; Z+ Q9 {" m
  480.       {! s1 g  P2 J2 J2 I) U4 B. q+ a7 F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; j/ E) w7 Q) x4 ]
  482.         strRegsName=DEFAULT_REG_URL;: n7 \) O% w4 D( i8 a& N3 v
  483.       }3 n2 F- Q: L, p8 D8 c& e& W
  484.     }6 r+ D# P) k$ b/ }
  485.   }' b9 M) i/ S3 J5 Y9 R$ I5 B
  486.   return true;0 J) r, U1 O: Z
  487. }
    , m/ x# i* c- ?4 H  u6 d

  488. ' m6 l, a: R; o- r( v* W* [* l8 ~# t
  489. #include ".\ZLib\unzip.h"4 g7 [6 b, M  l: s! ?/ f
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# Y2 c: V1 ]6 N2 u
  491. /////////////////////////////////////////////////////////////////////////////, i+ l& _% D: M
  492. // CRevAppApp initialization3 V: P2 Q, h* Z

  493. % O4 Y' V' [5 J2 \$ m* Q
  494. BOOL CRevAppApp::InitInstance()
      j7 }* E6 o- @5 t- `) T6 J! ], n
  495. {# H, f. Y" L/ u- F. S: S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 {) n) r6 o! ^1 f( {, C5 @
  497. $ A' S. H: y# T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ! v9 j* R6 {. y0 D) E& M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( o+ V  k5 x  N$ _0 v
  500.   {
    6 A. T+ O3 Q2 s3 Y" Y% i% h4 c
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 F/ N& h; ]' L$ [$ |8 k2 _  @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; r  `0 _' u7 ~0 O, Z- ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 K' [. u+ [* U2 h  W
  504.     {
    2 A2 Q9 s; H9 S% n/ o7 _
  505.       strcpy(szPath,szPathTarget);
    " e# e9 M+ c/ c! m. z3 `
  506.       SetCurrentDirectory(szPath);* H3 N; v8 n1 e
  507.     }
    1 t( N5 i8 \) Q  z- W  b
  508.   }& P, p! i/ ?! W
  509. #ifdef _DEBUG
    3 f/ X# i8 @# ]4 n, u% j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - ^/ v& y  i0 Q. ~' I6 K7 ^% C6 c
  511. #else# ]: S0 v! J0 b" s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 J1 Q. A6 Q! Q$ F/ p. ?
  513. #endif
    . X) i% K0 c* }; t
  514.   {
    ( W* [/ ?4 E% x1 F# i! |2 Q
  515.     char tempFileName[MAX_PATH];2 \; I! A% N0 A. z( ]9 G7 n
  516.     strcpy(tempFileName,szPathSource);3 z9 C: Z, A8 X# B* C9 u0 _
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' Q; K2 j$ r& i; ^* |0 g! L4 d8 r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 |& E; v5 G3 {* L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / m+ w* k/ f; Z  \7 O* X: \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ _5 U' i* k$ f9 h
  521.     return TRUE;
    - g7 w4 Z% g% `, j
  522.   }# S# p* b' ~" N, t
  523.   // Nuke 0118: Delete run.exe
    # p7 _! D! Z5 u  u0 Y$ z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  u+ g; h$ b+ [5 G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' [8 a+ i. {! `! T% u$ @
  526.   if(!ReadCfgFile("Config.ini"))5 G& X( M( G1 @7 y9 j* S2 _
  527.   {% t2 J# p9 v/ q7 i; Y( Z5 b
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - C% ?& s' l4 Y
  529.     return TRUE;/ ^! L% I9 |, h' H: W
  530.   }* G8 a8 S/ ]* |2 D0 r6 g
  531.   HANDLE mutex;
    3 x& I. Y) u! U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 d5 r' e1 N+ \4 o( y( o& ^
  533.   {' _4 D5 O9 A# i- m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ {) Q( G$ F7 h& a* q3 o
  535.     {+ D4 Z( H, w8 d
  536.       CloseHandle(mutex);5 w# f2 y6 P) i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ y# j0 ~( B5 B! `  C9 L( V& Z
  538.       return TRUE;
    ' [  f: z+ [3 L( t" _" Q* Z0 n# Q
  539.     }4 R* i1 |# F5 I
  540.   }  
    0 L0 s$ E( x% A" q, A* {
  541.   CloseHandle(mutex);
    5 U# }. r. H  M" ?7 _6 X$ Q
  542. : h2 l) i! k2 x' H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , v8 y' o2 L6 j, G/ B
  544. ( j9 `' c5 _7 y0 U4 `: z
  545.         AfxEnableControlContainer();8 `( ]: p) o7 t! ~, @

  546. $ O4 F. m6 c2 J# {
  547.   bCanUpdate=FALSE;
    4 Z5 m# r$ V( @& b
  548.   dwStartUpSteps=1;! w7 I5 a3 h7 Y3 W
  549.   dwProgramState=AP_NOTHING;
    3 A% _; H; V  O5 F

  550. % e# B+ P, @% ?% s! D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" p. D2 i! B  C! h+ H4 A

  552. - z& A0 |+ z7 z
  553.         // Standard initialization" T+ a( U% F& h
  554.         // If you are not using these features and wish to reduce the size' z" _1 a3 ^) `9 ~1 ?1 S
  555.         //  of your final executable, you should remove from the following
    6 [; y# O1 l8 R, d# K4 S
  556.         //  the specific initialization routines you do not need., s2 L6 {& y+ k

  557. * P) y! b- D4 _7 I2 v9 O) Y
  558. #ifdef _AFXDLL
    & G+ E2 `5 ?) m
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 ~8 C8 o4 U" g
  560. #else
    4 ~/ R1 @& I  A% W  ^" `+ u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    / k# n" E" D7 t$ p' P0 t6 v, b9 M
  562. #endif
    6 ^0 K- z* ^0 R

  563. ! ~5 `8 `2 e' z$ \2 w' E  m4 L
  564.   dlg=new CRevAppDlg;' N1 ]; u+ {8 W6 F
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 z$ c6 u# g. q+ h9 e7 x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' a; J# S4 m" I; `2 O+ p1 \1 ^6 e: F; P
  567.   m_pMainWnd=dlg;9 F* p  _: H$ _' H& Y! A0 A" y
  568. 5 x/ A, l$ a% l# p8 S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! c- N6 b) P1 ]$ J5 w
  570. ) l3 n8 t9 R' c9 ~3 H8 u
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - _7 i9 t, J7 G2 ^. p
  572. //  ULONG_PTR gdiplusToken;8 e% C" f% K5 o3 z* W. N4 G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' x* u5 P2 W$ f! [) \+ P8 {

  574.   `* q* E& S1 [
  575. //        CRevAppDlg dlg;
    4 R( K& a" i- T$ n! g# k0 z
  576. //        int nResponse = dlg.DoModal();
    9 o! I& J6 N( K: e& P+ ~
  577. //        if (nResponse == IDOK)! I& g  O" _; ?( ?2 B
  578. //        {
    2 @, P; j* |2 b% {8 p$ x# W
  579. //                // TODO: Place code here to handle when the dialog is
    - p" q" N/ |9 W' e2 U4 W
  580. //                //  dismissed with OK
    + Z5 s7 |# B, {/ D' j
  581. //        }
    + q* J2 C( v$ ~( A$ [; {
  582. //        else if (nResponse == IDCANCEL)
    3 P1 Y% ?& s5 B& ]; a8 C& \$ i
  583. //        {: a" J( T- s/ B+ V" N' e0 b1 B
  584. //                // TODO: Place code here to handle when the dialog is+ {7 `- P0 R7 b$ J/ ^" Q' {
  585. //                //  dismissed with Cancel6 M, G6 H# X9 f
  586. //        }' M: e$ j' [7 I( r1 R' f

  587. 1 N- N' U& h6 T. c) d
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 M9 I/ o8 B1 s  c" D0 I
  589.         //  application, rather than start the application's message pump.
    : j9 b+ p# k' C: X1 e
  590.         return TRUE;9 H3 ~. R) {9 z0 r0 K0 J* L
  591. }$ a% O- ]: z. F% V% A1 t' S

  592. & z2 g) x7 N3 b5 S2 ?6 O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' K- z6 @' q# F: B
  594. {
    0 Q" w9 A6 f1 S! @# F
  595.   int i;# d" J& p# o% ^4 b
  596.   char *szRet;
    ( y) W7 M0 s+ p/ I" O8 q

  597.   C- w- ~( L) m- q3 j( q9 f8 B; ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 x, m( _+ J- g
  599.   if(sztoken)+ A# E  N) p  ^8 h& i
  600.   {
    5 |6 `0 U! o# D& t. f
  601.     szRet=&sztoken[itoken];2 D( l: A+ H/ {4 |3 X' V
  602.     while(sztoken[itoken])
    ) N/ L) A/ m5 G' W) S5 [4 V
  603.     {
    " k: e+ ^( d# B
  604.       for(i=0;i<(int)strlen(token);i++)
    & `1 T; C4 \. `( E1 ~9 J/ m6 L
  605.       {
    ' ]5 l! ]2 B; e* H* C' v4 w% w0 r
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), i4 p6 F# a5 d
  607.         {, T( q' G$ o) N, _2 x
  608.           sztoken[itoken++]=0;
    4 J/ c5 x8 W% q# n
  609.           sztoken[itoken++]=0;
    & e( n) D. J" G! S& C7 d
  610.           return szRet;
    1 e  t# g& W- J& v' \/ Z, _
  611.         }
    & F2 p% v! {. N; Q7 d4 q1 O
  612.       }
    2 T' a* C# L( u( b; R
  613.       itoken++;
    2 l, J! B4 B  x- o5 F6 g
  614.     }4 P7 l+ _  Q3 v- C
  615.   }
    ! D8 N- p# L$ @. o
  616.   return NULL;9 C' S6 x3 u8 h+ ^* X! B
  617. }
    ; Y/ k  X9 x2 X  e: h/ E: `& x
  618. ! J6 E1 M. }; m8 W1 K
  619. void ProcessProc(long Total,long Current)! X9 A( Q% ~4 R$ n2 e# x! S
  620. {
    7 `! v4 _+ K; X2 O- d" S$ z
  621.         MSG msg;6 g6 B7 c5 Q) e$ N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' C* h% [! ^3 _, @4 j9 [: O/ Q3 h. V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 d7 X% f' J3 s. M; {6 S  c9 s9 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      U" |+ ]* m( a& \
  625.         {
    / c# L( J: G1 }1 `
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / o! `1 t) P8 t/ z: ]
  627.                 {! s: }/ ]( B4 V" s+ i* L' {
  628.                         return;
    4 m4 U! j; ^) q$ ^7 E$ u. d, V
  629.                 }) ~4 c" o: j' F, P3 Z' S4 y
  630.                 TranslateMessage(&msg);
    / C  ~* q% R# h( s9 x
  631.                 DispatchMessage(&msg);
    # B. s- V5 b, I' J  \
  632.         }        - \3 o& \, r9 P' V2 u/ T6 l
  633. }* A6 h* W3 p& d( B- a9 Z

  634. * k: g6 N: J' l/ q& d& r
  635. BOOL bFirstChar=TRUE;  Q! }, X" J) L$ l/ K. ]
  636. & h. y( s- n2 w2 P" k: |; X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # h  J3 l# m3 J5 i
  638. {
    2 O, @5 E% k* j) }8 o( ]. D6 Y
  639.         // TODO: Add your specialized code here and/or call the base class$ u, b+ R) {! s: Q( j1 @1 d
  640.   switch(dwProgramState)9 ~" y' N4 w) m# n
  641.   {
    1 Y1 E, r1 l' T. g, `% t' c
  642.   case AP_NOTHING:4 I* L! c& @( s$ ^! B( m9 x: p( o) s
  643.     switch(dwStartUpSteps)
    7 F$ z' X% Q; X: u: H$ b
  644.     {5 U# Y% u$ A& w; {; _5 D
  645.     case 1:
    ; L* x5 ]$ I7 {0 l. Q6 t% t
  646.       {/ K* ]2 `9 u% j. |+ ~
  647.         int i;
    * f. ^# s1 u# V
  648.         CDC *pCDC=dlg->GetDC();) W4 l6 g% G0 X( K2 i
  649.         HDC hdcwnd=pCDC->m_hDC;! O  L+ X" u. @1 |7 |( _3 Q6 b4 z
  650. //        Graphics graphics(hdcwnd);! K; M# b9 t: C( G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    % X, V! N$ }+ f
  652. //        INT iWidth=bitmap.GetWidth();; u1 E2 y' a3 ^$ m
  653. //        INT iHeight=bitmap.GetHeight();
    # N8 D2 h( {& X( o
  654. //        Color color,colorTemp;& c/ |& S# }1 O" t* b" M' C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% g- p! n6 \: v
  656. //        {9 h! H& s& S+ R% S7 U( Z) x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & D% U4 L( F3 z0 ^# g) x
  658. //          {7 U& U; U/ m- Y  ^0 {4 m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 M- D7 V5 M7 X/ t; T# J/ Q6 {3 Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 P/ F+ g1 O1 V' G; ^  W" Z1 q
  661. //              (BYTE)(255*iColumn/iWidth),: q% z" z" H: @# \0 ]+ [) I5 a1 \: ^9 `
  662. //              color.GetRed(),. T$ W2 }- o' x4 \" ?
  663. //              color.GetGreen(),9 t% S2 L0 O. p) P- Y2 ?
  664. //              color.GetBlue()));
    ; [4 _& ^+ ^# @: J& ?  ]" i
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 u9 b, K" @* q: H% J0 J0 K
  666. //          }
      z$ R0 |9 y( J2 }/ H- q
  667. //        }( P" E! T% ^. O7 Q- N% h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! D  S* x- R6 F: s# ~; P" `: ~7 a5 O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + ^+ {+ H( U2 G* s" t' Z( O
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, X5 z! z! q8 c/ t$ n
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 i0 X( I& R4 s1 ]/ E
  672.         for(i=0;i<240;i+=8)! j9 c1 U  E, N! p" g  L* B/ j  E0 `
  673.         {
    - ~; M  h& H, b- J* K. G- r# P4 r) y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 i+ q: [2 l3 W, N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : j7 S; H3 f, G5 M5 W$ }4 r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : M7 e: U; z" l0 _' ^3 y
  677.           Sleep(33);' ^1 b8 w5 `. c+ \) j
  678.         }: h1 O8 }5 e9 t2 p9 l0 x
  679.         Sleep(1000);" P; t, b/ Y- f5 F
  680.         for(i=240;i>0;i-=8)
    8 F+ l, G, {9 @+ `. g
  681.         {
    7 T1 ?" |: S% }- }4 n* Y  _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # @% U8 c; F; M! R+ f. L, [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' I# X  o1 R- [  H# C  K6 A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& g- L1 I, ?9 U5 W; S# G" C- A+ M
  685.           Sleep(33);$ L& S. d3 D' X3 V
  686.         }# {6 c& Y1 _" ^; U! A# h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);' @4 s+ g- m) R0 A
  688.         dlg->ReleaseDC(pCDC);( ~3 F% m# B' L
  689.         DeleteDC(hdctar);5 ]& g) `( _" A1 L. o
  690.         DeleteDC(hdcsrc);
    # i; p1 T+ ^; M" z9 M
  691.         DeleteDC(hdcorg);$ ^. @$ n+ T7 I4 f0 I
  692.       }" r8 f7 |+ q/ ]# m! B6 q+ ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    # t1 C4 A% P7 d% c
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ) N* s/ j8 x0 E* ~$ V+ P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* V* {7 t0 G- \5 P; y! ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");4 E: K  w8 F) {1 S: o5 p# ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * [1 Z7 G9 m' b& B# p; c* h
  698.       if(!Dn.Connected())/ ~5 a+ [9 K# z$ I
  699.       {3 u  R/ e. ]3 g# F# Q
  700.         dwTotalFiles=1;
    . D9 b& d3 e; c: m' r5 w5 a5 R- w
  701.         dwDownLoaded=0;4 k1 n+ v/ S% C; S! g# S
  702.         bSilentStep=TRUE;: \/ q' ]' ?  i+ }4 Q6 M: S
  703.         bCompressed=FALSE;
    1 |& K: _* \' ~9 s) B
  704.         strExtLocal.Empty();: s3 |! J& J- N& ^/ R$ h7 h
  705.         strFullName="readme.txt";: [8 N# Y2 m% w) j9 L( L
  706.         dwProgramState=AP_CONNECT;, U! g" b. `3 q3 e6 ]4 F: A1 T
  707.       }
    ! u1 ]% {' C1 y+ [8 i/ V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 o5 J" W0 \" c* J( Z7 l2 |
  709.       dwStartUpSteps=2;9 W9 Y6 M( N7 o
  710.       break;
    % Z" @+ y, @/ {# ^
  711.     case 2:1 w0 j( b% X  ^; ?
  712.       {
    , l- A% b. I5 o- Q
  713.         int iEOF;
    , P. x, {! T6 [$ ?6 O5 r, Z1 f
  714.         FILE *fp;9 H% c9 |" A1 e& k; ^
  715.         char szString[512];# r9 m& l$ m# y3 K# p' L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: M$ R: y9 c% e4 f, x
  717.         if(fp)
    6 \& y+ G  Y7 i% B; ^
  718.         {; l- [1 O. x  V+ P8 e( p
  719.           do- E2 J! d& V* x9 P, s
  720.           {+ ?( L" R8 K- R# E+ ?- y- G, T- G
  721.             iEOF=fscanf(fp,"%s",szString);! Z, t6 C1 Q! a
  722.             if(strlen(szString))
    + b& G! x3 H" [* h9 d
  723.             {* R5 A: Z- _7 H6 U0 L' E! E
  724.               if(bFirstChar)
    6 N4 j" }0 [0 ?, v
  725.               {% Q% B; ~5 Z' F2 G
  726.                 bFirstChar=FALSE;; r8 Y3 o* x, L+ K' `
  727.                 bConnectIsBig5=FALSE;
    " H1 O' M5 Y6 [/ E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; |# p% d  G2 A% n% N. w
  729.               }
    6 l! b) p1 P0 Z9 l8 g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 |9 j' o" O8 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 k5 p/ l7 ?* b
  732.               dlg->m_ListText.AddString(szString);. j: m0 x3 B5 `0 B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! L# Y, N4 l9 N
  734.               *szString=0;. L3 G, I( G* r8 n' a; m$ A
  735.             }% o- M$ c, s7 E2 ]6 Z9 |6 o) }
  736.           } while(iEOF!=EOF);
    , V, Q; q  N9 ?" X2 m" {6 P- z) o! q
  737.           fclose(fp);
    0 N8 V2 b  h3 T6 u  Z+ C
  738.           unlink(".\\DownLoad\\readme.txt");6 U- R+ z, I. {8 s
  739.           dwStartUpSteps=3;- {. I) h1 w! c2 N  ?: Q" I
  740.         }$ G2 T  ]1 j3 J6 W% Z# \2 W
  741.       }. A: Q; |$ p! \
  742.       break;; N) G& l2 Y/ c  c8 B# Y$ B
  743.     case 3:
    " M; g0 d! }" L! T
  744.       if(!Dn.Connected())) A( C' k. q+ F% W
  745.       {# @# l6 ?) ?0 z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      r& U: G( T0 y
  747.         dwTotalFiles=1;
    7 u2 A' I8 E' t; s
  748.         dwDownLoaded=0;
    8 W# ]( F3 X7 p
  749.         bSilentStep=TRUE;
    5 W: T' ^  ?* W& t
  750.         bCompressed=FALSE;
    - d. Z1 ?8 }. B% z7 U$ |
  751.         strExtLocal.Empty();; w& K9 ?# |/ n+ |+ ]
  752.         strFullName="checkversion.txt";: E$ @. M& T4 z1 v& p
  753.         dwProgramState=AP_CONNECT;
    / C6 ~! J7 E- X0 E' S3 N
  754.       }
    * L3 I: Q) K3 s1 L, K$ V3 W
  755.       dwStartUpSteps=4;
    7 a8 G$ a) q/ {% [9 ]( V' B
  756.       break;( R+ ~, e' k- w/ f# y
  757.     case 4:+ P  A, N: S( A% e
  758.       {5 z2 |" t- d. \) j7 c: q9 a
  759.         FILE *fp;0 e1 e% I0 N1 K- r& d5 i
  760.         char szString1[128];
    6 u+ ~7 A7 l9 A' B
  761.         char szString2[128];9 l, q9 u4 P  r% V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 G, Z0 q' p9 d0 z, M4 @! T
  763.         if(fp); F; }# \/ n: c
  764.         {
    * g! X( y' z: `( {, q
  765.           fscanf(fp,"%s",szString1);8 p9 G  ]0 A! R& V3 i" y* S  w
  766.           fclose(fp);/ ~$ L3 a1 \5 M" ^
  767.           fCheckVersion=atof(szString1);
    3 Z) e& s6 R4 C1 s$ X: a# G
  768.           fp=fopen(".\\checkversion.dat","r");! ?7 {$ C8 ~2 c  o2 g7 B
  769.           if(fp)
    1 X7 E- F3 Z6 h* ?$ d9 }- b6 |
  770.           {
    & E8 ]9 s% i3 H3 b  Z+ ~
  771.             fscanf(fp,"%s",szString2);& s+ s# z% B9 N. P4 @, @
  772.             fclose(fp);
    5 Q: x4 U: j+ M, e0 h) h
  773.             if(atof(szString1)!=atof(szString2))6 c+ \$ J, `( {& ~; J/ H
  774.             {& e& e; E1 `. y2 P1 |0 R- C' v! N
  775.               if(!Dn.Connected())
    2 q' X( ]% Y9 @- d, I# @, T/ I
  776.               {' v0 ^1 j- n) Z+ n
  777.                 bFirstUpdate=TRUE;+ Q' ~. O4 T. ~2 j& Y; ]
  778.                 dwTotalFiles=1;, @0 p1 Q" l; P! u* x! C
  779.                 dwDownLoaded=0;% r9 c# W' m& d1 {# K
  780.                 bSilentStep=FALSE;
    5 W- \7 s6 a5 D! m
  781.                 bCompressed=TRUE;6 l7 m5 q) b1 c2 ?. G
  782.                 strExtLocal=".\\DownLoad\";$ v8 q4 G  p0 B3 M
  783.                 strFullName="update.txt";
    9 w# _$ Z0 X! Z) w. S
  784.                 dwProgramState=AP_CONNECT;
    4 W4 N' ]6 q& u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % e( u6 U6 g# Y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % y8 K: j# \. D% t& n' M$ a! s8 b6 a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# Q3 C2 Q, L. H/ U/ x8 x3 Z
  788. 2 }# _/ h( l* m  o+ L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ n1 {1 w6 e4 s9 |$ q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    8 Y% s& s# r- I0 f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 C& j& K, B) b- Q9 J' i( w
  792.                 {/ P6 x) b9 L- {) N3 w
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ W' D  d; Z1 ^+ J1 Q3 d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! `+ @9 s- p9 U8 I1 t
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# {8 U3 L- M; t9 o) i& V8 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , J) y: p9 H  x" b
  797. 3 B" n4 K/ [7 N5 I4 ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 u( ~- P9 h. A4 N; e" p8 s' g$ D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * T" L* k8 y$ g1 @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . l& p5 l: ]/ T, b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 u0 X0 {2 x- u% |  e6 K
  802.                 }( J$ v, w, w- t/ R1 c+ E( P
  803.                 dwStartUpSteps=5;
    : v3 Y% J0 e) b8 P. {+ L  }. ~
  804.               }! I) L3 d* l; ]3 Y. L0 x( t
  805.             }
    # y4 C, ?" V7 b$ V
  806.             else: i1 F; C' V) t) c8 {! V
  807.             {; e. \0 Z0 k. J1 [: t
  808.               unlink(".\\DownLoad\\checkversion.txt");, F, y/ Z. v; ^4 M9 m: S
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , V8 ?7 f7 O4 M" T9 L9 u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . S5 H; p! P; o% p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , r2 i3 c% N5 F6 G
  812. . K& K3 K9 Z5 |: }; y* H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" _5 W! c/ R! \& {6 @7 d2 Z; X0 @
  814.               dwStartUpSteps=99;9 k" z0 Y3 ^! W4 ^: v" _
  815.               bFinishUpdated=TRUE;
    , a6 o# m3 W) U5 o. e0 m: _  w
  816.               bCanUpdate=TRUE;
    , ^8 F8 X+ M6 p/ G# g' l
  817.             }
    ( F# h1 D* b# v, n/ p
  818.           }1 ?5 V7 ~- j' Q; `( `
  819.           else- n/ \  Q5 Y7 q+ k3 d. ^
  820.           {
    6 f6 x# h5 D, \4 W( M
  821.             if(!Dn.Connected())0 V. y; l; T7 [! p" y2 Q
  822.             {" x- J, I! F5 O% m5 H
  823.               bFirstUpdate=TRUE;" o; w9 C: M  {
  824.               dwTotalFiles=1;
    . O; `4 B) o! L! b! J! ]  K0 r( s
  825.               dwDownLoaded=0;
    % W" T; W8 G, R' A
  826.               bSilentStep=FALSE;: X8 [, }7 w9 F( l! E4 x6 s6 S; [" b
  827.               bCompressed=TRUE;
      P2 Y; H! E3 ~2 N& Q" y, C) P& P
  828.               strExtLocal=".\\DownLoad\";
      Q7 f" Z# n6 f! {  G7 c  x
  829.               strFullName="update.txt";% }  i0 L1 F/ B) U: L$ j
  830.               dwProgramState=AP_CONNECT;
    : _4 m) |: d$ V: e+ ]) z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 ]1 P. y0 `+ H0 q8 x& ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& f$ t% E0 r' D& K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * K9 u( f1 }& x
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ~( o4 `- b" Y2 [; m  c
  835.               unlink(".\\DownLoad\\checkversion.txt");$ q) u# r$ w$ m' `$ m& U3 e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 \, v8 f3 l* P  E4 A; e$ h
  837.               {& J7 R& P$ J! ?6 N. e  D* Q8 r" R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ y1 Z9 P% ], f0 X" l% @% D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" w6 W3 P" _# O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ Y# I! ~; j& y3 o5 T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * S6 k* A" Z6 T/ a
  842.                
    5 ~2 W, T7 Z; U7 G9 i9 t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  n, J8 d0 I, S5 F9 z. P$ O3 h5 j0 k% ^
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 {, ?: e8 R7 |8 E9 m( J7 m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");6 `& i0 X4 y( `6 F7 M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; k% Q6 K2 c1 Z6 @3 v8 F% j! M
  847.               }
    ; Y( e8 V: H' j
  848.               dwStartUpSteps=5;
    ' N" k! b, ]+ f
  849.             }  o: s4 d# f. ]" S
  850.           }
    ( F7 k& t3 `6 K0 S1 ~1 M# A4 L; u
  851.         }
    . C5 r4 r1 C9 f5 \$ Y* ?  o- B3 {: ]
  852.         else6 L: k1 `% Y8 p
  853.         {
    & g+ L+ {9 L% s, F
  854.           dwStartUpSteps=3;
    + P2 W. q+ c- ]4 W
  855.         }
    & T3 G& Q0 ]  j1 A
  856.       }
    - b6 s- i: b" [1 U; Y) r
  857.       break;
    0 y. N, U7 j/ F* v. J7 _. F
  858.     case 5:6 L# X3 t4 k& J1 [0 U" N% g
  859.       {0 Q6 T( R; U: V* S7 ^  W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). Q4 H' Z# y2 W
  861.         {1 q+ X: R! E% T. L" [9 ]
  862.           int opt_overwrite=1;
    2 i, x0 o' }7 f% V% O/ H
  863.           int opt_do_extract_withoutpath=0;
    6 j+ G) ^1 m4 A& h* S) c
  864.           unzFile uf=NULL;
    3 \$ T) q, X! ]# ?* @5 J/ ^
  865. - m  M" h1 A4 {, H$ Z
  866.           uf=unzOpen("Wsa.zip");6 C3 o' p" T) T
  867.           if(uf)4 s2 z6 i3 }1 j% K9 y
  868.           {1 P- ]- h1 P8 ]5 i
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 B, |: i& Z# [4 |
  870.             unzClose(uf);3 k; r# b$ R: H4 i! D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    % D" e3 Y7 V$ Y; {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");" M. S1 A3 t3 U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 {" N4 }6 G7 {  c& h) j) d/ R
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 G, P- c! M3 U8 {& q
  875.           }2 j% L# S" L- `; b8 R2 E$ H
  876.           DeleteFile("Wsa.zip" );
    : W- G4 z4 T9 }) o; `7 k
  877.         }5 w, k* T1 w. z4 |
  878. ) o( u, {4 D2 ^& ^  q: {
  879.         if(CheckLocalVersion())7 ?( a, I  }9 n. a
  880.         {+ L' _, y4 O; M! i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ' w: L/ u+ I' p" r; Q" e: d  I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    & l3 p" A# @. @1 |& ?
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    $ }( O! B8 T+ o8 X* L3 F9 T
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 C+ M/ y: C$ a2 B& Z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    : [5 v+ ^/ v: Y5 n" F; {
  886.           dwStartUpSteps=99;, @5 L# x# j4 X. ~% L& P0 N" F
  887.         }1 K$ S/ F. B6 g: T
  888.         else
    " h) G  S& y  h  [, b8 u' o
  889.         {
    . D2 U$ U( F; `' S% ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* F% F! m) p: u' F+ j. W
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 p/ r- |9 `" a" u5 |* R! q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 m" ^. u6 U/ Y  F

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

1 `, [6 n2 Y- a( o4 R: \9 J

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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