CSUpdate.exe源代码

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

, ]- Q! J- w8 l
  1. / RevApp.cpp : Defines the class behaviors for the application.( s8 h3 ?* [  h1 H% A
  2. //  U: U  A( W+ _( }) O% s+ F
  3. 1 l0 B! k" @( K1 }
  4. #include "stdafx.h"3 R2 @0 }. u  S0 Q: T% @9 D& n

  5. & z3 b! w7 p! X
  6. //#define UNICODE
    ; A# `# s& J! c( S% ^+ o7 o" ^
  7. //#include <gdiplus.h>
    ( g$ K  i' g. V. ~
  8. //using namespace Gdiplus;' l0 F! H/ n# Y

  9. + X$ V) Z( i- v9 w2 _0 r
  10. #include "RevApp.h"& ^: i5 w1 q0 `6 n
  11. #include "RevAppDlg.h"  D/ |8 K6 ~; q# _& I/ e
  12. * S( c- S7 w8 Y1 j  ^7 ]& w, D
  13. #pragma warning(disable:4786)
    2 M  M1 R/ E5 J1 K6 K% {
  14. #include <map>4 M1 Y  M  ~  R& ?1 a
  15. #include <list>
    # U7 z# G; T" L1 e7 R
  16. #include <direct.h>
    & T/ t3 f2 M0 J9 u9 f

  17. 6 a3 m$ j3 S" @. L
  18. #ifdef _DEBUG
    " A9 I% u) _4 \
  19. #define new DEBUG_NEW! Y2 ~' e* H9 \8 d9 o2 ~( e/ G
  20. #undef THIS_FILE
    " N) s6 l# k* Y
  21. static char THIS_FILE[] = __FILE__;
    3 I8 Q) V- Q# y4 g  l# I
  22. #endif
    ) m" p1 I; Q; }2 A  ~
  23. #include "SkinResDef.h"
    0 n9 A+ b' U0 b' Y4 U
  24. #include "ChangeBG.h"
    1 A# @  H2 v* U6 [0 D3 `
  25. #include "AFXINET.H"
    * A  m" c& ]) I
  26. - k/ [. p+ [: h& b1 T/ y
  27. #define TRADITIONAL_CHINESE 0
    8 F1 S. Y  `2 u* P9 Y- u! ]* ^+ f
  28. #define SIMPLIFY_CHINESE 16 q4 H5 X# d4 d3 K5 w  D# u; y
  29. #define ENGLISH 26 n8 y; [: D9 p6 q4 X
  30. int m_iLanguage = ENGLISH;4 ^  c' I2 l- g& M$ u
  31. /////////////////////////////////////////////////////////////////////////////' R; H1 h2 W0 E: D$ R" O: O
  32. // CRevAppApp5 W* [1 p9 q) m7 s

  33. $ `5 b& e, U* W: P9 @6 I* I8 t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % G/ V4 o# h$ d* [$ j2 }6 I
  35.         //{{AFX_MSG_MAP(CRevAppApp)" W- H  i: l, Z% c% _2 ~, }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 \$ F$ t6 M' C4 w% I3 f# y3 t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- x& Y+ o) l, C6 Y8 c6 t. s7 P
  38.         //}}AFX_MSG5 M3 `; v8 n9 i% X$ N* u4 \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). f; o+ F: y$ W8 T1 _
  40. END_MESSAGE_MAP()
    4 Z, w  ^/ V" E. A& F1 r
  41. : s! D" D2 }( n, r  [
  42. /////////////////////////////////////////////////////////////////////////////" D, m- a, ]: L0 H: b. t5 R
  43. // CRevAppApp construction
    7 F& J( c' \* A! I

  44. ; g# P" g+ N  p' a  M. ?" H( ~
  45. CRevAppApp::CRevAppApp()6 B) B, K8 L: \* c, U) B- Y; m
  46. {
    ; S+ x; _7 [1 r( g6 X
  47.         // TODO: add construction code here,
    - B5 F4 U# k  e# S) {# _/ v
  48.         // Place all significant initialization in InitInstance
    + \( K0 j  [5 {1 B' z
  49.   bDisplayIsBig5=FALSE;
    * `5 [! @+ l0 h
  50.   bRestartUpdater=FALSE;9 f% F% m6 u2 P8 e
  51.   bFinishUpdated=FALSE;
    $ B: k6 _: O2 Y% V* C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 V4 H. X- @4 g
  53.   InitChangeDataBig52GBKS();
    2 o0 Q  ^, w  ?9 q) [8 z. R
  54.   InitChangeDataGBKS2Big5();4 ~. l5 Y, E% ^9 w6 m- Q# d
  55.         //( y; X5 E) u: e- L
  56.         bClickRunExe = FALSE;8 W6 X' k+ U& X& L' M  ]! `
  57.         //
    6 s) I/ U& Y; |. }! P
  58. }
    8 p% Y/ o7 r$ n8 q2 i7 W
  59. $ e: {0 _9 u4 }* U
  60. CRevAppApp::~CRevAppApp()
    5 m/ ?: j2 }" e$ e
  61. {1 C4 t6 K/ K* U6 O7 H, i
  62.         // TODO: add construction code here,* `2 S: k' @7 \$ I
  63.         // Place all significant initialization in InitInstance
    , ^0 ~7 U- s+ y  e- [
  64.   EndChangeData();9 Y# S! K' T( |5 H! }5 O2 g
  65. }; z* w- }3 u9 W9 J! E. w( B  q

  66. ; Z1 z- i( v% F% M; Z: o4 B% J5 e
  67. /////////////////////////////////////////////////////////////////////////////9 r& Z* V- l& |) {
  68. // The one and only CRevAppApp object7 t; c9 R( `' D8 V' l  Z
  69. 8 E" b# w& q' p& E% K4 A" j5 h( S
  70. CRevAppApp theApp;; P6 O& u7 {8 c$ {% V( X

  71. ) Z+ j6 m: z0 H3 v& r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; I; p  W) y+ X
  73. {7 Z; h6 U+ ]+ M
  74.   int iEOF=0;* H3 [' r. K& z+ `8 v
  75.   char szTempName[MAX_PATH];2 S" ~0 x/ _7 w3 B- Y6 Z
  76.   *szFileName=0;* G$ @( P/ c$ a' d/ R" X, S
  77.   iEOF=fscanf(fp,"%s",szTempName);& c! _% y4 W# [  i; P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( |& O: Y6 x; j4 ^( m
  79.   {
    6 Z- ~* m3 O6 ^9 L) ?, T
  80.     strcpy(szFileName,&szTempName[1]);
    3 \# }& m0 h, N
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 f4 }" B3 n3 a* j' ]
  82.     {$ d' s: Q' Z+ I& _6 O3 P! U
  83.       iEOF=fscanf(fp,"%s",szTempName);3 L$ _- v7 \5 }; j# R3 Y
  84.       strcat(szFileName," ");5 }4 R( c+ h' E( |: D$ z
  85.       strcat(szFileName,szTempName);  E2 q- Z& p9 c& t2 a# ]
  86.     }) ^, t' g5 O7 {5 W+ O1 d
  87.     if(strlen(szFileName)>=1)
    8 v' t5 [8 T4 X" X- ^/ B2 q& b
  88.     {0 {; g8 R( p2 |3 `# c
  89.       szFileName[strlen(szFileName)-1]=0;& F3 d* z9 z8 f8 c8 t; Q+ N; ~
  90.     }8 ?& a, p/ Q  I/ E" o3 ~8 G
  91.   }$ I( ~, l8 p( r( J# ~. a) @, _
  92.   return szFileName;
      I- k2 e) o( y, c
  93. }1 H6 y1 D4 s( l! F+ {

  94.   z4 M1 _  C- N# t! s8 X
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 h( C  O* G% A! ^
  96. {( F1 o* d5 g! l7 j0 J% x
  97.   FILE *fp;
    2 c+ B% Y4 r5 {! |2 F4 B% s
  98.   char *key=NULL;
    7 i$ P2 A. h7 Z. _0 Q
  99.   char version[MAX_PATH];6 x2 s! \1 v# l) T: P
  100.   LPUPDATEFILE file,olds;$ ?% s' l+ E" j2 F7 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 [' ^0 q. K0 V& S8 M( k) n" A
  102. 4 d& C3 W+ y2 d7 ^+ i* b: L
  103.   UpdateList.clear();# U! C" L/ f! L) i% j( v
  104.   UpdateFile.clear();
    0 ?( t; U& P/ M( t+ a
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! }) b; W5 d8 u7 A0 j
  106.   if(!(fp=fopen(filename,"r"))) return false;7 R/ w1 ^: t2 ?: u. L+ w) G, w
  107.   fscanf(fp,"%s",version);! h' E) K7 \( o/ ]  G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 W  R/ B# k. b  h
  109.   while(fscanf(fp,"%s",version)!=EOF)! r# U8 }+ |# C  F+ j
  110.   {8 x0 _* y- O! H7 [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 L& i6 s! @  s+ I' |1 z
  112.     fscanf(fp,"%s",file->path);
    ) Z" t, J$ C- J2 t" q3 _* k
  113.     ReadFileNames(fp,file->file);
    / K$ H' b& \4 M- G0 ]4 ~1 ]; \
  114.     strcpy(file->full,".");% n" w; d1 z, J" A; n6 N! d
  115.     strcat(file->full,file->path);1 T' I# l6 n- a
  116.     strcat(file->full,file->file);
    1 i+ L+ h4 a' W+ u" y/ j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ! w  N' ?( e' x' ]! K7 i% A
  118.     {9 k6 Z7 Q6 Z$ W% Z( y& G
  119.       file->vers=(float)atof(version);0 p* k3 r; W& n3 U: `# W/ V9 U) |, t
  120.       UpdateList.push_back(file->full);6 D. o! N4 m# L; T/ W5 g6 T. K: Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 Y; ]( P  P3 A( P$ N
  122.     }* o( T3 E  t2 K, ^
  123.     else; H. r* L0 q/ S# X. i4 z: Y# z
  124.     {1 Y$ Z2 C4 X. O& `4 ]  p
  125.       olds=(*p).second;
    " |$ o$ v* L3 D% ~
  126.       if(olds->vers<(float)atof(version))6 W& M2 a  O& V; q. \/ C6 K
  127.       {4 A# K7 n! V7 L4 Z- t! d' b
  128.         olds->vers=(float)atof(version);
    4 u  a( X& Z5 [3 F
  129.       }
    & U9 m8 U1 n7 _. _" V- ~/ p$ b2 g
  130.       free(file);
    ! z3 e$ }0 G( V3 h9 q2 s
  131.     }5 E. a2 W$ ]" S( B4 B" G0 C3 c
  132.   }
    ' m9 q! r  }$ F9 I0 H$ i: m
  133.   fclose(fp);
    . [5 o/ h# _  Y8 X7 S
  134.   return true;+ O; g+ t' U% J; ~- u' u- E
  135. }
    : \8 ~! S6 K! q# j3 J8 M0 T
  136. & P3 l9 U! o" y' X! Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# m' }8 V/ q7 ]& @8 K" d
  138. {% X8 q1 Y: m7 x' H5 g, @
  139.   TCHAR  szFull[MAX_PATH];
    . a( G+ g9 {! \& S
  140.   TCHAR *token,*inter;: p* u: S" R8 V3 @5 E
  141.   *szPath=0;
    1 F" E0 q) }7 p% l( T  t
  142.   strcpy(szFull,szFullPath);' u4 \( T/ Y' O) p
  143.   token=strtok(szFull,"\\/");4 _- L  a/ R5 Q# E7 P( n
  144.   inter=token;
    ; G9 y, D4 Q! R+ D
  145.   while(token=strtok(NULL,"\\/"))' ^. ~4 U1 E3 F  L
  146.   {
    : f. B* {# w7 B4 ]0 ?5 D  h
  147.     strcat(szPath,inter);! F% e" d( n$ |* t$ Q- L: @
  148.     strcat(szPath,"\");. P8 ]1 m% i# G0 |; q
  149.     inter=token;
    ' [# O9 m0 U8 Z5 g* S
  150.   }
    ' y( X2 D7 k5 \3 S7 \, m( U
  151.   return strlen(szPath);
    7 V* @# g* g0 L! A6 Y
  152. }
    % k4 {( I, C- T  {: r4 \; `5 }+ O

  153. ! K7 A2 ~4 {) f) l$ A6 ]; a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; |( k2 u" b7 ~
  155. {
    . N! q, D: P/ [% v4 o( q3 L
  156.   DWORD attrib=GetFileAttributes(Target);
    0 D' p0 H* Q# N. O, t: @+ j
  157.   if(attrib!=-1)
    / @# B; ^! L  J! k
  158.   {  n' O: e6 w' l' q# w
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) |  j( }: }2 w, ^( O# h
  160.     {
    - H" P+ q, B& V# ~, v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) D  I# v) l+ D9 d9 m. l
  162.       SetFileAttributes(Target,attrib);$ `' e. \4 y% ~
  163.     }
    ! P5 U% p2 _3 V4 z4 ?
  164.   }
    , O7 C5 y' z0 m" G4 {: q! j6 S
  165.   CopyFile(Source,Target,Erase);
    " b+ \. B- z* G  [( B: ]2 ^# ?8 X
  166. }: q2 x$ D4 C# _7 t  Z6 }

  167. + U- a4 S1 J) Z$ v+ u1 `/ m
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 s! W% ?, |$ S
  169. {
    6 {1 ?# E' v* p+ [  v4 z* u
  170.      FILE *fp;
    2 r- \0 d2 Y2 s: o7 K9 ?
  171.      char  szBuffer[8192];/ C: E: K' r# Q# j. u/ U* M4 G1 _
  172.   va_list  argptr;
    5 ~& }; {9 l" Y) F! l! ~# k
  173. . a% T+ z1 c& D6 ]$ S% ]* T% p
  174.         va_start(argptr,message);
    " X9 d( Z8 ^1 N$ h4 n4 ?2 p5 p) A
  175.         vsprintf(szBuffer,message,argptr);+ P6 A- K1 Q6 w: ]
  176.         va_end(argptr);1 h  Q3 F: |* X9 c7 |: Q
  177.   fp=fopen(FileName,"a");/ P7 o' n) Q" m4 ~
  178.   if(fp)/ m8 H6 W- J; `( z" [+ N0 r" ?3 i# L
  179.   {0 r! E. _2 t* t, f* N- G6 ]
  180.     fprintf(fp,szBuffer);
    4 z% a; \' e8 A# U  b  z
  181.     fclose(fp);
    , _, P4 L% r( j# C# g! `* q
  182.           _flushall();# [+ ]# A$ x3 D4 T" {% e: o
  183.   }$ V. Z' l4 H* r9 _
  184. }
    # R9 ^4 h0 K! x( V2 f: L

  185. $ f3 T% {1 j, R3 ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % J- n- ?8 Y' A8 c4 M! r' W0 q
  187. {
    : L: W" t) V8 C
  188.      FILE *fp;
    ! S9 k7 \7 g  h* m
  189.     DWORD  attrib;
    / i1 A) h  n' P* r9 [9 z$ }; u
  190.   attrib=GetFileAttributes(FileName);
    ) Z& N) A$ ?1 p' \3 Y6 Q
  191.   if(attrib!=-1)# }: Y. m, y) f- e
  192.   {
    0 T" F( o; h* P- d5 v' s! O2 r" [# X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 f: O9 J8 R. m1 b4 k* T! t' o
  194.     if(!SetFileAttributes(FileName,attrib))% Y0 [5 D& d% a' b4 `$ ~( w
  195.     {
    ( c, ]0 B" s9 y& F1 M
  196.       return FALSE;
    ' |+ X9 m, o0 [; l+ k* W6 L
  197.     }
    3 u; V% a- b; f
  198.   }
    # ]' P+ |! o/ `) m# `/ |8 V
  199.   fp=fopen(FileName,"wb");, p: C  J  [" b5 w$ U1 D' o
  200.   if(fp)
    % h9 G- J- P/ J) t% S3 d3 M% f
  201.   {9 j( K- N6 {! x9 W
  202.     fclose(fp);. z7 {  q, [+ U! ?8 N, Z9 t
  203.   }
    * G' A! Y/ B! }# b5 d1 B6 ~
  204.   return TRUE;7 k9 B& |/ ^! n, R1 ~
  205. }- O  ]- J; Q2 }' g6 y
  206. " y7 P1 N* `. N& A# K5 W2 t. |
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ q" |/ A& i/ e1 ?8 E
  208. {
    % H+ B( T' u# c; e
  209.   char filename[MAX_PATH];
    / |' D2 E3 Z  {1 h
  210.   LPUPDATEFILE file,olds;
    + k* W: R5 }0 p; r. N2 I  F
  211.   std::map<int,CString>::iterator i;3 {3 F) T1 o4 D; K7 q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # B2 o3 X3 Y" J0 p
  213.   std::list<CString>::iterator l;+ {1 T3 S, y- _* L( n: U! Z" ^, b

  214. 6 q7 Q0 a. Z+ O6 t. J4 l8 V
  215.   if(bFirstUpdate)
      @* j5 M$ e1 e9 s
  216.   {
    2 d! x. V$ T) R' L3 E& p" ?
  217.     dwCurrFile=0;
    2 y) I/ P) _* J4 U
  218.     bFirstUpdate=FALSE;) W* B: B1 K) M% O4 X3 x+ j
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); Q5 Q# m) k& n, U4 Q
  220.     {$ t0 R# N  L2 ?. Z
  221.       dwTotalFiles=UpdateLocal.size();9 }4 ?9 I" ]! W. o6 w/ L3 b! m
  222.       dwDownLoaded=0;
    # n$ h( q/ \2 ]2 ~' @6 Z- q7 D
  223.       bSilentStep=FALSE;6 N- G  J: U$ U" b: Y
  224.       bCompressed=TRUE;7 E& I! l3 p% l& I3 `" {: x  N2 K
  225.       strExtLocal.Empty();7 x" |9 l) D* h- L
  226.       strFullName=(*i).second;
    : ?% _2 b; d3 u. G3 h
  227.       dwProgramState=AP_CONNECT;1 q' f. C1 w+ B
  228.       return TRUE;
    ) H7 P" A1 x2 N* C, P8 d; g
  229.     }* Z/ m; x3 b: J
  230.   }
    . t" N/ h# o2 Z2 e7 H  U% e! \
  231.   else if(bRestartUpdater==FALSE)
    & C' u8 |* ~* L* E8 L  d# B2 d
  232.   {
    ( k6 @/ K, j" f  u% q2 l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): n$ I: v" W0 M
  234.     {3 s& T1 z- I$ d
  235.       file=(*p).second;
    # w  L9 H4 t& j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' T5 W$ ?. p$ }$ e+ ^* a' K
  237.       {
    % y( O. e3 c) H1 C" Y* R
  238.         olds=(*p).second;) s- \+ E) F+ K$ Z
  239.         olds->vers=file->vers;/ u7 t9 F3 a9 _( H1 t
  240.       }& \1 n% H9 J* N1 {
  241.       else: s" K# H9 E! R4 w) j
  242.       {
    1 J8 D: S( }, B: I" ^- _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' C/ }: z: _# b0 L0 U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 ?9 ]. B. q4 T* j% h9 L5 a- c# c
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ J, K% |5 R4 ~2 R' T* R8 V
  246.       }! y, |; D7 T* \4 q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 t& ^  J+ k1 Y, U) X
  248.       sprintf(filename,"(%s)",file->file);
    4 T9 B& R  B, q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 k3 P$ v( \! r1 C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    * @/ D( h) [+ \! E; k
  251.     }$ ^2 g/ u+ B/ t# m9 F
  252.     dwCurrFile++;
    " T: G# g+ k& P) w1 B1 x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  E; h$ O" G1 m0 u5 p
  254.     {5 b$ p4 p8 X; T# y7 \8 S. K
  255.       bSilentStep=FALSE;- P3 z8 T) R0 v# U; p) g5 o* Y1 f
  256.       bCompressed=TRUE;
    + w9 e$ m: A$ O, U0 q5 m* k
  257.       strExtLocal.Empty();
    " {: J* \- t6 {* l" u
  258.       strFullName=(*i).second;
      e, s* G4 m2 G  I, F' L
  259.       dwProgramState=AP_CONNECT;9 e' l4 Q( |4 B; v6 k; w. u( K5 p
  260.       return TRUE;' W$ e) d/ D# o8 P, d" u: ]0 u/ h
  261.     }
    0 K" L, V* Q7 L9 c5 l& X# ~
  262.     if(!bRestartUpdater)
    , b: [+ ^/ m+ N, B+ n) e8 ~
  263.     {) ^9 P, V# d/ u/ V
  264.       int iCurrSize,iFileSize;
    ) r/ D& c/ ?7 ^1 n9 ^+ Z8 f
  265.       iCurrSize=0;
    9 `% u; ^1 F+ c6 ]! M* l, W
  266.       iFileSize=UpdateList2.size();( |2 E/ ^' m; e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    8 m4 N. E2 f- j& J1 g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% D' x) s2 `+ z% W) v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    7 D  d: r) r4 w( T
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * h  j5 K1 y9 j7 h$ i$ h2 M8 [+ p
  271.       Fclearf(".\\update.dat");
    1 e, ~. t# ?: @
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 @/ ^! e. m% ?8 i2 B1 i  ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# k& d% m' [- _& n$ c$ C0 {
  274.       {
    8 P" P+ V% _+ [0 }. z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . p9 L1 o0 H3 ?2 ?5 Y- n* P( E
  276.         {+ L: Q# ^2 v6 \5 x& ]
  277.           file=(*p).second;
    8 w. |+ q, |9 Q* N" L- [7 I9 z
  278.           sprintf(filename,"(%s)",file->file);
    9 m( O0 s9 w* |
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ R. P6 J8 h. q# W
  280.           iCurrSize++;
    6 s: F. E6 S$ R# a/ ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( C3 D/ L) d/ v/ ?2 I3 Y+ q
  282.         }
    3 S* o5 l1 a  \4 Y
  283.       }
    ' \2 T2 `5 ]2 g
  284.       unlink(".\\update.txt");1 `% u9 [  S. G# a7 p: v  P9 J
  285.       unlink(".\\update.tmp");
    : S" M4 Z$ o. l2 [0 Z5 H. u- h
  286.       Fclearf(".\\checkversion.dat");
      [# A: \" ?1 S2 G* O  e
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ L+ _* E; b: ]2 e/ K5 C
  288.       if(UpdateLocal.size())
    ! K) U+ @5 p) I) f2 ?$ |% b+ A
  289.       {
    7 f# m% |, {! E
  290.         UpdateLocal.clear();
    " o2 T, O1 W2 V+ l, j+ s$ Z
  291.       }
    1 `' S3 y8 r' v9 ?+ ?
  292.       if(UpdateFile3.size())# r& t) _8 P( V* z* A
  293.       {0 J% f& {( p: D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% k! F* P' k* K& X
  295.         {
    9 x  t! W) x# g1 L% L3 t2 ^' W8 P
  296.           file=(*p).second;
    : o) c9 ~; J" h6 X
  297.           free(file);
    , d6 |8 A% J7 o# W
  298.         }; k7 {2 x3 V2 k1 _5 V
  299.         UpdateFile3.clear();) l# v" E9 f7 G
  300.         UpdateList3.clear();$ l0 B, p. u5 ~1 ~: k8 @
  301.       }
    ' [% x  N1 h' f7 c7 p$ o, P
  302.       if(UpdateFile2.size())' ?+ \. V8 _# h' d  H# G
  303.       {' S- U& G1 i3 K- ~" }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , N( H7 u. ?% S/ o  j4 g
  305.         {
    6 Y9 n' y6 o( g1 j1 z* [
  306.           file=(*p).second;! F; b9 s/ p* _3 n
  307.           free(file);
    8 q* j' _% S% k2 z& c3 m  [
  308.         }
    ; L. @0 d/ h5 y: P6 a: I
  309.         UpdateFile2.clear();* `' [1 r" y3 O0 x1 N
  310.         UpdateList2.clear();0 i- t" U/ r, c& x8 m0 j
  311.       }
    . |6 D! v5 u/ {3 l" `( z
  312.       if(UpdateFile1.size())
    . }2 D/ ]* N' @
  313.       {& S$ m1 g; v. R! q" V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + O* {: i9 c: m8 \+ i
  315.         {* L+ {* k2 c8 d; r) ^
  316.           file=(*p).second;2 x2 {1 W: O- U6 m3 ~
  317.           free(file);
    $ l; J$ |1 j5 [9 K/ E" E
  318.         }/ q$ O! ^2 |0 m+ G7 v* Y
  319.         UpdateFile1.clear();
    2 |& {( H/ `% \7 i
  320.         UpdateList1.clear();0 }+ i3 y" L0 w/ q0 o, R
  321.       }; N2 U0 e1 b- ?3 S+ |5 m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; p  o% ]' u/ ^
  323.     }
    0 y& f3 Z  R# m2 o
  324.   }
    % `0 O5 V6 _/ v4 z- J1 i  c% v
  325.   return FALSE;% U: C/ t% @" r, s
  326. }" S1 @- U% k1 \8 g, R# [

  327. - ?9 q7 `- r# M( y  K
  328. void CRevAppApp::ClearAll(void)" E( d/ p; i. r3 P( i
  329. {
    " s6 B1 ]' K; ]" _
  330.   LPUPDATEFILE file;
    5 |/ }2 s$ ^0 a+ {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ \- o# F2 f' G

  332. 5 X8 `' a: }3 U+ S+ H7 v
  333.   if(UpdateLocal.size())
    , }5 Y+ _1 Z) H( B0 d
  334.   {
    ! [; s; Z- u) \7 M: _5 l( T
  335.     UpdateLocal.clear();& k" ?, m9 g, x5 \1 Q, w
  336.   }
    ' h" r) O; M6 \) G1 B
  337.   if(UpdateFile3.size())
    0 @0 y8 U+ u2 E% Q5 S4 R) E  l0 O
  338.   {4 k# v- A# Q3 m. T; Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 Q: _+ y. `  ^
  340.     {, @. Y/ i6 ?0 H0 \& D
  341.       file=(*p).second;
    $ W- C- G" t0 R1 ~2 @
  342.       free(file);) o- d7 G5 Y! c; {' X
  343.     }
    6 i8 Z8 K2 T" \" v5 N
  344.     UpdateFile3.clear();
    1 d# j5 M- o% ^5 p# e
  345.     UpdateList3.clear();
    * v+ ?8 n! {. M* `+ Y
  346.   }8 Z8 G) |8 m: Z& e- Y
  347.   if(UpdateFile2.size())- J$ d8 b" U; B& y6 _1 i" k3 z1 ^2 }
  348.   {
    ( t6 N# X5 `; F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' t0 z4 s7 S' b  D- g# l5 ?
  350.     {) w4 g. u) S$ L5 c( B" {
  351.       file=(*p).second;
    , U; ?$ x2 s' L0 x
  352.       free(file);( r' W! ]3 p' o
  353.     }
    * n9 u6 O1 K6 v8 ?  u
  354.     UpdateFile2.clear();
    , j" J% {6 r; f. E' o* \, ^
  355.     UpdateList2.clear();
    . u$ C- |: n3 j, ^" {# {3 p
  356.   }
    . ^3 T1 u' A/ `9 b0 Y
  357.   if(UpdateFile1.size())
    % [9 `1 B: Q3 i9 y" G8 h& X3 }8 E
  358.   {
    , E" ^4 U" ]6 {% a( Z4 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * m! }9 R1 }% o" A- y2 x( M
  360.     {
    5 Z8 d8 c/ x! \
  361.       file=(*p).second;2 H! b2 z" |. U1 O3 A: Z, v
  362.       free(file);
    4 \2 a" w! B6 F' j4 h& n1 a
  363.     }
    : ]: r- U* D& S8 G, I+ a# e$ D
  364.     UpdateFile1.clear();' m4 o& }3 P6 f: l5 \6 s
  365.     UpdateList1.clear();
    8 o" d# @; @  B2 s: I5 y
  366.   }
    3 z- |/ e% S" J% g. t/ Y/ v
  367. }  2 b7 J) b( V. a# K, {
  368.   5 E" ]/ P( Y3 C, Y) b. _* V
  369. BOOL CRevAppApp::CheckLocalVersion(void)$ J' t2 X1 Z4 F% S4 ^
  370. {; P; R& E  D) r
  371.   int c;
      M" x' ^3 |+ J. ?+ N0 n
  372.   LPUPDATEFILE file1,file2;
    : {9 C' e9 I. k* M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 G& S& ~- {  o+ `' ~. u9 W% A
  374.   std::list<CString>::iterator l;" a$ l# a: Q$ n; j4 \! {4 P

  375. 9 q5 r8 H) ]# m! z* z( r
  376.   UpdateLocal.clear();% E7 j! \& D( f% b8 w9 |: K) u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 P; ]; r1 M1 ~1 F0 N# |% E* Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - j/ M. I5 a1 _' B1 k, o- _, e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);, [) e4 \6 A0 Y& `0 O; O9 o/ I. J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 F4 M& }$ k" E8 V9 z
  381.   if(UpdateFile3.size())
    2 g0 G( d, b7 b1 U& W, W0 Y
  382.   {0 [+ @- q! j$ V) h( p( D3 M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 O2 ?) g% R4 [6 E) }1 F
  384.     {
    # I8 U0 L, N& ?
  385.       file2=(LPUPDATEFILE)(*i).second;
      a! B1 w7 q) l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  e0 T3 C: z+ C1 c' O% U  D' u: q7 ?* `
  387.       {: h' E5 v* B' S, r  v$ k% R
  388.         file1=(LPUPDATEFILE)(*p).second;- b7 }& `- Q$ H$ h' [2 S# l$ p2 k$ g
  389.         file1->vers=file2->vers;6 I7 u; j0 `% r& v! E: V) ]) t
  390.       }+ w( o: K1 D5 R" q4 [, s6 g5 w7 I
  391.       else
    3 e  y, V& ~$ P9 H0 h
  392.       {5 j1 q8 R, X' H) f; _* P9 b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 e1 v5 @% B+ ]5 w2 r/ C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; a1 }# H) |4 }1 @* R+ Q* O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + R0 r7 a, i6 r- r% p
  396.       }
    / \, i! D1 l* u5 R
  397.     }
    3 j$ p! E% X& A/ `
  398.   }
    3 [7 n- v( ]: p) Y" H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . P4 M& Y, ]# ~# v5 h- C
  400.   {) H4 i+ m+ G, m) T6 P( ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 q# H4 y6 G. W3 o# o3 l
  402.     {
    5 l) `, j3 K3 C# \$ ?8 Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    . {2 Z' b; I) C$ o7 x0 Y+ c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 C  O$ O' x, {6 a1 ]
  405.       {) k* }; F0 x& C: N( w  |
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 O! ^% T3 ]% e: M% c3 y, D4 Z4 P) [9 P
  407.         if(file1->vers!=file2->vers)
    - b8 G$ U! k4 G# `0 V
  408.         {5 C" [7 a6 T- I2 U4 R! O. _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 n# r4 ?; W) \2 ~# @! Y6 E+ b8 n
  410.           c++;& K8 Q8 t( m& _
  411.         }
    4 F8 w( ]# Z( o  J8 B) s( u' J
  412.       }
    0 D8 g" E, ^' A5 a
  413.       else" f% L9 P5 N0 ^8 s  J4 C7 X
  414.       {: B3 _9 T# d* |& X: @! Y& k5 H: B
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " q0 {) ~2 n5 l+ C( I0 y
  416.         c++;
    1 O" w. a" y% h8 f8 j
  417.       }1 o1 m: b  R( z* o5 @6 V- n
  418.     }/ O5 }1 N- Q6 I
  419.   }, g5 i) f$ N: Z! E: o9 G/ ^& o; v
  420.   unlink(".\\DownLoad\\update.txt");+ I% n; u2 l, x/ [5 j4 Z
  421.   if(UpdateLocal.size()) return TRUE;2 k2 k0 D  L0 i- B5 J" [# e
  422.   else                   return FALSE;
    5 s  H3 L# N3 H
  423. }" j; w, j4 m! a" u
  424. : C4 @! C% g$ K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! [$ u/ L5 {: a3 f  Y3 q, N8 P/ e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # }9 ^' @# U1 K1 B+ ]

  427. 1 Y$ I" a  C6 l! a

  428. ! c" u$ `9 @# |) A( n; G+ r5 o! w& ]1 R

  429. 0 Q5 F2 b* v# i* |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / Q6 |+ w: j9 l
  431. {
    1 o0 p; _2 w- X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. l- f( I0 g" x* j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# Y, _( l2 G2 F
  434.   {7 a; D7 n: x' z8 ^" E2 u
  435.     char szLanguage[50];  |, {0 c1 {7 h5 W9 k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ N( C, P2 ]: c7 Y  Y" I1 I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! s. e5 ~% U( d0 i( M5 p: G
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . `- C2 U- f4 @9 m
  439.     else                                   m_iLanguage=ENGLISH;
    % `. r1 h, T* ]9 W8 l4 w3 s$ U2 O3 z
  440.     char szRegister[100];
    6 W4 s0 |0 d' ]- ?  {, O8 u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" w) N. \, O* K
  442.     strRegsName=szRegister;
    1 s) b; Z9 a; W  d  B
  443.     char szPatchURL[100];; S( t( m) g$ o# V, [- K2 Z  g- ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' \' z7 I; P. M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 Z% I4 r& A7 J+ s3 b, Y
  446.   }" `$ g% q4 K- ^, b( f7 M
  447.   else
    ) D5 W& N8 Z8 c4 ~9 f. g
  448.   {
    & P6 J; Y/ @1 M+ C6 L' W, Y  \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: m( y1 P8 T2 l6 J
  450.     strRegsName=DEFAULT_REG_URL;+ l* f7 `  ]; |
  451.   }
    8 R. j1 l  g) ~' E7 N; K( S
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 X5 P# T& Z- E
  453.   {
    + B& \& c/ `4 Q; s/ y2 n
  454.     char szIP[50];2 v. a2 v6 N" _& ^% ^8 @# m
  455.     char szDIR[300];; y- ^: `8 C5 \4 `8 R5 C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), t& D: U: B6 D) d6 [- O
  457.     {( |7 g9 m4 o+ j$ p6 t& s$ f# G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " {+ |  j: i( _3 Q' Q9 f9 E! d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' M0 d8 A& ^1 @" k) A7 c& S- _+ y
  460.       strHostName=szIP;
    + {  ?7 z: w/ s" a
  461.       strHostPath.Format("/%s",szDIR);6 f9 ^5 T: P7 \! Q! Y; }
  462.     }
    # }: h9 W# E# T: M  ]  y1 t9 `
  463.     else
    3 Z' t0 T" H8 e- W
  464.     {: W- _% r7 n4 A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( o5 }: V& c8 @7 i5 Y, F
  466.       {7 G" v; v% B5 S+ U
  467.         char szLanguage[50];& h" A% c- k' E7 o" x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , {: g& a' }3 x, \+ X; m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" k# S- _: \; O. n/ j7 W/ B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, l; S# f. G& E" I
  471.         else                                   m_iLanguage=ENGLISH;
    ; w* b% [$ s3 |# g
  472.         char szRegister[100];
    ( Q: s( i3 Z& l) w
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( p$ a) H/ M+ P
  474.         strRegsName=szRegister;
    - R- J2 V3 }9 G2 E  I8 u6 y$ p9 c/ W
  475.         char szPatchURL[100];
    4 @0 A) R4 O6 F1 p" J
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) s! D( b( F5 E: c. J. ~1 G5 k# W# R, z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . v# w8 y% I3 `3 @  l" P
  478.       }/ k# `  @( ~! d- o. k& o2 O
  479.       else
    * S9 a* w: d% ~; U1 L$ g! B
  480.       {
    " ?) Q# [$ Z4 I& R; E( R6 G8 L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / S$ o( [+ F8 z2 m, E
  482.         strRegsName=DEFAULT_REG_URL;. h# L, }0 z! c7 _/ l* ?
  483.       }$ c/ E& r1 [/ c. C* Y: i$ }! E. _
  484.     }2 T1 @( M9 @- d: T+ N
  485.   }
    6 ~( [/ e) i; j: J$ ]$ l$ c8 i% i
  486.   return true;
    # {5 d; D2 r; L  ~! Q
  487. }  W- x: c2 P6 U4 r7 I/ d
  488. 4 [, q  b- f! d* j4 T
  489. #include ".\ZLib\unzip.h"
    , y& L$ q* _: D7 H! {# ~* v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' N8 d  t+ X7 E6 `3 m
  491. /////////////////////////////////////////////////////////////////////////////
    ! E7 @0 ?% d( B0 R% C
  492. // CRevAppApp initialization' f0 S1 C! C9 u

  493. & ]. N9 |! Z( \# ^9 D9 o
  494. BOOL CRevAppApp::InitInstance()  Y" \4 I1 a! V; p
  495. {* p6 j$ Z6 I" ^3 ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - }3 f) I! y0 r* t
  497. $ C% A: O, F4 x( U% n7 t8 p& O* q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! X2 o# X7 n! `3 I& B1 x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : O% `7 E+ ?& r) r) c" s; k- |
  500.   {3 v, }9 P+ ~9 n1 P' T* z6 ~. z# N
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 i: c8 h  m& J3 I6 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 g7 d0 E: r1 ~( _9 O: W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % c- d! R" r7 g, `2 Z
  504.     {
    4 h5 N% x/ f3 e( [9 R: _  D4 l) n
  505.       strcpy(szPath,szPathTarget);
      V/ r# ^% g+ K5 ]& x
  506.       SetCurrentDirectory(szPath);
    # ~; u& E7 R1 `# \
  507.     }' ?. d: s2 E9 D1 [7 x
  508.   }5 w& M) @  X/ D6 C8 d. ]9 q! X& l7 a- q
  509. #ifdef _DEBUG
    & J  d3 @+ P( b$ ]) u8 u( @
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) a0 \' p" m- \1 b1 n0 v/ T
  511. #else5 k0 `* Y8 ~& x& V1 W3 t1 z: Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& ^( f. R, d3 U, I9 i
  513. #endif( g5 b& h1 E) j
  514.   {
    $ C2 S' x( M: d( d* o  O! F7 U
  515.     char tempFileName[MAX_PATH];8 D# i" Y5 ?8 I8 U
  516.     strcpy(tempFileName,szPathSource);
    3 a$ h* ?- ~. F; d* E) Y: k, }
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / G5 J8 H! r# l2 @! u0 e2 O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 u& f3 o; K+ x$ `7 @0 O% r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 I7 W8 n( ^& y: i  V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 M+ ~3 ?5 f  C) [+ z5 U
  521.     return TRUE;
    % Z; K7 s7 K# E, U
  522.   }( M$ @% W; {; g8 T
  523.   // Nuke 0118: Delete run.exe2 b2 j. x1 v( ]$ i
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# |; ], j- x( K' w9 ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( ?: G8 U1 m: v9 @$ E3 ]  a: z2 z% F
  526.   if(!ReadCfgFile("Config.ini"))
      p$ E) n, ^3 d5 f* D- B: `. n
  527.   {
    , i7 c% s* ~1 O9 Q7 C7 o+ i* j. T2 q1 z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + U# z% t6 r: B8 r) |
  529.     return TRUE;
    5 D0 l! M' f4 u- [! W9 ~1 Z
  530.   }4 b  y; H. `) _2 i; h2 w3 W
  531.   HANDLE mutex;/ n* H. |0 l, {4 \9 w1 `$ H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). x# P# Z  u5 R: Z$ m; O' |9 c
  533.   {
    & ~4 H) Q, z4 w/ H. X' m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): l  ]2 Q* l) ~+ h, e
  535.     {
    ) t0 W& @! P9 F% s
  536.       CloseHandle(mutex);5 f5 G) E1 M) i7 e3 t$ k8 W8 ]1 u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* B0 `/ g! @7 v, |# |
  538.       return TRUE;* G+ f- T# y; c
  539.     }' V) K+ z6 @  }) ~, Y
  540.   }  
    $ b0 |% f5 w5 I1 x. q
  541.   CloseHandle(mutex);
      V* X& j& J8 i& F8 E. S
  542. , F& ?; k5 C( i4 p7 I% b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 r$ P/ `* C4 Z, W9 c' t
  544. ; Y- z& U7 H) ]& k( I
  545.         AfxEnableControlContainer();. D" V& m' l. s9 @% U- x

  546. 6 }" K4 U  B1 ^2 i8 Z
  547.   bCanUpdate=FALSE;5 a% b$ r  ^: k$ @2 w9 b0 a7 W0 K1 Y
  548.   dwStartUpSteps=1;: }: Z' X7 D! \3 Z" e- i+ ~
  549.   dwProgramState=AP_NOTHING;1 K0 v4 L: f- h6 p
  550. ( S2 x) m" G+ N9 n/ O7 N
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, Y' M' D. I9 ^5 Q

  552. # j9 c9 Z. p. G/ J9 n
  553.         // Standard initialization4 {( L0 ^0 J8 m3 x" L! n7 J- N
  554.         // If you are not using these features and wish to reduce the size
    7 ~( i. }7 q  A- a4 x8 Q) ^5 u; O
  555.         //  of your final executable, you should remove from the following9 ?0 p% B6 m, K
  556.         //  the specific initialization routines you do not need.
    " V! H1 V& L  Y2 F4 K

  557.   r4 c/ h' E: _; N' @5 C
  558. #ifdef _AFXDLL4 E! y/ |  o2 o$ ~! |9 S7 w
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 r) p. t# b$ r2 v) c% u
  560. #else4 U$ x: c9 m2 @9 a" Q6 R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % [# k1 H9 c( w4 R8 m+ y7 ?, q
  562. #endif
    . e: ?% T! ?) ?' c% d0 |- H
  563. 2 L% y" N6 R  `6 _3 |
  564.   dlg=new CRevAppDlg;/ L; k+ C- E+ @. n2 X* J5 a* M
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 F! a& Z; Q* l5 F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 l  b8 I. |0 X$ w( g4 @5 @5 a
  567.   m_pMainWnd=dlg;
    : G* N1 L* |( }3 w' F# v
  568. " s$ x9 k0 ?% O; S; Y- \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + |2 s* B- B. ?$ X2 J  `

  570. / ^% p- g! H7 {. G# ~
  571. //  GdiplusStartupInput gdiplusStartupInput;) Z4 S2 K: b( \' J% Q
  572. //  ULONG_PTR gdiplusToken;$ ^7 E+ Z4 Z' A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 x# A7 B( |' D, h' n

  574. : O  Q& N, U$ a  R! u
  575. //        CRevAppDlg dlg;3 u- p+ M4 F% H2 ~
  576. //        int nResponse = dlg.DoModal();
    ' _. b, z! e" O9 i  J- @
  577. //        if (nResponse == IDOK)
    ) p. O% \/ Z) D% p" ~$ U3 y0 I
  578. //        {
    $ |# P( v8 k& q6 J. U" p
  579. //                // TODO: Place code here to handle when the dialog is  \2 d" F, l6 o% M0 L+ n
  580. //                //  dismissed with OK
    * h5 o0 v3 y& h0 A7 P% F# d4 y2 t  R
  581. //        }& S; C2 g4 C& g  L, h4 m5 D2 P
  582. //        else if (nResponse == IDCANCEL)
    , D* L6 N' n* j* M) B2 H
  583. //        {
    6 V+ j6 P$ ]' J' C- A5 X9 O
  584. //                // TODO: Place code here to handle when the dialog is1 t0 f; e" D+ H9 S: ]1 b
  585. //                //  dismissed with Cancel  K# K, o, E* ~1 J% B
  586. //        }
    ; a7 h0 @" d' N: l
  587. 1 B: h0 b! o4 m; d9 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the- W& {5 H3 N+ s- v4 Q- b
  589.         //  application, rather than start the application's message pump.
    / r1 q% o6 \' e+ ]
  590.         return TRUE;
    & N7 I$ D. A) B3 r* w# m
  591. }0 G: w9 [+ ~$ G! n# T1 H
  592. & [$ ?5 ?' f$ E; @# B; `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & t( v$ g9 B/ I9 i7 I
  594. {
    2 X) ]+ Y; P0 C
  595.   int i;( j/ N/ S0 E1 @8 t  q
  596.   char *szRet;
    6 R4 f, h& p+ y* e' N

  597. % N  a7 [8 B+ w% H2 m0 u% d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 k1 O' N$ S9 q+ B- F& c5 e* G
  599.   if(sztoken)$ c8 E, ?  H9 m
  600.   {
    / S( E7 [3 L3 b! x; F* L1 O
  601.     szRet=&sztoken[itoken];
    " q6 X% T: `* s
  602.     while(sztoken[itoken])
    . g# _0 \, |8 P8 N# |/ }$ S, Q
  603.     {  s7 R1 F/ D0 t' R8 b* @
  604.       for(i=0;i<(int)strlen(token);i++)
    ; y0 _& S' C" T/ k, D
  605.       {
    % D, S' n- n9 c! o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( r$ G2 F0 o5 F( K
  607.         {
    - u, [7 J( Y# ^- U7 {% M
  608.           sztoken[itoken++]=0;3 V" \0 i* d: ^( |
  609.           sztoken[itoken++]=0;$ \# D% ?# p' I
  610.           return szRet;
    # w$ c/ k# j4 l' u6 r) _
  611.         }
    7 t+ d) N+ O( ~6 I9 U& ~
  612.       }
    9 d" E' d" A, ]! G1 a
  613.       itoken++;
    : S4 Q! ?! e7 M
  614.     }. k" `* ?0 i6 v+ j- V( n# c
  615.   }' K8 w9 I0 L5 `" b& L# Z# ?
  616.   return NULL;
    ) J: ?$ R5 _9 p# o9 @
  617. }, [& n2 J$ v2 T% Z3 U( t
  618. $ f$ c/ e* q9 ?
  619. void ProcessProc(long Total,long Current)
    - `; M9 s- m  N3 H2 I! ]5 d. [8 b4 t
  620. {
    ' o' I3 }; ?* L7 H- o1 |2 X9 r+ M
  621.         MSG msg;) i6 Z9 p6 V% t, s: F' j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " e" p% l% G. E8 Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    : R( r3 }2 [3 \, `5 d3 u9 [: a
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 \) H: m3 P+ s
  625.         {
    - ]. V# p& _% B8 r
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % J! J; Y+ _5 L- ?' L) {+ R
  627.                 {
    3 m, Z2 W0 T; {" |# I  Y
  628.                         return;3 w, K3 Q' u2 A" b" d5 Q. ?
  629.                 }6 J) e" B; L* ^0 G1 K
  630.                 TranslateMessage(&msg);
    & B6 v. n. m' T2 K- O5 C- K; a
  631.                 DispatchMessage(&msg);# n! T( |, w8 b6 E! x
  632.         }        3 A( [" h/ A3 F4 p
  633. }
    3 w3 d3 M3 n- H, H3 Y/ Q& _" j

  634. ' R' {7 n- Q8 R# K6 ?7 S9 ?
  635. BOOL bFirstChar=TRUE;
    ( i$ g2 J9 X# g& g

  636. 8 T5 e( j/ O: o# Z! A
  637. BOOL CRevAppApp::OnIdle(LONG lCount). E- a) P! G) C0 _( O' D- J
  638. {: r7 X3 k' a; t  C4 p* U2 {% O* l& ]( x
  639.         // TODO: Add your specialized code here and/or call the base class7 ^/ V6 R: W' K, V8 Z
  640.   switch(dwProgramState)
    ; ?' u* y5 L3 p% l* J: f  `
  641.   {/ H) S) h3 i+ U+ a, L
  642.   case AP_NOTHING:
    $ m! n6 E: t* N. Z& p/ b3 @1 [
  643.     switch(dwStartUpSteps)
    * R0 M. K6 d% g& X* y  f6 y6 |. Y
  644.     {
    # n  F0 Q' H; F
  645.     case 1:8 a* s  ^7 K2 c# ]+ h
  646.       {
    ; R3 j3 u8 ~1 C2 B  m+ ~4 O
  647.         int i;  M1 i% d, \% v9 Z8 w8 G! i
  648.         CDC *pCDC=dlg->GetDC();
    * ^$ y4 S3 ]! t4 c, Y
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; d8 A  E5 ]; P7 z: u
  650. //        Graphics graphics(hdcwnd);
    - ~6 i" B2 u2 K  }6 Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 }5 K4 Q( B6 Q. h) F% H$ \4 c6 }5 K$ R
  652. //        INT iWidth=bitmap.GetWidth();
    9 Z% K! V( g. E9 S5 q) U
  653. //        INT iHeight=bitmap.GetHeight();
    # f) {' g: E- @
  654. //        Color color,colorTemp;
    6 G- r3 N% C' ?9 K! O* b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" g- B) L5 Y$ O! ?* E/ ?/ M
  656. //        {
    6 K" I$ Z( V+ p5 Z) Q$ \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 q  v, p' {4 f
  658. //          {
    0 D. F, Y  w4 R* n/ h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( {6 F, K% z8 g3 J& b- _
  660. //            colorTemp.SetValue(color.MakeARGB($ g& T1 T7 p- ]* S( P! |
  661. //              (BYTE)(255*iColumn/iWidth),
    ! s& A1 Y' y% G$ |8 j: B5 ?* x
  662. //              color.GetRed(),3 Z* E: ~" g! p. I* @
  663. //              color.GetGreen(),* W4 E& u4 [$ a
  664. //              color.GetBlue()));
    4 {3 z" D0 x) T3 ]3 f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 F; f: j, r  {$ w
  666. //          }
    " e% h$ G5 U: i) B: K) f% a
  667. //        }
    ) v+ s7 e1 z- s+ k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # F# J9 b; w+ q# T3 N7 G: J; r' D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % H0 e! ?- e1 l; c3 K% }% U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# F$ O3 A! s) e# y1 k5 @- |" o/ b" V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- i! _* l- j$ b+ Y" j* `% F* q
  672.         for(i=0;i<240;i+=8)
    7 B! s$ W$ X2 f4 p- K! O3 }
  673.         {5 w* I, f1 z2 S: W# K5 T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . b8 Q4 q! b( `5 c- A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & R4 P/ G+ n, L
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! m  C- N+ c  ~7 V
  677.           Sleep(33);
    ( s( u- M& Z7 P+ \7 C
  678.         }
    8 M6 s. b! U% t% c, j  X# ^6 Y
  679.         Sleep(1000);
    ! z5 H& e/ R% T6 a
  680.         for(i=240;i>0;i-=8)8 k& P  q3 {( r/ A
  681.         {: U# S! Y8 F- Z9 d
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      \, i+ C) R+ r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* P7 |. N( }1 J' K1 @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 Z& c. G: N1 [3 S. y, v/ Z' q
  685.           Sleep(33);
    1 Q8 Y8 Y# U' R, E) j# ^
  686.         }
      T: n: Z* ?3 q1 y7 G# g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; H/ j/ D, z) Q3 y% v4 s3 Y
  688.         dlg->ReleaseDC(pCDC);9 Z# h8 ?% i( T% o
  689.         DeleteDC(hdctar);
    " Z: V! b% S. d" B  L5 c5 s" B
  690.         DeleteDC(hdcsrc);2 N% ?- C1 k  F' T- h! b6 ^
  691.         DeleteDC(hdcorg);
    ) I& x2 @$ @& ]
  692.       }' |" x" T. n/ v" {1 R( h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 S+ h: y; {7 G/ ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * b  p4 \  a- g) D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 l& Q/ t! v/ c8 t# p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( G  t* ]' z# y  ~' {
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; R4 F. t& j& V' c
  698.       if(!Dn.Connected())- c5 q3 n: Z( L( A6 v3 J
  699.       {
    * B$ p" M5 P) a) G" l) n
  700.         dwTotalFiles=1;1 ]$ K) d4 i4 s+ l. B
  701.         dwDownLoaded=0;& ?: A2 \) J4 `
  702.         bSilentStep=TRUE;) m2 s! s4 `6 y/ B
  703.         bCompressed=FALSE;
    * p/ w1 |; _4 l1 t- i
  704.         strExtLocal.Empty();
    ) s1 h4 X. W6 z  D
  705.         strFullName="readme.txt";
    3 x; O$ X$ O' t8 s
  706.         dwProgramState=AP_CONNECT;9 I0 o1 D' ]9 ~
  707.       }7 K2 v/ B$ @; n/ t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; c9 Z) S! l7 e
  709.       dwStartUpSteps=2;. p+ f7 Q9 I1 i8 D
  710.       break;
    - s- t. ~- O. @! l" b" w" h
  711.     case 2:7 Z- J* o4 E1 w! @9 r0 Q
  712.       {! [6 h$ d4 _! b" f' ]/ N5 l1 s
  713.         int iEOF;/ l! W% O% }  V# `
  714.         FILE *fp;
    ) x8 G  S. ^, a. C5 a* f  M, O
  715.         char szString[512];0 z6 T+ b. L4 q  T' v" L! ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* ?5 Z" q+ P% P( k: |3 `" [
  717.         if(fp)- l- C$ y! B# n2 F
  718.         {
    # D- B) X* T4 {% A  P4 p
  719.           do
    : e2 v* B& A4 Y( P0 U, @
  720.           {
    4 U( q" S: r: y$ J  P
  721.             iEOF=fscanf(fp,"%s",szString);
    5 P/ s* ^6 b6 w& e
  722.             if(strlen(szString))
    ' _' I# R* @/ k7 C
  723.             {
    # d( ~! H6 c3 p& Q: @  P, g8 }
  724.               if(bFirstChar)( r0 z! j$ o4 i' A! p/ `
  725.               {
    - _1 Q6 a5 F7 V& P
  726.                 bFirstChar=FALSE;$ y$ z4 g5 \$ o  s7 Q5 R9 ~3 E
  727.                 bConnectIsBig5=FALSE;( o- V* s& R2 P0 D% n, E; F
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 Y7 @: C! I9 ]  C1 J  C* e! g
  729.               }
    - `$ G  u2 |! z. y+ f# S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      e4 h1 l! F7 i% w( T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( c3 S3 a! K) n
  732.               dlg->m_ListText.AddString(szString);
    . c8 I7 c3 ^* O( E$ f- x! A; R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 u7 p. D! S$ S& b! t+ g
  734.               *szString=0;6 B! d- u; I& V
  735.             }! P  T& l1 a/ J3 Z
  736.           } while(iEOF!=EOF);
    0 i/ P) B  }2 q; Z+ q* k" G! w, f
  737.           fclose(fp);+ l/ _) a5 v' N* l( [8 I; T
  738.           unlink(".\\DownLoad\\readme.txt");+ }$ o. Q5 x. H0 Y
  739.           dwStartUpSteps=3;
    ; B1 _, j0 d; b9 i7 `: P' Y
  740.         }- [) l  x5 T1 w
  741.       }
    4 q7 u) v3 I" Z" `2 i7 [
  742.       break;
    3 b1 ^4 `4 }% v" p9 }/ O: S
  743.     case 3:7 a9 G- j% z1 b& N
  744.       if(!Dn.Connected())  Q+ w2 V1 ?1 F2 W+ F8 Y' f9 _$ d/ U
  745.       {5 t% k; o4 V3 E' o2 O! g' J) ?6 P: Y5 t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      N! C) y5 D* }& ^8 @9 J
  747.         dwTotalFiles=1;
    ' n" @) r/ R+ ]4 ~9 [* \
  748.         dwDownLoaded=0;' V  r$ z" Q$ C9 U- K' |
  749.         bSilentStep=TRUE;  ]1 V9 l# x9 t( W
  750.         bCompressed=FALSE;& c7 C" Z: o3 Q' W7 g) @
  751.         strExtLocal.Empty();% u  k0 k- U. q2 P. H5 A
  752.         strFullName="checkversion.txt";
    3 Y% L: c$ L) G
  753.         dwProgramState=AP_CONNECT;
    - }+ S2 s. _5 O& T( |* Z
  754.       }
    0 y! W4 @' {3 i8 H  P
  755.       dwStartUpSteps=4;
    / u6 ]3 @' ~4 L, u0 l* ]
  756.       break;
    6 _, x1 U& O8 `  p, o0 d# k
  757.     case 4:; n; ], p* C0 w+ p! d( f; _, ]
  758.       {" ]% Y8 R6 U9 L- |0 I# L; z
  759.         FILE *fp;- j5 @( Y6 v+ |
  760.         char szString1[128];
    1 v, ^; n1 s+ d, \, u' p$ z. \: L
  761.         char szString2[128];: l4 n  M; C. a* ~% K  L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & P) J& @0 D% ^2 R, v$ q0 i' k2 G
  763.         if(fp)! [) H4 o7 b+ W
  764.         {* `" c& G% b0 j
  765.           fscanf(fp,"%s",szString1);' h- t5 E# l3 J7 ^% y
  766.           fclose(fp);
    7 x+ G5 f7 ~9 J( J9 i) o9 z
  767.           fCheckVersion=atof(szString1);2 e; w6 B" Y9 a
  768.           fp=fopen(".\\checkversion.dat","r");
    1 F  F8 O+ C5 @( G6 i) F
  769.           if(fp)) Y6 N) x7 p' Z' @
  770.           {" O- `$ Z6 ?  t9 b' X5 ?
  771.             fscanf(fp,"%s",szString2);
    . j( j) p& s3 ~% K
  772.             fclose(fp);
    , A$ ~4 R8 ^1 Q7 f
  773.             if(atof(szString1)!=atof(szString2))$ ?; \3 J* d5 R
  774.             {
    ( O6 m7 e+ [7 e2 a6 x& P
  775.               if(!Dn.Connected())' M; Z7 q" p5 Y$ d- z
  776.               {
    ( O' \( e' I/ m3 b' x9 Q) O; G
  777.                 bFirstUpdate=TRUE;# t+ F2 `! `/ C: c- U7 Z
  778.                 dwTotalFiles=1;
    8 {" v( b& Y8 w; }/ P
  779.                 dwDownLoaded=0;
    ) a1 N7 U# R9 Q* }. @
  780.                 bSilentStep=FALSE;
    7 g. }; h0 H& p1 J* b
  781.                 bCompressed=TRUE;$ ]  v: M% D7 a" {, s1 \; a( N
  782.                 strExtLocal=".\\DownLoad\";
      \5 \! @8 d1 z/ x5 ^
  783.                 strFullName="update.txt";# e! n2 L* n" R& X" M+ _. V) b0 J
  784.                 dwProgramState=AP_CONNECT;
    + i9 `, N; X4 X) i! ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# ^& T; y0 ]5 _# a9 l1 G. q- i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , {' ]; s1 o; D& S; }. Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 V& M0 g- g4 ^

  788. 6 L& g. J; D, [/ J; g* t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( _9 T) _8 P; w  T; B
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 f9 F* p* F8 V6 p) L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 m( u! h6 b' r5 P9 j
  792.                 {4 e1 A% y: o) q; @9 }  u* K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  Y; C4 l# c; B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. @+ ~; h' B# C- ~4 w- H3 g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; I$ f7 h" d% x% c- u$ Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 u  M/ k2 U% N( @* k; c

  797. 9 |1 X9 h; s5 H& e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 e0 _# N2 |1 w  W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# J6 Y4 u; |' o. w+ K' f6 g# A8 ?3 e
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' T- o: `7 a5 W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ?" L( Z8 e- j$ G; Q
  802.                 }
    $ u# F  {- h1 S/ Y6 V# q/ b
  803.                 dwStartUpSteps=5;
    " x+ Q( N+ \& J, M9 S  h7 i! a
  804.               }# v8 s5 v$ d6 G+ ~& j
  805.             }
    2 o' C0 p6 q4 @5 R' O" f$ n0 v  |
  806.             else/ j" I" C6 {" ^4 q! T
  807.             {" e' }, L% u) ]: L, `/ {4 a1 |2 E
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; R+ n) \5 J% k& u$ L. y. F
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 ]7 d$ X* v9 o0 \) o
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & v3 u" W- o. p- A+ L* K/ S6 n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & r3 _0 C8 I2 H
  812. / s1 W8 T" o+ U8 Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' e- e' Z5 `; B2 _
  814.               dwStartUpSteps=99;6 v' Z5 y; i# i9 ]" H+ W  l6 C" U
  815.               bFinishUpdated=TRUE;
      i4 E0 `9 ?- S5 a
  816.               bCanUpdate=TRUE;
    7 N0 O) F7 H/ y8 G3 x
  817.             }
    $ J$ r) c7 ^0 ~9 [  P* x8 `8 s
  818.           }# P5 o; `" V# f, H
  819.           else0 F1 c  n' m$ S% H0 |& @0 Z5 J
  820.           {7 C  K% n! J( c: Z7 p) V# A$ y) I
  821.             if(!Dn.Connected())
    0 d' ]: B% b2 R! W1 i
  822.             {6 m9 R4 k3 h5 l* v3 l$ D5 p" c( g  Y2 b
  823.               bFirstUpdate=TRUE;% m& Q/ p& p7 P: C. s3 o
  824.               dwTotalFiles=1;
    4 h- \, O4 x+ j8 _' d# A2 c9 w8 c
  825.               dwDownLoaded=0;0 }: O* ]0 B! K% k
  826.               bSilentStep=FALSE;+ p* M: ?! N2 y, G! u: w9 E: D+ C) V$ N
  827.               bCompressed=TRUE;% O( Y' q8 i2 O( ^6 q5 o( G
  828.               strExtLocal=".\\DownLoad\";
    % W2 h3 d+ j* I
  829.               strFullName="update.txt";! L# M, E! M! P. d' F, h
  830.               dwProgramState=AP_CONNECT;: u+ _2 A/ E7 [: R2 d+ m# |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) O( g2 \& K4 I8 [+ v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - b' Q6 o) f. c( ~! G$ c0 m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( l* M5 h4 c$ R0 ?% i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  r7 B7 A% v  b% P3 `; E8 R. d  w8 h
  835.               unlink(".\\DownLoad\\checkversion.txt");2 l  c; L2 k) |( |; o. S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    / ^4 n. p& e7 M& x8 H4 C
  837.               {
    5 Z5 h- {- r. O0 D% x0 n. O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # U) A& m& u0 ]( d* s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ y0 s) d% O, c3 s5 i( @# l7 O4 x" o
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 K6 F* H4 I  c) @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 m! ~1 R4 O2 K3 _! C5 P
  842.                
    7 k, b- n( E' N& [. X- B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: |1 `* R6 e; v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) ^: y. }; \' @4 `* Q# d/ N3 h/ v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: b  o) J$ l0 Y: {6 X) Q! w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) I3 l5 J, g% }% z
  847.               }7 K& v5 q4 D8 \7 f! ?0 Y7 z
  848.               dwStartUpSteps=5;
    5 w) |% o/ n$ t  m* i: X
  849.             }
    5 Y% w: |% t+ u; B3 Z0 \
  850.           }9 d% o/ k7 M8 P3 |/ n5 o' i0 B
  851.         }: |* V6 T, c' N- u8 |
  852.         else
    6 U0 h) w+ K6 {1 d7 X
  853.         {
    4 ?% [7 v5 D8 U9 B6 y5 Y% R* Z  _+ K
  854.           dwStartUpSteps=3;
      j  v! \& y  {5 ?3 |: @4 _
  855.         }. N1 _* z2 ~1 S  n
  856.       }* U. i3 {0 ]" q4 o' u. Y
  857.       break;- l" P; O! R! @  \( d
  858.     case 5:
    ; k: U( V) [+ B* o
  859.       {
    # w+ q5 z% \# L! L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 @( h, O% o1 K: Z. Y
  861.         {6 `' |, m% W/ o4 ]' N- X, R- l$ Z
  862.           int opt_overwrite=1;
    9 U* F- a$ M( v/ K4 x4 F' L
  863.           int opt_do_extract_withoutpath=0;1 A' p& a' y: u/ P1 ~% Z  {
  864.           unzFile uf=NULL;0 Z& c9 G2 ]; D# V, g

  865. 4 }  p3 w; D$ }0 n
  866.           uf=unzOpen("Wsa.zip");8 q% }0 o; H) U* I
  867.           if(uf)% ?  F2 m) r0 R4 Y7 j
  868.           {4 d! R& p/ L' e& ~% q. T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
      ^5 J2 A; O- \, V5 l. M7 {3 n; O8 I
  870.             unzClose(uf);' J! \- }# T4 I. v9 u+ `
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ N5 I- q- i' s3 B( v
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. T# h- g# A  B& W+ s
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; l8 P9 V+ _! S( ]6 f. A: ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + S' a1 W) a" a
  875.           }
    . x) w3 q+ W2 ]6 C) X
  876.           DeleteFile("Wsa.zip" );9 W0 N  k* W6 Y! v9 H
  877.         }2 o# t/ L- [3 |# a

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

, }1 p$ p; y7 o, ~- {* x+ |% I  _9 r& S

評分

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