CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
* q9 Y2 }% w  G1 I% Q
  1. / RevApp.cpp : Defines the class behaviors for the application.% Q0 b2 L, A2 }
  2. //7 t4 W& {8 q1 F+ T- |1 w( |$ T

  3. $ d3 i# v, z& d$ e9 s+ ]* y
  4. #include "stdafx.h") a/ s  O# a0 z
  5. 0 D0 {" x/ h* s5 R
  6. //#define UNICODE8 ]; [5 b- k" o
  7. //#include <gdiplus.h>5 n. n5 O+ Z( \3 a1 c2 Q& B0 `
  8. //using namespace Gdiplus;6 G8 G6 h" r" O# F( h; c( y5 P

  9.   U" M: ]# T" U2 ?+ u# _  B
  10. #include "RevApp.h"
    5 o+ l7 P2 Q" a5 C9 P) u8 k9 M9 N
  11. #include "RevAppDlg.h"5 @' ^9 u% R* n, D6 u* c# o

  12. 1 H' }5 i9 I2 Y0 {
  13. #pragma warning(disable:4786)
    8 ]/ v9 K8 T! s* H
  14. #include <map>
    & e, j. d0 B+ \! Q4 ?' K
  15. #include <list>
    $ H; `+ P, |" ?; E' W" L
  16. #include <direct.h>4 {" R! Z/ [  k# }0 X2 P! V1 q

  17. 2 j7 B2 ?" M" T6 u" k: z- W
  18. #ifdef _DEBUG5 T& q2 a# N/ p: n1 K% B1 v
  19. #define new DEBUG_NEW
      C( w' ^5 i& h# Y* a5 j1 L
  20. #undef THIS_FILE: i( X6 L# Y- Y4 \6 X: \# e
  21. static char THIS_FILE[] = __FILE__;8 ~: K" P9 Z3 S' w
  22. #endif5 T, ~/ S' a5 i9 S& q, d2 E
  23. #include "SkinResDef.h"4 o0 b/ c+ P1 b5 B) _
  24. #include "ChangeBG.h"0 K) ~, L" G: c
  25. #include "AFXINET.H"! ]1 `! p' g: ]6 M  H
  26. # F9 e9 N7 w7 p+ @/ e1 C( C$ d
  27. #define TRADITIONAL_CHINESE 0- u0 W" x# f$ l4 \, T, c
  28. #define SIMPLIFY_CHINESE 1  j% V0 j1 `& \: ^, L! v4 L6 E" B- V7 O
  29. #define ENGLISH 2* D9 F+ [3 }" {% J/ M# U. `
  30. int m_iLanguage = ENGLISH;
    % F6 I* T* @# E. b
  31. /////////////////////////////////////////////////////////////////////////////7 f! {/ ?# ~3 {6 {1 R( {
  32. // CRevAppApp( ~, v* s( t9 v- v1 @9 f

  33. 7 _7 Q6 G9 D- Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 q2 R( P3 M3 e  _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / z; o. y* e# u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 _( [, `' R) c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : l6 z2 H7 [! x" ]  d3 }
  38.         //}}AFX_MSG1 a! r% o- K) g3 o5 n9 p( F1 P# A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 i5 ]) s+ [: {$ K7 P
  40. END_MESSAGE_MAP()
    ( F+ U/ m" j) g- @- p

  41. 0 Z2 X+ S. R0 F) ^+ s1 k1 G
  42. /////////////////////////////////////////////////////////////////////////////( m$ G6 H; ?: }* z/ c+ F$ J( B2 {
  43. // CRevAppApp construction
    : v9 n8 d* A# _
  44. 9 w+ K+ |0 p* Z
  45. CRevAppApp::CRevAppApp()9 N9 G! `4 e' X
  46. {
    8 D4 n5 c! S# N4 S
  47.         // TODO: add construction code here,
    3 @% g5 l6 y7 X/ P6 k6 I
  48.         // Place all significant initialization in InitInstance
    : M8 D9 E: z! O6 m; N0 s
  49.   bDisplayIsBig5=FALSE;9 A3 `; f9 n" m' w6 G. U
  50.   bRestartUpdater=FALSE;$ j; }* m2 X3 C  C8 I& P
  51.   bFinishUpdated=FALSE;
    % q* o: a% A8 J  \4 o* Q5 u* C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 \+ J8 S3 y: g; R7 E! b2 l: [
  53.   InitChangeDataBig52GBKS();
    6 ~: d5 N3 E+ w, B6 K
  54.   InitChangeDataGBKS2Big5();
    9 u7 N; V. b% h; V8 `3 B* J5 ~6 V9 K
  55.         //
    ; V; i5 J( h1 s; d" A) X7 b
  56.         bClickRunExe = FALSE;6 j8 j' ~) W+ Z+ S) e1 m
  57.         //8 o" I6 k3 C0 j( {' \
  58. }% z/ @0 `8 k1 W, j
  59. ) A& B. s+ D* h' d' l
  60. CRevAppApp::~CRevAppApp()- K. Z+ i3 I3 v9 e7 }. X) `9 G
  61. {; {/ R; E8 R8 K: a$ ^
  62.         // TODO: add construction code here,- N0 N& M' M* S( @
  63.         // Place all significant initialization in InitInstance
    6 j1 d) p) t; J5 u: k9 D  [
  64.   EndChangeData();
    2 }4 l% K6 m( }; Q8 [
  65. }. K+ L$ B' O5 b6 v; p

  66. - M: I" q3 f1 R5 n* t
  67. /////////////////////////////////////////////////////////////////////////////0 m) p$ Y. x/ R: _5 A& a
  68. // The one and only CRevAppApp object
    0 r# N1 s1 c( V
  69. , \% P- z9 ?; P
  70. CRevAppApp theApp;
    # a' j' a# ^, \, `1 ?& J# h

  71. ! m7 r. k! x: T" h# H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 X8 D( ^( D4 h# `" J
  73. {
    # U. K0 N8 @* g2 M2 k
  74.   int iEOF=0;  _) g/ v  @# X8 I' k
  75.   char szTempName[MAX_PATH];1 v, G) D  T; E
  76.   *szFileName=0;
    , T. m: B! |! X) R: Z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 w0 R/ M; p+ M7 n2 R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 @5 ~+ H2 B# N
  79.   {. i- X' V* j2 M! m# S0 E1 }5 n7 _% H" K
  80.     strcpy(szFileName,&szTempName[1]);
    . d) o0 u6 d" N3 ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% f$ i+ [* U  Y6 ?* V/ E3 h
  82.     {
    : \3 W* w- l" h% ]
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! g: L, ?! f/ Z; X
  84.       strcat(szFileName," ");' X! T: k3 G. V) n1 _7 Q
  85.       strcat(szFileName,szTempName);
    6 z& O# d# J# }* a, D$ v- x  U
  86.     }0 k. N& E$ p  J  Y/ J  w) Q7 Z
  87.     if(strlen(szFileName)>=1)
    ; C: P, W+ G' d& ~$ p8 n4 ^6 S: j6 g
  88.     {
    / l" [. d) w# {) J& y6 L* J
  89.       szFileName[strlen(szFileName)-1]=0;
    5 j/ F3 r9 R; P4 v2 i, Z
  90.     }! A1 S9 C3 ^' o% {
  91.   }
    . h# u/ ^3 |- `! T
  92.   return szFileName;
    1 {! C2 Y: @  Y6 R, l( F  f+ a
  93. }  O3 C5 U* v& L9 p4 B
  94. 6 m+ ?2 t5 q" T& }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / p% x$ E8 F; s" v# [$ }9 F! s  n
  96. {, K, V: e" }9 i) L& X  T9 D/ V3 f
  97.   FILE *fp;
    6 ^! X4 U$ u% X1 Z
  98.   char *key=NULL;
    . N. d/ @+ t! w3 m( l
  99.   char version[MAX_PATH];
    0 M% d' K2 @8 v9 Q6 O0 A
  100.   LPUPDATEFILE file,olds;
    9 C) c7 q0 j# R7 S7 t! {5 ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" N, X! g! X5 j

  102. ; w! E5 Q8 E7 Y9 t8 L
  103.   UpdateList.clear();
    * u# Q: B/ q. A" }9 B
  104.   UpdateFile.clear();0 x3 c9 K) D& a% F- e
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! l) m/ K3 j7 \0 b( t1 `/ c/ v
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - o7 m- w+ T1 [" j
  107.   fscanf(fp,"%s",version);
    & x3 S0 S) E/ n( [$ r# \4 ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" i6 ?- D- g. i# r( e
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ H- }  ~% Q! t/ `
  110.   {
    ( ]) h- ]( E; v4 d7 j
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  {' r1 p1 Z+ L
  112.     fscanf(fp,"%s",file->path);
    : x7 M  f' a5 j3 e; j( `/ W
  113.     ReadFileNames(fp,file->file);6 H3 t! T6 v& G7 E& X9 ~( X, e1 ]
  114.     strcpy(file->full,".");
    ! o# q4 B, b# K4 H$ T) C- U
  115.     strcat(file->full,file->path);
    , a5 a6 m$ B9 I/ E! ~' r
  116.     strcat(file->full,file->file);$ E  E2 s: U7 h; B* _0 y! I5 o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # l7 f% u$ i, p. ~( f. X
  118.     {
    ! {( f# Y) s2 e& l' Z
  119.       file->vers=(float)atof(version);
    : m9 c+ P* P. G) o5 n. v8 V; _1 t
  120.       UpdateList.push_back(file->full);7 ^  C/ O2 w6 `  V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 r8 _! N7 a+ G) ^4 t) l$ D
  122.     }5 H/ r, I1 |5 F# M, ]
  123.     else( g7 _, t7 X( p; l; C2 f
  124.     {4 x+ D  ^4 p0 K* V7 G  Y
  125.       olds=(*p).second;
    ) k3 e+ F5 i8 n& Y) l7 u
  126.       if(olds->vers<(float)atof(version))  ^. w- d' _4 ~5 e0 Q( w
  127.       {! f4 @4 y) }( V' L% s
  128.         olds->vers=(float)atof(version);  k: k( Z' w1 j* q) r
  129.       }
    / f% O7 b6 n  b0 r
  130.       free(file);
    5 v4 ^/ W* M- X* k5 ~' n* B9 F
  131.     }3 u: f: }9 z( b6 G, o; C) b9 _
  132.   }
    & s/ G/ k7 F; E8 A/ x
  133.   fclose(fp);2 C4 a5 b  L  m4 I, P& J9 H# m
  134.   return true;
    3 X6 J4 H  ^' z5 K9 w
  135. }) C( c$ O  B3 a, U. ]7 c
  136. " K5 \3 F2 G' X/ |! M* ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! U  N6 j6 d$ k- Z/ |# E
  138. {6 L# {( Z' S- g9 C
  139.   TCHAR  szFull[MAX_PATH];
    4 p5 V3 c0 a! Z+ t1 j( ~* K/ }  ]
  140.   TCHAR *token,*inter;: t3 Q+ a: q2 F( h( q+ I
  141.   *szPath=0;, L0 \1 d! V/ ?
  142.   strcpy(szFull,szFullPath);+ J, z4 z8 n5 D) g% p  G
  143.   token=strtok(szFull,"\\/");9 m; W/ J! n4 U3 q: d# h! s
  144.   inter=token;) N1 f: F3 T9 U" c, J
  145.   while(token=strtok(NULL,"\\/")), F9 p$ q" j, ~  v6 s( q$ o
  146.   {
    ! }7 }3 ?& f4 f, e
  147.     strcat(szPath,inter);: F+ D+ N& j/ `8 ~5 K
  148.     strcat(szPath,"\");
    + S0 f) l  s# @; t
  149.     inter=token;2 P( L6 D& ^$ L+ W& W
  150.   }
    2 J1 [1 T0 @+ q6 @
  151.   return strlen(szPath);
      y! T! S4 s4 C
  152. }" P. Q, e% T1 B
  153. 8 F+ S. G3 m0 M0 C3 n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' j0 Y0 t2 y6 H- f! L
  155. {7 @5 M/ a, U+ U7 ^( l4 E4 X) d
  156.   DWORD attrib=GetFileAttributes(Target);
      [& N1 b3 I( D) h8 V" ?
  157.   if(attrib!=-1)& m8 t7 ~, d5 @0 J3 M7 ]( _) j. _+ b
  158.   {8 p1 ]7 y, Q/ L' A  x  v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 S( V8 o2 T; [
  160.     {& D# ^& K% [! p2 b7 v2 k3 }- f6 t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 n3 {- E0 U3 x( f3 L/ |; v
  162.       SetFileAttributes(Target,attrib);- K3 _% r7 B" |5 L# g
  163.     }
    6 u: r- i8 B* X6 f' R% N
  164.   }
    % J3 K3 I3 ~% r, s
  165.   CopyFile(Source,Target,Erase);
    # }; ^. O+ q) Q7 L8 w3 P
  166. }
    , d) W" ~# K1 `5 Z% ]8 e8 v' P

  167. 5 H* d# x, z9 I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% e4 X/ H& l- N& m* v, X7 |4 x2 H" G
  169. {
    8 x# V' l/ L0 x3 o
  170.      FILE *fp;
    5 w6 O( p' J+ A( a" x
  171.      char  szBuffer[8192];! |* \8 a1 Q2 `
  172.   va_list  argptr;6 B6 i! _) v5 S7 \: w6 B# b
  173. 6 I6 i+ x1 N4 I1 ?. W
  174.         va_start(argptr,message);
      r4 a+ y1 ]4 c: |
  175.         vsprintf(szBuffer,message,argptr);+ e2 s3 G1 t' h+ V( m- v3 s
  176.         va_end(argptr);
    : d9 m3 R+ ]! Y
  177.   fp=fopen(FileName,"a");- R, ?$ b# m0 r* x% r% t5 _
  178.   if(fp)# F5 i: X5 ~+ L- a, z5 G6 \
  179.   {
    & T4 w, _" K- N. T9 Y
  180.     fprintf(fp,szBuffer);/ v& a' {, F! v2 `. a
  181.     fclose(fp);0 S$ |8 q; X: M8 l, e! J& s
  182.           _flushall();
    1 p# f! w7 p3 o( k- f" Z# m
  183.   }
    7 L; F$ q6 F; k# g* v
  184. }+ V% J/ Q$ d+ O4 k& h

  185. ! M, U! w+ R. l% d! e
  186. BOOL CRevAppApp::Fclearf(char *FileName)' q% [% A5 X; t' U
  187. {: H' @) B$ \2 q& P# B
  188.      FILE *fp;3 o. K  X5 b8 _
  189.     DWORD  attrib;+ ]/ ^4 z9 h& g. T& g/ U
  190.   attrib=GetFileAttributes(FileName);0 B( Q  g. c: N/ u( J. U6 P
  191.   if(attrib!=-1)* A: P) P1 s+ g3 L
  192.   {- t# X5 Z6 h' v6 V; E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . p6 _; ?2 ^& P/ p. \: G' b6 r/ ^
  194.     if(!SetFileAttributes(FileName,attrib))
    6 r; z0 A1 d$ A# s4 i% {; x
  195.     {8 J0 {' Q2 c. g$ I
  196.       return FALSE;
    4 D) C: I6 Y& b9 M3 `
  197.     }) K' U' V7 `1 F* q% \6 g( k
  198.   }5 m% a3 M+ U) {& W% Q' P; R. o6 G
  199.   fp=fopen(FileName,"wb");
    % r( X4 J; Z, W8 s8 F  E
  200.   if(fp)
    2 ?$ c. @) w2 M. d
  201.   {- T2 X- T) _" e' z& m( t
  202.     fclose(fp);
    2 T  G% p, ^- }7 S, @
  203.   }+ E8 ?4 f( z2 s% C6 H1 J, E
  204.   return TRUE;4 D5 p& W. `' C4 C% W
  205. }6 o# w5 r6 S5 Y4 N/ P7 V: L
  206. - V: R" ?: O( |6 T* ~" L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 |: o3 T3 ^2 p
  208. {
    ( O2 f( R# v" S+ T0 Y8 x* s# {
  209.   char filename[MAX_PATH];; s5 ~' O9 ~" e
  210.   LPUPDATEFILE file,olds;2 }6 t% S% H7 g
  211.   std::map<int,CString>::iterator i;+ i6 R. n0 |6 @; T: E0 @: w- m7 z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 v3 D6 N. ?3 d% k. u6 A: G5 Y
  213.   std::list<CString>::iterator l;8 z% _" L8 x: D8 q2 u+ L/ \' ?

  214. 5 R5 C5 _8 W, Z: t
  215.   if(bFirstUpdate)
    5 h% v* s  ?; O
  216.   {
    ' v% ]- r+ `7 H0 D( l9 o6 O
  217.     dwCurrFile=0;. V8 F, K( E- \
  218.     bFirstUpdate=FALSE;
    ) M9 P, O# \& p! v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 x* a  {' [9 ?( K  W
  220.     {) Z% C. {( S3 k0 f' X6 v
  221.       dwTotalFiles=UpdateLocal.size();6 E6 D! z9 J* j! y' {3 d# \
  222.       dwDownLoaded=0;
    ; i! f  {3 H  j( P
  223.       bSilentStep=FALSE;
    , R% {  p- d9 \# ~2 h
  224.       bCompressed=TRUE;; l8 h( n8 ^3 Y4 y& Z& Z  h) B: l
  225.       strExtLocal.Empty();# K; y2 w/ J2 r# u
  226.       strFullName=(*i).second;) s$ E/ R1 e0 {/ `" B7 x' X  Z
  227.       dwProgramState=AP_CONNECT;
    % K: e0 Y6 u' m- F
  228.       return TRUE;+ T* t9 s% j( V- i' R4 S+ Q' c
  229.     }
    " h1 b! |& w/ D) b
  230.   }
    4 M$ ^& A2 G" n2 t3 N
  231.   else if(bRestartUpdater==FALSE)
    : s; i; Y4 P0 a) B
  232.   {
    5 g6 t7 G$ R, l, j, X$ Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); v" y" K$ d3 l: Q( |2 v& S2 m
  234.     {
    + `- ]6 W" f5 Y% W, v2 h8 m2 B8 [
  235.       file=(*p).second;
    * b1 ~+ S8 I* O+ f8 s! |5 J- j7 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    7 S4 @, |4 ?2 K' D- B- H
  237.       {7 ^0 w, _9 e& M5 h, z; W
  238.         olds=(*p).second;
    / \  W) a& c1 y3 o& j; c
  239.         olds->vers=file->vers;# n  D' Y8 i4 m1 ^% s" _
  240.       }
    0 z* r4 N* h6 |+ B; t4 N
  241.       else
    4 U" P1 t2 x9 f& N7 x* b
  242.       {
    - ?' |* o; K% U2 Z" M( |2 B
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 I5 U5 c( ?: W0 z* l2 a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 I9 t: L  e1 q) x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : v4 U! I' U+ k) u$ p2 C: `
  246.       }* n8 J" {1 H8 D. [+ F" e5 M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; x3 q" \2 D7 T4 ?8 K* e
  248.       sprintf(filename,"(%s)",file->file);
    - D4 P+ q, L; e; ~/ K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 y, x9 B$ m; k4 q' J( D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 r4 {. `- S% m2 F2 g
  251.     }4 r( W( }3 R. h2 `
  252.     dwCurrFile++;
    8 P2 _+ ^- ^" y$ d6 h- U+ `: A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" e0 n0 q8 z& p; j$ [! o3 `4 Y
  254.     {8 X6 T  l4 a0 D( ]' a! L6 x
  255.       bSilentStep=FALSE;# O* e7 O4 ~; N) x* e+ ~
  256.       bCompressed=TRUE;
      Y8 L+ `: E9 V' S: R
  257.       strExtLocal.Empty();; r5 e( k" ^  z# [2 l5 \
  258.       strFullName=(*i).second;
    4 s! W; `* M2 ]# M1 g
  259.       dwProgramState=AP_CONNECT;9 {% h1 A! D6 t" ^* ^! C: i
  260.       return TRUE;' h9 p. b0 ^# g7 H/ c2 L3 q; f' D
  261.     }/ e$ U8 Q. Z5 H: W/ K* q
  262.     if(!bRestartUpdater)+ T0 J% B  {+ s8 U5 B  r+ o% r
  263.     {! ]* `% F2 r3 N5 b) Z
  264.       int iCurrSize,iFileSize;" w4 q5 W5 M* c* `: d4 ^
  265.       iCurrSize=0;  S" e$ g, ]9 h. `
  266.       iFileSize=UpdateList2.size();7 L2 s; S+ T) W- A1 c) d4 @  H- N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % p  N. j6 H; S8 I: A8 e; X
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# y( \3 a/ ]! m3 _+ q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: V/ r/ [/ Q5 |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 j" O+ l  y. q
  271.       Fclearf(".\\update.dat");
    9 |+ U+ k3 G* \- g5 @) ?4 T! s
  272.       Fprintf(".\\update.dat","Bloodyf\n");. H' _/ j" r- i- M) M! o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). r2 z3 e: A) `7 d9 `, `
  274.       {$ h& h- d0 A# r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 w( P: J5 g6 E; z/ J) e! }" D" j
  276.         {3 {# K2 u% ?' F! E- q4 Y
  277.           file=(*p).second;
    6 O; J" [! R3 L; p
  278.           sprintf(filename,"(%s)",file->file);- ~. {6 l% k7 \' l" i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 s6 H! g' Y  g/ B2 u
  280.           iCurrSize++;. ^( X3 s+ W! ^2 ?- g; b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * i7 q* s: `' j
  282.         }5 P" K& `9 h2 s, b; R! _
  283.       }$ P- s( E7 \/ @+ h6 y
  284.       unlink(".\\update.txt");
    4 E1 x( x' L2 m/ s
  285.       unlink(".\\update.tmp");+ a9 u& @2 }0 y8 s. N4 Z+ H
  286.       Fclearf(".\\checkversion.dat");
    , T0 Q# W: H8 P" g  P  w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! M1 v+ x- {* c. `% v
  288.       if(UpdateLocal.size())% @9 u6 t! c. i1 r
  289.       {
    & [/ f& A- `) a4 n4 I( t- u3 o
  290.         UpdateLocal.clear();
    8 L# ~0 }* Q/ Z7 |6 H
  291.       }
    - j7 Q; p7 Q* p
  292.       if(UpdateFile3.size())# _+ Y0 Q; T; I( Y" t6 y
  293.       {
    . {7 @' m: p( r) K* P5 h& k& A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): e8 `' K7 c, E7 G
  295.         {
      ?* V* B+ c$ z% H# v$ T7 L5 N
  296.           file=(*p).second;: I: C4 j8 E# j9 `9 N( j2 g% ^/ G
  297.           free(file);* ]  h( z4 m1 J" h# c8 h
  298.         }
    6 s* ^- ]( m# \
  299.         UpdateFile3.clear();
    ) W/ E% M+ f  M3 Y% V6 P
  300.         UpdateList3.clear();7 N* Y: P9 P2 D; l/ g" ~: f- U1 C) A
  301.       }
    ) ~, Q- N# l4 o8 O3 {" Z( j0 P
  302.       if(UpdateFile2.size())
    6 f  y' {6 g  p! |
  303.       {' W  o) G1 i; T  ]5 P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / `# P9 I: w% `  T" s. w7 q. h
  305.         {
    $ Q9 {9 ~% u' Z( Y
  306.           file=(*p).second;
      I( G  N% ?4 y
  307.           free(file);$ s  z; C6 f0 f3 _1 F
  308.         }; E$ }: F# k) H% Q) `1 }9 K
  309.         UpdateFile2.clear();
    ! w2 ]! e: H1 O0 K9 G- I0 b
  310.         UpdateList2.clear();) l( ?- e+ k3 {9 d; [
  311.       }
    4 M& Q1 [# {! p5 T! t
  312.       if(UpdateFile1.size())* C1 T  K! c. s  m: I/ T" }/ P
  313.       {
    7 k' ~4 b3 S. j3 R9 B- U: p- Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 I1 P4 y% u* F5 s
  315.         {5 k& `3 @( N4 q& L- m" l- j( u; J
  316.           file=(*p).second;
    $ a* x- M# f0 `. \/ h- o
  317.           free(file);
    ; A' |$ q4 O  q2 U! T
  318.         }3 F; G, ?  f# J' _) ?; l. m
  319.         UpdateFile1.clear();
    1 E0 x) t3 Q- S) s. x
  320.         UpdateList1.clear();- g5 ]! J! @6 |
  321.       }
    6 s8 g9 ]! H, ^3 X& k+ c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- d+ x: A7 w8 K! |# Y; o# K+ e2 V# L
  323.     }
    ( F* k* h% J! Z
  324.   }. x. @0 O% s6 k. Z3 `& k2 z
  325.   return FALSE;
    5 Z4 p) ^# L- T2 r9 B& I9 P! i7 u7 i
  326. }
    , y: k  p4 v& U7 {) ^) e! T( E4 g

  327. , F, J4 d8 c4 F, ]. D
  328. void CRevAppApp::ClearAll(void)/ c2 d& ]! L! T3 d. A7 F
  329. {& b$ I% m' K. @7 b9 n# j
  330.   LPUPDATEFILE file;9 U4 z" Z* P* L. b' x7 K! u8 p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 y6 M7 c# k+ R4 a9 `

  332. 4 s/ x9 I( Z; E7 S4 _" v
  333.   if(UpdateLocal.size())
    6 p4 h6 q% o7 g( E2 e
  334.   {
    1 K" _4 j* o( i' j' i4 D5 n7 ?
  335.     UpdateLocal.clear();
    4 i! {$ i4 S& ?' u6 O
  336.   }
    + w/ A! }0 s7 t# |
  337.   if(UpdateFile3.size())5 o: u% Q# G7 v8 q
  338.   {
    + B2 {6 _* d" }  w4 B7 J1 l; z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) v% r) T& K- L/ Y9 K' O( d
  340.     {
    % w$ O) }0 c, k
  341.       file=(*p).second;3 b) L0 O4 M1 X$ u8 y- V: i
  342.       free(file);
    " h9 ?) k4 i$ V9 W
  343.     }
    5 |0 ]( ^7 Z+ `. ~/ [& ~+ u
  344.     UpdateFile3.clear();
    + d6 R( i) @/ M2 c, I3 a( w4 T
  345.     UpdateList3.clear();2 n+ B& W! P. r5 y
  346.   }. ?- X7 y1 N/ o5 r# q5 F
  347.   if(UpdateFile2.size())1 ~% V/ J% |+ ]: x: T$ E
  348.   {3 R, {" P% c$ o& [. x' R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ D( |  Z5 T/ n% b9 U
  350.     {2 ?" h& b( P: D" _
  351.       file=(*p).second;
    0 F& _2 E/ A' _  \' A
  352.       free(file);! h: ^6 s3 M, ^! \
  353.     }) d# ]2 E( t8 D- }! d' o
  354.     UpdateFile2.clear();
    - U* W( a1 P3 G7 _
  355.     UpdateList2.clear();# a1 K* Y) h( p$ V) ~
  356.   }
    % U! M  ?9 @% X$ q
  357.   if(UpdateFile1.size())0 a9 X: z/ N( E) a
  358.   {
    2 q* E$ L, K3 s& I- b, r! j8 ^- U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 ]. Q% Y( X' M8 U5 B
  360.     {5 M$ R+ O% s/ O% i
  361.       file=(*p).second;7 |9 z5 W' W3 U/ D/ I* l
  362.       free(file);2 M, e: T1 |& R6 l) v
  363.     }
    ; t( M! i) w( x* O% f1 v
  364.     UpdateFile1.clear();- N' I8 y: `4 o2 [+ d0 v6 d' J
  365.     UpdateList1.clear();
    # O* D$ _: O6 J3 h9 ]  F
  366.   }# ~& W+ ]$ p# w0 r% S' r
  367. }  
    ( @" o4 X) p  |& o& h( b
  368.   ! W" h4 u) C5 `/ [" c
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 Y9 \% M8 C! E8 J' ]
  370. {: m8 A/ A/ g! A& O( N
  371.   int c;8 Z# {6 A) p# M3 `0 X  p
  372.   LPUPDATEFILE file1,file2;& `7 @5 L/ f: ^( ^+ ^# v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' f6 P# g5 E: i% P% c% n( n  t
  374.   std::list<CString>::iterator l;
    8 E- e1 g' T/ F$ |2 E  ?/ w/ a
  375. 5 x. v% ~4 D8 I4 K' v& ^
  376.   UpdateLocal.clear();; r, G! Q5 M+ ^  M5 u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, j# t% a# L5 {( l1 f) V6 P, S
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! }" O4 E0 b4 g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 V  i* G* x( V, ?5 e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; H  u7 G$ q' F
  381.   if(UpdateFile3.size())
    ' h: F! x. N+ a1 R+ C
  382.   {
    * K, c7 b# w* J; L# t* n& H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / `6 {8 i2 ?; {2 C. ^& Y0 @+ C
  384.     {
    # e7 Y1 j# Q& I. B0 Q/ `$ Y
  385.       file2=(LPUPDATEFILE)(*i).second;. y* u8 [) e2 p- S: F4 l' K; Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( X8 V. Q7 B7 `3 s3 Q+ Q
  387.       {
    ! |- i) ]) m. L
  388.         file1=(LPUPDATEFILE)(*p).second;  Z3 s1 c; G6 n" e
  389.         file1->vers=file2->vers;% w) f- o" p, t5 Y3 r( b& R0 T
  390.       }8 |# Z, m  {/ e8 U
  391.       else+ [/ ^9 _$ s; m) [- K* S
  392.       {
    7 G7 g1 X* k1 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: C# z9 W: }& {/ o% v
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" U% X& ?  R. y0 O# j; ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; A1 H! B  `& I
  396.       }
    6 W9 {" M' |% Y1 u% x
  397.     }
    7 v  O5 F0 P* _* h1 d
  398.   }3 M. d$ i; x( b0 v2 o0 r, o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 ~' H$ ?: ]% ?& }5 a7 f+ O# @
  400.   {/ p# t/ K+ ^  m; K: K/ o; b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 K0 ~) J( e) i8 r7 ^" |" [
  402.     {+ G+ U) j5 A4 Y$ X- r9 R7 Y
  403.       file2=(LPUPDATEFILE)(*i).second;+ B; P. h( @4 n# K3 @/ v1 r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- O) M; `' G! T: E  P
  405.       {
    " t' r- @3 t2 L2 b. G4 |2 K/ v
  406.         file1=(LPUPDATEFILE)(*p).second;
    - S; e1 E0 F/ Z& |4 |$ @( Z" M
  407.         if(file1->vers!=file2->vers), ?& w4 z; B* _8 Q" I
  408.         {
    5 n9 Y6 y& V- Q( M( K
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 R5 h6 h2 i5 @  P( w7 s& |
  410.           c++;
    0 j9 E+ a# p5 x# [
  411.         }
    6 [. m1 l4 L2 C2 n
  412.       }
    ! u! ]) R& _9 x8 Y
  413.       else% N& n0 E/ o5 _0 }* S- d- A
  414.       {( M" Q4 ^4 O) G  @# M- o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- w/ J8 ^% \: {3 p1 E( p- O
  416.         c++;* C% s# e/ J; e4 ]
  417.       }
    & r: ], |6 x) `: t$ G
  418.     }
    $ y6 z, M9 U" e- k9 H% I: _& F
  419.   }
    + s$ Q2 ~6 i, g
  420.   unlink(".\\DownLoad\\update.txt");
    " z; D' t! Q. Y- A9 V
  421.   if(UpdateLocal.size()) return TRUE;
    9 {5 a0 A" \1 A: i
  422.   else                   return FALSE;5 B% g" |7 i* S, P
  423. }1 V; y2 x8 h" ~

  424. / f/ R4 y- X# v$ G/ s
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! i- f' D& c# L4 [+ |6 m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ t$ C( @. u! w; d( `% o6 r

  427. : r! O. {, L0 s) n
  428. : x7 D9 A& }) L( l2 _! }

  429. * S+ B0 {: \% }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 N/ d$ I2 ?( U! n+ ^
  431. {
    % S* z6 N1 h* T+ V% w" h
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. U3 I' N/ s; V, W
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), r, S$ C( U) f$ }
  434.   {
    4 I8 X5 C' c" C- T2 `
  435.     char szLanguage[50];
    ' R) b* I( y+ u' g$ W# s; E$ d
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 Z4 h+ _, E  n2 K. ^2 b! ?6 G( o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 @; }! q$ W4 Q+ W; `
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 x* @2 f2 g8 K& a: B
  439.     else                                   m_iLanguage=ENGLISH;
    0 u5 D3 F- R: o$ d5 \
  440.     char szRegister[100];( N% o! g) q$ b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- Z7 R7 }- a, w/ o; U
  442.     strRegsName=szRegister;/ O7 Q  ~2 `: c: w0 b1 |/ @: U
  443.     char szPatchURL[100];; I& h% L; ?" ^/ o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * G! J9 m/ o& I6 w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 m$ F1 F7 J7 F+ [" p" J
  446.   }
    - H" P: N- F; P% W' v( j  o# a
  447.   else5 q( R4 P% R1 \+ J9 a% q
  448.   {( _/ ?' G9 {+ d" m: x; ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 Z1 r! m* N) a$ A4 A4 g4 C
  450.     strRegsName=DEFAULT_REG_URL;
    1 {* |* x% K( l# m
  451.   }
    $ t% [" P# K/ S7 L& r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ' h) O. n- b' H$ _8 k. Z4 i' T) d
  453.   {& m! n0 z* H7 |7 i" ~
  454.     char szIP[50];& K$ \* `* t+ I
  455.     char szDIR[300];
    7 {8 S7 K( s: |
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) L, ~4 H/ w% N5 i
  457.     {
    # C/ j" r$ w3 t7 w. o7 r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 J' ^. G% \! `  Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" x3 `3 Y! Z9 V1 t
  460.       strHostName=szIP;
    0 I# G2 C5 M2 o
  461.       strHostPath.Format("/%s",szDIR);' T* }9 ~2 B. f9 f# ?1 y) z% @
  462.     }
    . n$ Y3 @$ K4 b2 ?
  463.     else" Y- \: w; ?9 @5 L+ p# k$ @4 f
  464.     {
    ) X: Z3 c) v( U. W& y( [; C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 o3 e: h5 B8 W" N6 R' A
  466.       {; F: [* w8 s5 b% g
  467.         char szLanguage[50];) _5 W7 S% V* {, r% ~  D9 f6 p5 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  X) p) [* @- V1 ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 b. L+ T+ ^7 b$ d  k7 d
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # X+ w% o+ @* n$ x- x, }0 w' f' D0 P
  471.         else                                   m_iLanguage=ENGLISH;& v0 }3 d; z9 ^# Q; D
  472.         char szRegister[100];
    2 \1 e+ y' j  R+ K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( B  N$ j+ ^, n
  474.         strRegsName=szRegister;
    0 M# h9 I1 `  Q) b7 Z; A
  475.         char szPatchURL[100];& {. r6 d& B7 n7 l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * B5 Q; q7 L- K9 B+ J; a" h) C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  c, d5 C0 X& _2 V+ P  `
  478.       }
    : J$ q6 H, ?( V( N% P
  479.       else
      ~2 j0 d7 P" J
  480.       {
    ; G3 C2 z/ P0 Q8 g7 s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * ?( g1 ~- H; c+ s
  482.         strRegsName=DEFAULT_REG_URL;& a5 U& }6 i  R% }% d/ g9 q6 \
  483.       }8 D4 Z. C0 ~  P" f
  484.     }
    4 G$ f# a" w' S& E% x+ e3 r
  485.   }
    ; f% Q9 i$ W7 o' V, S( |
  486.   return true;2 Y% H7 q; O4 k4 C* x/ @# p
  487. }
    , _6 I8 q/ }9 v* Y

  488. * T: P/ n  v% l: f8 Q! [9 ?% d; f
  489. #include ".\ZLib\unzip.h"3 x2 d6 W) w+ a/ f- m; n4 s0 G
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 h6 L9 s4 O- C
  491. /////////////////////////////////////////////////////////////////////////////
    ( z9 j- |+ n9 m$ W
  492. // CRevAppApp initialization
    / P( j/ k* o& k" h+ v  [* B5 p
  493. + D% V: L1 k, a* m3 L! G- G
  494. BOOL CRevAppApp::InitInstance()
    7 ]0 ?9 o  ]. P
  495. {
    , Q' Q/ N% J/ F% p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) b) v2 P: }5 B1 }9 [( {
  497. , L* t* E0 R5 m' O9 z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + F8 t; Y/ K$ v& S2 |+ w; w6 m* K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))4 L+ S% O3 i4 b  n# v
  500.   {
    $ w+ D6 Y  X! h! Y  X( l( i# y& Z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * u% q0 B( a* w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    : b. L  b6 ]7 b& t1 x! ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 z- G$ m( o/ p0 F  f
  504.     {) u! U7 a' {( G
  505.       strcpy(szPath,szPathTarget);* m% z- _6 n+ G
  506.       SetCurrentDirectory(szPath);
    # @5 ]0 A' D' ~9 @+ ?
  507.     }  X1 z' I- x% C) K$ I$ ~' S
  508.   }4 _! G0 g" l2 j3 }% S" _  g& J
  509. #ifdef _DEBUG
    % X: B" I+ ]6 p8 h4 G4 q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  M7 W9 N; V" H( G- ?  H
  511. #else
    3 F: O( V) M8 k" J/ R2 t" X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 C; |/ M$ l* ~% {. m( `
  513. #endif; Z/ n* Z; V, ^; n& s
  514.   {
    + A  d8 F+ H6 \0 I
  515.     char tempFileName[MAX_PATH];
    " J" x* @7 q$ {6 u+ q
  516.     strcpy(tempFileName,szPathSource);
    ) \5 G7 o+ G. Y8 z
  517.     tempFileName[strlen(szPathSource)-12]=0;0 R8 e' |! W! j8 _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# x/ _& c% g4 J8 Q+ E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 G7 I! g3 L* z% f: u; N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, P6 Y0 R) F$ r( X8 n( c
  521.     return TRUE;* M4 L3 m! m: T& K$ N- a5 n' x5 Q
  522.   }. U# C6 \' u! y4 Z5 x
  523.   // Nuke 0118: Delete run.exe
    - b$ l' B& a% V  ]6 m$ K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: G: a" B- C/ v% _. Y8 {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- `5 n4 n6 I& u& R
  526.   if(!ReadCfgFile("Config.ini"))5 L9 l' Q! k) G! q! l( j
  527.   {/ C* J! B5 L% L% F  I' A, V# {5 g1 V3 E1 C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- y% [9 T2 n+ d8 e* R' K
  529.     return TRUE;
    ( V/ x2 F$ c5 G
  530.   }
    , q) Q% @/ G0 c* }
  531.   HANDLE mutex;+ S" `9 M; k6 x
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 P- V7 i4 y* q1 O% h' l: e9 ~; c
  533.   {
    ( V. X; a, B1 T' r, Z, }1 x) J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ c( p" C+ p  Z8 t$ e+ q8 g5 \' o
  535.     {7 e: S- ~! @7 [1 Q
  536.       CloseHandle(mutex);* d5 ^* [$ e3 a/ i. y6 F
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) ?/ q9 G0 _% j4 w3 G  ~5 v
  538.       return TRUE;
      p7 [: F- c9 M' u5 w
  539.     }% E9 A+ B+ M, M+ p
  540.   }  5 k7 p. |$ V+ n" \- F
  541.   CloseHandle(mutex);3 B: i2 {2 {  ]7 M# t2 j

  542. : Q. J8 |/ A- ?/ i* w7 w* F. }
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 P; M% F- S( [+ D+ v+ D

  544. 6 \; j3 G( {4 W: L
  545.         AfxEnableControlContainer();5 _) j( d3 v6 i$ e; e) I5 b
  546. . @; L7 D  N$ j8 T2 }8 y
  547.   bCanUpdate=FALSE;
    + }. Y* ^+ A+ h
  548.   dwStartUpSteps=1;% A. D0 w1 T( X0 W" M7 S% e  C' X/ v" E3 T7 {
  549.   dwProgramState=AP_NOTHING;1 [% b$ b; e6 A

  550. ' W$ j% \6 y' l; u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: K! X9 E+ a  S! K6 M' o- e

  552. 7 v0 W' S" _+ P9 W" s
  553.         // Standard initialization
    1 K% J+ b3 x: t' Y5 X( ^! O( ]2 o- s
  554.         // If you are not using these features and wish to reduce the size
    , A/ a: Z/ s* P2 ?
  555.         //  of your final executable, you should remove from the following
    7 w# u3 F9 W/ B8 r2 R
  556.         //  the specific initialization routines you do not need.
    7 ]% \) Z8 u, l8 f
  557. ) t9 p+ }: U+ v. Y9 F& g
  558. #ifdef _AFXDLL
    # ~/ S3 U: v3 D6 @1 W" k$ C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 a: p; }' X, p( f+ K
  560. #else, t" Y, |4 c/ f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 v* @4 r. H+ f& `' y/ {
  562. #endif$ s) L# E1 N. c/ n

  563. / M. j5 a. k8 p: I5 _
  564.   dlg=new CRevAppDlg;
    . x( Y9 n5 g0 E: ]5 M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 L" S5 O, @2 I+ V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    7 K% D+ K5 d$ S
  567.   m_pMainWnd=dlg;0 c  R8 `- w- h. H5 v# R. e  J$ F) G
  568.   k7 A* F  i3 g9 s6 s7 g9 h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 V1 P- y; `" s$ J/ C- d
  570. % l6 V) T2 f7 Q3 u0 ~: f0 @
  571. //  GdiplusStartupInput gdiplusStartupInput;, S2 m& f0 o9 e! }% S4 z; N7 y
  572. //  ULONG_PTR gdiplusToken;% L4 a/ {. A, Y8 \: C7 U% a3 J5 T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" C; n# F9 @7 k
  574. 5 u5 `) w' ]- r/ Y! B0 v
  575. //        CRevAppDlg dlg;  ]3 g! J+ K, E& c
  576. //        int nResponse = dlg.DoModal();
    1 }; `/ W. e+ Y8 q# E
  577. //        if (nResponse == IDOK), @' u& C/ k- K
  578. //        {
    & d5 t, I  j& x* A6 I. [
  579. //                // TODO: Place code here to handle when the dialog is
    8 u3 L: `7 i, I, a+ J
  580. //                //  dismissed with OK( s; v5 `( q; x% N
  581. //        }
    3 k2 V% `2 u/ m9 |7 N
  582. //        else if (nResponse == IDCANCEL)
    ) b+ X0 f6 t1 X: W
  583. //        {
    ) }( E" @" B. ~4 E: C  y
  584. //                // TODO: Place code here to handle when the dialog is+ G2 [5 r3 I4 t2 p4 z
  585. //                //  dismissed with Cancel
    " ?6 j& I& m/ M% ~$ ^
  586. //        }
    0 q, Z0 ^# u) ^) P4 }

  587.   G, \8 g8 B+ M5 T( v9 f) o+ Q2 t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % M8 J0 C  W0 V- }
  589.         //  application, rather than start the application's message pump.
    1 |% U! H. c$ J! D
  590.         return TRUE;
    : G3 P# A3 y( k$ R
  591. }
    / C' H) U: P* h0 Z( R

  592. 8 S1 {! Y. _- v3 R( d# Z& s; f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    . j% D) n7 `0 A1 y& f
  594. {5 n0 @; j7 _  R% L
  595.   int i;
    3 _7 t, `+ y2 X) L
  596.   char *szRet;! u5 I: X3 D) ~! ~; T0 F: h
  597. 7 p3 G7 T* [" A, L: ~, _9 j
  598.   if(pSource) { itoken=0; sztoken=pSource; }' ~# f7 l% q, Z& X! k0 S
  599.   if(sztoken)
    , q! G5 N. A9 G1 Y7 ]
  600.   {
    : m- C7 W* R( M0 ?" Z0 @$ l
  601.     szRet=&sztoken[itoken];
    ; s4 }1 P: e- @0 j9 r8 L
  602.     while(sztoken[itoken])
    . O8 x+ }7 Q! B  {8 c# K9 q
  603.     {/ U, m5 }1 h' ^
  604.       for(i=0;i<(int)strlen(token);i++)* U" a$ L& K5 t  Z/ X0 x- j
  605.       {) [3 D8 G( s9 ^- E; X# E" _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" @& P' }' ?2 o5 S! _5 D, u6 t7 Q1 P; t
  607.         {6 F* J& j/ z" }
  608.           sztoken[itoken++]=0;
    5 ^4 y' f0 ]. _
  609.           sztoken[itoken++]=0;
    % M" g- F+ F! ^5 H; D% ^5 k
  610.           return szRet;$ U% b9 H6 ~. N: S
  611.         }
    6 `6 p8 G% h6 `  ^1 N& Y; s
  612.       }
    0 t. e6 v  ?2 k* W$ s9 H* F, n
  613.       itoken++;5 c' {) \# `; c3 L2 K- s, ]/ R
  614.     }- a0 u" j2 n1 e/ V+ F2 z
  615.   }
    % n; M- x5 f9 _3 v% E3 u7 t4 e
  616.   return NULL;
      I  O5 Z* i4 Q, i/ G
  617. }( t1 r1 Z& [. w; p0 u( \
  618. 3 a' T7 T8 }0 \3 A
  619. void ProcessProc(long Total,long Current)
    3 H: i% T1 O- C2 v! u
  620. {
    : s1 K- v, }7 Z; a) d, W
  621.         MSG msg;" b( \0 S; N& c  }, H5 I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 |8 q# C+ \7 ~* B5 }% m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, ?$ L0 M% L) I* R3 x: K- l" G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): k% o  F" N3 _/ U
  625.         {
    7 `7 P1 e5 O! O& v
  626.                 if(!GetMessage(&msg,NULL,0,0))5 d- Y& ]  Y* ?! @9 c, {' a3 u* @; W
  627.                 {& {. q2 ?" `0 E  L! I3 y0 L
  628.                         return;, X) u- k; p5 g$ L. ]9 |6 {+ D
  629.                 }! q, A  Y- w- z/ v; b
  630.                 TranslateMessage(&msg);* s' J: y4 i% u# W
  631.                 DispatchMessage(&msg);/ z& G9 r2 E4 c
  632.         }       
    - |8 I% ^, e) g5 c# I$ g3 \) q* u
  633. }# d! Z& D! m" [2 n* \8 }2 ?0 G, }. _

  634. 6 A5 \- [6 K/ E5 r
  635. BOOL bFirstChar=TRUE;$ p% Z, ?7 F- g$ g) G& r. }; p
  636. ' y0 x6 h6 \$ y( t8 a3 [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 P7 Z5 U, L0 i. U3 ?/ e
  638. {
    ' G( ~2 j; U6 S$ ^4 y  P% Y
  639.         // TODO: Add your specialized code here and/or call the base class
    - I2 Q( ~& k9 H7 M( k( n- d
  640.   switch(dwProgramState)" m9 Z" b9 T7 {, n
  641.   {
    8 k7 k9 H9 O: T# E0 X5 G
  642.   case AP_NOTHING:
    9 @, {; j" m  U; U, e
  643.     switch(dwStartUpSteps)
    7 q) N! C) N7 d, _4 P; ?- {
  644.     {
    7 W5 Q8 z+ r6 i( J( t/ _' l/ M) `
  645.     case 1:5 ?7 b# c, [' T) s' I! @8 w
  646.       {# \7 D& v5 {& ^8 Q: C
  647.         int i;
    " A- e: m8 d' L' ~1 `' ^% X
  648.         CDC *pCDC=dlg->GetDC();' K8 Q- c% q! l; q2 v' I! ^. X
  649.         HDC hdcwnd=pCDC->m_hDC;  |/ h# \: M( X7 z2 y# o+ R  J
  650. //        Graphics graphics(hdcwnd);0 S/ q% }( L* Z' C1 w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & ]- g1 o) _2 t) I* j3 j6 N
  652. //        INT iWidth=bitmap.GetWidth();+ S" I2 z& L1 e8 C. b9 ^
  653. //        INT iHeight=bitmap.GetHeight();
    - l2 S% X/ j6 {% ]7 W# {2 @
  654. //        Color color,colorTemp;: _5 G3 X4 Q$ k0 J9 ~: m
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- y" t$ F/ \2 X% x7 U
  656. //        {+ \( b5 |, N! b; Z1 `6 j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ E8 Y4 h/ J+ u; ^1 g1 K
  658. //          {
    & m/ t. d1 `0 _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + d: M. m, E0 ^9 r4 C" {
  660. //            colorTemp.SetValue(color.MakeARGB(
    + P, ^: A" d4 L; S7 ~% G
  661. //              (BYTE)(255*iColumn/iWidth),
    * B3 S- ?; J; `# ?5 S0 I' l7 v
  662. //              color.GetRed(),: Z/ q3 Q; b9 ^
  663. //              color.GetGreen(),
    9 W' g8 s5 V- z4 S* G
  664. //              color.GetBlue()));6 ]/ H8 [9 e1 i+ E# [$ g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' c; z. B; z, D& z
  666. //          }  ]% j+ K0 @: I) w! R7 g
  667. //        }
    ) y( _1 a# l, t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 e$ d' d% f! `1 b  `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  `% y: ~' |3 R- E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, z9 O; k8 D+ w- Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 l8 S. U3 @, ?+ |6 E; F
  672.         for(i=0;i<240;i+=8)
    5 _0 b2 C- g/ z+ w
  673.         {
    ; s& j$ H  i% Z. w  `/ @7 d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # E' l- |2 T. V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 I8 @7 q3 }" D) v+ O; q+ T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ C/ Z" L- R0 X0 b
  677.           Sleep(33);+ [3 v* T4 c) y' b/ A* j- R
  678.         }
    ; _. H" a, l! f9 S" E/ k* c
  679.         Sleep(1000);
    # k& _0 t+ ]& T6 x  }
  680.         for(i=240;i>0;i-=8)
    3 A( ]* C+ L- l# e# r0 y
  681.         {9 _' W+ C9 w5 n# R( j- b; s/ o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 k/ z" s6 j4 }: }8 _! a1 D. N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ C5 }5 Y& i7 h4 Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: S9 x+ E& u- s1 `
  685.           Sleep(33);0 L* }9 q$ t* e/ V# }# W$ t
  686.         }
    3 v& j3 L$ f0 ?& C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * }! [' o) B" E" b
  688.         dlg->ReleaseDC(pCDC);
    ) _) B8 T  t1 x9 w& e
  689.         DeleteDC(hdctar);/ r0 S$ J/ K# _" n
  690.         DeleteDC(hdcsrc);' H, z  o; B5 ^3 S: H9 ~5 e
  691.         DeleteDC(hdcorg);
    ' j9 g7 }$ m; d9 C5 @6 U
  692.       }1 O4 D2 }/ K- B6 x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' z& Y' W# v* f. V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( n- U3 h6 P5 |) A% S
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * T. ~0 T7 s- d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 a6 \" f! C( S5 u$ [1 w' l( c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 z) D. i8 I( o% T; K
  698.       if(!Dn.Connected())# `" W# V9 s% i1 U
  699.       {  s4 @% h3 D6 T4 [  C1 X- K
  700.         dwTotalFiles=1;8 j% y) @* a, n4 `4 K' C
  701.         dwDownLoaded=0;
    5 L  M3 J# u1 o8 ~+ V$ {+ o
  702.         bSilentStep=TRUE;
    ' W& Q* A% f/ N
  703.         bCompressed=FALSE;( z! b  d# m; P; {
  704.         strExtLocal.Empty();
    & s, s; w7 h- s" e; T. }9 `
  705.         strFullName="readme.txt";
    ' G! D" Z. B! M  l5 Q
  706.         dwProgramState=AP_CONNECT;8 y- W( G, b+ t4 B, j9 N* p
  707.       }
    0 Y0 |4 {$ E$ d6 W$ Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  G$ ^. M/ V  T3 w6 V2 l& L, w8 \
  709.       dwStartUpSteps=2;: F; s9 C  C  Q2 H8 l
  710.       break;" u! [  f2 R$ `+ _
  711.     case 2:
    * `5 y" C; Q3 P5 m
  712.       {
    ! }5 ~! `: q; N
  713.         int iEOF;
    8 r* e, Z# \4 g6 V3 T9 r2 x
  714.         FILE *fp;
    2 O& D/ `( g: V8 t7 o$ ?
  715.         char szString[512];& N9 _: r) _3 n  W7 z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! i+ f" x9 t3 B" x# M% m
  717.         if(fp)6 O9 U+ Z8 L& _! r
  718.         {: \" Q' D2 }! v7 p# ~! F
  719.           do
    6 x- q8 \  b% }9 S
  720.           {6 R$ s8 N# K. C) }* ^5 Z
  721.             iEOF=fscanf(fp,"%s",szString);
    ! J% d& N! f# c# Q' H/ |& z( j$ @2 [
  722.             if(strlen(szString))8 W3 v- i: H( X2 z1 i
  723.             {$ [' M. b/ ~/ H, p
  724.               if(bFirstChar)3 J8 s9 [% P! F3 O+ K, D% D
  725.               {$ b! k" m! S. s: M5 S
  726.                 bFirstChar=FALSE;6 G" |7 ^7 h: h( q) Z
  727.                 bConnectIsBig5=FALSE;
    0 d. _* m3 m. K7 g5 K3 _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! F2 ?# W) [9 N4 G! W3 K% K
  729.               }
    6 i* v* {( T% m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 H& v+ _9 f: e& g( Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' N" F( g. v6 E8 n3 A; k
  732.               dlg->m_ListText.AddString(szString);& u$ _$ B3 x! U7 `, b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 o, M$ i0 }" E! a. c
  734.               *szString=0;# q& p' _8 k5 g6 a& K
  735.             }! X( ^: U& W8 i" u3 _' G9 C
  736.           } while(iEOF!=EOF);
    * r  f8 w* w: k8 {3 x) ~
  737.           fclose(fp);2 u  G7 ]( S6 W) A3 o
  738.           unlink(".\\DownLoad\\readme.txt");' q5 t: S2 t) ~, s
  739.           dwStartUpSteps=3;* X7 G! n  [. h& y
  740.         }
    ! y2 g/ M, t  e% K; m  [& M! Y* `
  741.       }
    7 c# N! w) @& K  [, H  Z' q; G
  742.       break;
    ! v: {3 j! B# ^/ b5 m
  743.     case 3:* s" x+ ?0 G2 a* s" w/ p
  744.       if(!Dn.Connected())  F% W$ ?: C+ \9 D7 w
  745.       {" J6 J1 E" w2 h7 E& M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # ]  ?% Y) e. D) x# E9 j/ y
  747.         dwTotalFiles=1;) `# n% }. G3 m2 c# U' D0 O
  748.         dwDownLoaded=0;
    6 c: k3 Z+ Z8 W+ v& q9 d* o( E
  749.         bSilentStep=TRUE;
    " R+ R) B4 y' S) ]3 y" S! [: x
  750.         bCompressed=FALSE;
    1 J1 v8 b  ^& Z* k* h
  751.         strExtLocal.Empty();# S' D+ l0 [$ T: G+ ?# C+ X0 J
  752.         strFullName="checkversion.txt";
    / x1 n3 g) H$ G% a4 y
  753.         dwProgramState=AP_CONNECT;
    7 E7 t% i5 q: K) M
  754.       }
    6 n- _8 U+ a1 v0 g: Z  H
  755.       dwStartUpSteps=4;3 _" o; M" l. L0 p6 m2 y
  756.       break;: V/ [9 D8 L" X7 A; c2 T
  757.     case 4:
    6 }. ~% B: n& j" K. }0 l
  758.       {! {+ L8 _9 x. w9 Q6 O% e
  759.         FILE *fp;; N7 A7 _, P' r* i
  760.         char szString1[128];
    ) K5 L* b9 }  X5 Y, c5 N/ G
  761.         char szString2[128];
    5 K: x0 p& M1 t' P# `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : N6 S4 o+ Z& q: A% A
  763.         if(fp)5 n# @$ X3 P6 V' g2 g
  764.         {" q0 Q! M) X! N' N: Y
  765.           fscanf(fp,"%s",szString1);
    1 _; P1 }( E; A3 Z* D0 r2 w* u
  766.           fclose(fp);
    ' H0 J5 M3 Z- n0 G% K, T. N4 c
  767.           fCheckVersion=atof(szString1);
    , U+ B2 W3 P. P2 i4 z7 }
  768.           fp=fopen(".\\checkversion.dat","r");9 Q( ~7 b! n; ^  z( }# C' z
  769.           if(fp)  v4 ~. [! a' f# K% _  ^9 V3 Y6 O1 x/ f
  770.           {
    9 i6 {) w! X3 Q* {0 f7 p5 R
  771.             fscanf(fp,"%s",szString2);0 G2 z+ t: |0 A/ p8 a) N$ n
  772.             fclose(fp);
    2 D# E" a2 m# B  B3 c* r# x
  773.             if(atof(szString1)!=atof(szString2))
    : {9 E. W$ A/ N6 Z% L/ r! M
  774.             {
    ! ~) R) s2 D/ M' i, o7 W
  775.               if(!Dn.Connected())! e& C% f% _2 W4 R% t1 }+ Y% Q
  776.               {! B) W6 Z. [; T" z8 M- D& |
  777.                 bFirstUpdate=TRUE;3 c' X) z+ c( I: H
  778.                 dwTotalFiles=1;& l$ h6 `. a9 y5 \
  779.                 dwDownLoaded=0;
    ; ]  @/ @& I+ ?7 d3 U) C3 `% x
  780.                 bSilentStep=FALSE;6 ?9 d, D( w$ K6 ~& C& w' N  m7 u1 K
  781.                 bCompressed=TRUE;7 N% O7 o. ^# V2 k7 j% _. m
  782.                 strExtLocal=".\\DownLoad\";; e- e% Z: Q# y# g3 |
  783.                 strFullName="update.txt";
    ) R4 @& W0 v+ I2 k
  784.                 dwProgramState=AP_CONNECT;$ Q7 z, D+ Z6 q3 l3 r* w' h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 ~" [+ V- K: \/ t2 g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , Q  o: }3 N  m2 m2 S" ^; s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . k. q+ X+ j* G4 M# v5 w

  788. 2 D4 }( F* r* C2 h  s/ e: e  x! E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' X  G# F$ d( I6 A
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ g% M% Z6 q7 p, P0 Y% r  T5 F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ _; b+ E2 i; j
  792.                 {) }+ `! L( b1 ?2 t+ B2 ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : B- P" C: O* d; j, x0 h0 m' i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 j. e( L2 i- t* p$ B6 I7 F% E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& a6 X% `/ w% p; U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  I# K4 y7 y- X
  797. % m! W% k$ M3 |. T: G+ o8 U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% [, \' ~7 ]) A( L# c) _6 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 ?. o4 g9 O9 ?! ~/ y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ ^9 c. v; K* o/ n) k! i8 l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ]: R8 w- ]$ r* q
  802.                 }
    " p& i" G, D! o% @9 I
  803.                 dwStartUpSteps=5;
    , c7 T: ~2 t/ x/ v
  804.               }4 s+ |5 U9 V: ?5 S! y
  805.             }8 U( u9 w5 P/ q1 k( d5 j5 J
  806.             else
    1 F4 `7 T7 J- n/ z7 t. d  C
  807.             {' t" n# c( t1 r9 Q3 }; v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % x( h9 {4 ^2 e3 Y& Q; J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' f+ h* q- z6 R) K0 ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - d+ R# _' ?/ L. w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");& j1 c! h; [1 j9 e0 {9 A% [4 R

  812. ! _* ?/ a$ h5 Q7 t# |1 C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 O4 K; R% C% X0 A' K1 d
  814.               dwStartUpSteps=99;$ H. l6 {' b& C
  815.               bFinishUpdated=TRUE;  L) z+ z( L2 Y8 V' i
  816.               bCanUpdate=TRUE;2 w' F# G* {0 l9 w( \* Y
  817.             }7 C; [5 @1 N  D$ Q5 I3 w+ C
  818.           }
    0 U0 ^4 m4 K, T, P! c7 L  L
  819.           else% Q, y6 _( _" E! N$ O9 }
  820.           {
      o7 y5 u) @1 \
  821.             if(!Dn.Connected())
    5 U( v: G* A2 W1 ^! v! K
  822.             {3 Q# n, t8 D6 D: G" E
  823.               bFirstUpdate=TRUE;
    : P9 N# Y# {" j, A. f" ?% Q
  824.               dwTotalFiles=1;4 @6 x2 r  e; m
  825.               dwDownLoaded=0;
    ) e- l* m2 H6 Q, T2 w
  826.               bSilentStep=FALSE;
    : w* k# e: \4 j9 k$ S2 G% a+ o
  827.               bCompressed=TRUE;7 b, ^: h+ Z; Q7 |: T* ]
  828.               strExtLocal=".\\DownLoad\";
    ; ?$ a5 q4 t- j# E
  829.               strFullName="update.txt";: B. Y+ Z' t8 W3 \
  830.               dwProgramState=AP_CONNECT;
    6 m5 w' S3 X/ K7 n2 c  q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 M) _. r: G( T& S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 H# F; E( x1 W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; K" J0 I  V$ ]% Q  B; Y  |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 y7 x% `7 ^5 F: j8 }7 j
  835.               unlink(".\\DownLoad\\checkversion.txt");$ m. [- g) c! \4 ~; `7 |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( I& B9 g! X( k( p
  837.               {
    ; n$ J$ V: X8 \! F- \
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& {4 f0 F. A: H  @" {0 ~) D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: Q* V6 e/ {/ g8 k# Y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");1 ^. z& Y+ u* Z1 v' a3 o! h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 }+ u9 T% E) h$ u
  842.                
    ; m! X0 s1 c$ \& i) T2 l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 U. B* ^: O% T; E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" _( [# x2 w/ x( P& V6 J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 k, @7 u. E. Y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 Q: Z' w2 ~5 T$ [" n
  847.               }
    ' V" }& a) @4 }; i  P/ V" k7 _+ N- q
  848.               dwStartUpSteps=5;
    6 i  m& A/ v% f2 Y
  849.             }: _+ k) z& v' `" q# D
  850.           }
    ; k  G1 `6 X. |8 @/ O
  851.         }
    # }$ F( \( m; T/ p
  852.         else3 s& ?8 a4 L4 K* _6 g, t
  853.         {
      z5 {4 H$ c+ J6 k
  854.           dwStartUpSteps=3;
    - P; f: w- W# {; C; Y
  855.         }8 V% V& p" G. F) _+ a3 ?5 C
  856.       }- d$ l  [) k. b/ U3 H
  857.       break;" @( O; V: `5 B1 }5 ~8 q  X0 S. \: b
  858.     case 5:
    . W/ P+ C4 N) A5 |' b  `/ n* }
  859.       {
    - I6 J0 d6 L+ S% |+ ~3 H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)+ b1 T( V! V$ q5 q  g5 J# {8 O0 Z
  861.         {7 E" G7 f6 u+ y! p* ?; K
  862.           int opt_overwrite=1;& C! u' \- d) m3 s
  863.           int opt_do_extract_withoutpath=0;
    7 l9 v! V" ]) f/ R& g+ o
  864.           unzFile uf=NULL;8 _. `/ m% ~- i
  865. ( G" N% D- [) i2 t  D( V
  866.           uf=unzOpen("Wsa.zip");
    2 q, e8 S( w& a8 I1 ~. l
  867.           if(uf)  y, r, o% F: r- z
  868.           {
      S& J! a0 K8 }! F5 n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    # u; z, Y/ {: i9 ~3 U; ?( R
  870.             unzClose(uf);& N6 b! a3 I/ L* [5 g. A4 K' D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* q  Y) H7 c2 ?' Y, v! O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) A9 F/ B8 j4 X
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 ]9 Q3 S. u0 \$ o$ \) T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - j+ b% [1 Y# w) Q, t& V+ X  A- R
  875.           }
    9 i* S; w8 O  v9 n  M$ z
  876.           DeleteFile("Wsa.zip" );: `/ [( Y, Y+ O, F4 ^/ m# ^
  877.         }' p! n1 [: b# t

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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