/************************************************************************************
*
* Copyright ( C ) 2002 - 2003 SCADA Control Technology Co . , Ltd . All rights reserved .
*
* $ Source : / opt / CVS_ROOT_PGC_EX2000 / commserver / windows / widgets / tcphost . cpp , v $
*
* $ Author : zhuzhenhua $
*
* $ Date : 2006 / 08 / 07 03 : 16 : 49 $
*
* $ Revision : 1.3 $
*
* $ State : Exp $
*
* $ Name : $
*
* $ Locker : $
*
* $ Log : tcphost . cpp , v $
* Revision 1.3 2006 / 08 / 07 03 : 16 : 49 zhuzhenhua
* no message
*
* Revision 1.2 2006 / 07 / 31 07 : 18 : 24 huyizhong
* no message
*
* Revision 1.1 .1 .1 2006 / 07 / 05 07 : 31 : 44 jehu
* no message
*
* Revision 1.12 2006 / 06 / 16 06 : 17 : 41 administrator
* <EFBFBD> ı <EFBFBD> λ ң <EFBFBD> ŵ <EFBFBD> <EFBFBD> <EFBFBD> Ϊ word <EFBFBD> <EFBFBD> <EFBFBD> Ͷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> dword <EFBFBD> <EFBFBD> <EFBFBD> ͵ <EFBFBD> bug
*
* Revision 1.11 2006 / 05 / 26 10 : 38 : 03 administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 32 λ ģ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* Revision 1.10 2006 / 04 / 30 07 : 25 : 51 administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת
*
* Revision 1.9 2006 / 04 / 28 06 : 28 : 59 administrator
* no message
*
* Revision 1.8 2006 / 04 / 26 05 : 59 : 27 administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> з <EFBFBD> ʽ <EFBFBD> £ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> װ <EFBFBD> ö <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> · <EFBFBD> <EFBFBD> <EFBFBD>
*
* Revision 1.7 2006 / 04 / 22 07 : 48 : 22 administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ <EFBFBD> <EFBFBD> ֧ <EFBFBD> ֶ ˿ <EFBFBD> ͨ Ѷ ʱ <EFBFBD> <EFBFBD> <EFBFBD> л <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӳ ɹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㷨
*
* Revision 1.6 2006 / 01 / 19 09 : 53 : 57 Administrator
* bug <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* Revision 1.5 2006 / 01 / 17 06 : 14 : 44 Administrator
* <EFBFBD> <EFBFBD> <EFBFBD> Ӷ <EFBFBD> ʱ <EFBFBD> <EFBFBD> װ <EFBFBD> ò <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Լ <EFBFBD> <EFBFBD> ˿ ں <EFBFBD> ƫ <EFBFBD> <EFBFBD>
*
* Revision 1.4 2005 / 11 / 30 09 : 49 : 29 Administrator
* <EFBFBD> <EFBFBD> <EFBFBD> ų <EFBFBD> <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* Revision 1.3 2005 / 11 / 18 03 : 49 : 23 Administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʩ <EFBFBD> ͵ <EFBFBD> modbus <EFBFBD> <EFBFBD> Լ
*
* Revision 1.2 2005 / 10 / 20 06 : 55 : 46 Administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ <EFBFBD> û <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* Revision 1.1 2005 / 10 / 12 06 : 03 : 45 Administrator
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ <EFBFBD> û <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//***************************************************************
//* tcphost.cpp *
//* Liangchu Lee 1999.12.20 *
//***************************************************************
# include "commport.h"
# include "tcphost.h"
# include "basetype.h"
extern HOST_IP_ADDR HostIpAddr ;
extern char IniFilePath [ 256 ] ;
BYTE SyncHead [ 6 ] = { 0xeb , 0x90 , 0xeb , 0x90 , 0xeb , 0x90 } ;
int SystemTimeFlag ;
int SystemTimeMode ;
// <20> <> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> <EFBFBD> <EFBFBD> Ҫģ<D2AA> <C4A3> <EFBFBD> ̽<EFBFBD> <CCBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> ڴýӿ<C3BD>
int gMapOutputPort = 0 ; // ģ<> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿<EFBFBD>
int gMapSaveDataPort = 0 ; // ģ<> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> ˿<EFBFBD>
//int SystemLoginFalg;
TCP_LINK_DEF HostLink [ MAX_HOST ] ;
TCP_RCV_DATA_BUF HostRevBuf [ MAX_HOST ] ;
TCP_SEND_DATA_BUF HostSendBuf [ MAX_HOST ] ;
FEND_DEF FendMsg ;
int Host_Socket_Port ;
int HostWSAStartupErr = FALSE ;
HOSTMSG gRtuChangeMsg [ RTUCHANGMSGNUM ] ;
BOOL GetConfigName ( char * szFileName , int iFileNameLen , int IsPortConfig )
{
# ifdef OS_LINUX
if ( IsPortConfig )
{
strcpy ( szFileName , " portconfig.ini " ) ;
}
else
{
strcpy ( szFileName , " config.ini " ) ;
}
# else
//GetCurrentDirectory(sizeof(szDir), szDir);
if ( IsPortConfig )
{
sprintf ( szFileName , " %s/portconfig.ini " , IniFilePath ) ;
}
else
{
sprintf ( szFileName , " %s/config.ini " , IniFilePath ) ;
}
# endif
return TRUE ;
}
BOOL IsWouldBlock ( )
{
BOOL bRetVal ;
bRetVal = FALSE ;
# ifdef OS_LINUX
if ( EINPROGRESS = = errno )
{
bRetVal = TRUE ;
}
# else
if ( WSAEWOULDBLOCK = = WSAGetLastError ( ) )
{
bRetVal = TRUE ;
}
# endif
return bRetVal ;
}
BOOL IsWouldBlockEx ( int neterrno )
{
BOOL bRetVal ;
bRetVal = FALSE ;
# ifdef OS_LINUX
if ( EINPROGRESS = = neterrno )
{
bRetVal = TRUE ;
}
# else
if ( WSAEWOULDBLOCK = = neterrno )
{
bRetVal = TRUE ;
}
# endif
return bRetVal ;
}
int GetNetErrorNo ( )
{
# ifdef OS_LINUX
return errno ;
# else
return WSAGetLastError ( ) ;
# endif
}
void CloseNetSocket ( SOCKET sock )
{
# ifdef OS_LINUX
close ( sock ) ;
# else
closesocket ( sock ) ;
# endif
}
void ULongToIPString ( char * ipstr , u_long ipulong )
{
struct sockaddr_in server ;
ipstr [ 0 ] = 0 ;
if ( ipulong = = 0 )
{
return ;
}
# ifdef OS_LINUX
server . sin_addr . s_addr = ipulong ;
# else
SwapByteSequence ( ( char * ) & ipulong , sizeof ( u_long ) ) ;
server . sin_addr . s_addr = ipulong ;
# endif
strcpy ( ipstr , inet_ntoa ( server . sin_addr ) ) ;
DebugPrint ( ipstr ) ;
}
void MakeNetNameplateMsgToHost ( HOSTMSG * rtumsg )
{
rtumsg - > MsgType = iNETNAMEPLATE ;
rtumsg - > PortNumber = 0 ;
rtumsg - > MsgLen = 3 ;
rtumsg - > MsgData [ 0 ] = FEND_TYPE ;
* ( short * ) & rtumsg - > MsgData [ 1 ] = ( short ) FendMsg . FendIdx ;
}
void SendNetNameplateMsgToHost ( int flag )
{
static int timecnt = 0 ;
HOSTMSG rtumsg ;
int i ;
timecnt + + ;
if ( ( timecnt = = ( 3000 / TIMER_CNT ) ) | | flag )
{
timecnt = 0 ;
MakeNetNameplateMsgToHost ( & rtumsg ) ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
SendDataToHostSendBuf ( i , ( u_char * ) & rtumsg , rtumsg . MsgLen + sizeof ( HOSTMSGHEAD ) , flag ) ;
}
}
}
void SendNetActiveMsgToHost ( void )
{
static int timecnt = 0 ;
HOSTMSG rtumsg ;
int i ;
timecnt + + ;
if ( timecnt > = ( 1000 / TIMER_CNT ) )
{
timecnt = 0 ;
rtumsg . MsgType = iNETTESTMSG ;
rtumsg . PortNumber = 0 ;
rtumsg . MsgLen = 0 ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
SendDataToHostSendBuf ( i , ( u_char * ) & rtumsg , rtumsg . MsgLen + sizeof ( HOSTMSGHEAD ) , FALSE ) ;
}
}
SendNetNameplateMsgToHost ( FALSE ) ;
}
void InitSetTcpIpAddr ( void )
{
int i ;
char ipaddr [ 4 ] [ 32 ] , ipaddrmask [ 4 ] [ 32 ] ;
char szbuf [ 256 ] , InitFileName [ 256 ] ;
GetConfigName ( InitFileName , sizeof ( InitFileName ) , 0 ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> A<EFBFBD> <EFBFBD> ַ1 " , " " , ipaddr [ 0 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> A<EFBFBD> <EFBFBD> ַ2 " , " " , ipaddr [ 1 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> B<EFBFBD> <EFBFBD> ַ1 " , " " , ipaddr [ 2 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> B<EFBFBD> <EFBFBD> ַ2 " , " " , ipaddr [ 3 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> A<EFBFBD> <EFBFBD> ַ1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " " , ipaddrmask [ 0 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> A<EFBFBD> <EFBFBD> ַ2<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " " , ipaddrmask [ 1 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> B<EFBFBD> <EFBFBD> ַ1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " " , ipaddrmask [ 2 ] , 30 , InitFileName ) ;
GetPrivateProString ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> B<EFBFBD> <EFBFBD> ַ2<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " " , ipaddrmask [ 3 ] , 30 , InitFileName ) ;
//DebugPrint("InitSetTcpIpAddr Begin...");
for ( i = 0 ; i < 4 ; i + + )
{
FendMsg . SetTcpIpAddr [ i ] [ 0 ] = 0x00 ;
if ( strlen ( ( char * ) ipaddr [ i ] ) = = 0 )
{
continue ;
}
if ( CheckTcpIpAddr ( ( char * ) ipaddr [ i ] ) = = FALSE )
{
sprintf ( szbuf , " ǰ<EFBFBD> û<EFBFBD> %C<> <43> ַ%d = %s <20> <> <EFBFBD> <EFBFBD> !!! " ,
( i < 2 ) ? ' A ' : ' B ' , ( i % 2 ) + 1 , ipaddr [ i ] ) ;
DebugPrint ( szbuf ) ;
}
else
{
strcpy ( ( char * ) FendMsg . SetTcpIpAddr [ i ] , ( char * ) ipaddr [ i ] ) ;
}
//DebugPrint(FendMsg.SetTcpIpAddr[i]);
}
//DebugPrint("InitSetTcpIpAddr End.");
//SystemTimeFlag = GetPrivateProInt("<22> <> ʱ", "<22> <> ʱ", 1, InitFileName);
SystemTimeMode = GetPrivateProInt ( " <EFBFBD> <EFBFBD> ʱ" , " <EFBFBD> <EFBFBD> ʱ<EFBFBD> <EFBFBD> ʽ " , 1 , InitFileName ) ;
if ( SystemTimeMode = = 0 )
{
SystemTimeFlag = 0 ;
}
else
{
SystemTimeFlag = 1 ;
}
}
int FindFendIdx ( void )
{
int i , retval ;
retval = - 1 ;
for ( i = 0 ; i < MAX_ADDR ; i + + )
{
if ( strlen ( FendMsg . TcpIpAddr [ i ] ) = = 0 )
{
continue ;
}
if ( CmpString2 ( FendMsg . TcpIpAddr [ i ] , FendMsg . SetTcpIpAddr [ 0 ] )
| | CmpString2 ( FendMsg . TcpIpAddr [ i ] , FendMsg . SetTcpIpAddr [ 1 ] ) )
{
retval = 0 ;
break ;
}
if ( CmpString2 ( FendMsg . TcpIpAddr [ i ] , FendMsg . SetTcpIpAddr [ 2 ] )
| | CmpString2 ( FendMsg . TcpIpAddr [ i ] , FendMsg . SetTcpIpAddr [ 3 ] ) )
{
retval = 1 ;
break ;
}
}
return retval ;
}
void FindCurrentFend ( void )
{
FendMsg . FendIdx = FindFendIdx ( ) ;
if ( FendMsg . FendIdx < 0 )
{
if ( CmpString2 ( FendMsg . Name , " HOSTA " ) | | CmpString2 ( FendMsg . Name , " FENDA " ) )
{
FendMsg . FendIdx = 0 ;
}
else if ( CmpString2 ( FendMsg . Name , " HOSTB " ) | | CmpString2 ( FendMsg . Name , " FENDB " ) )
{
FendMsg . FendIdx = 1 ;
}
else
{
FendMsg . FendIdx = ( FendMsg . Name [ strlen ( FendMsg . Name ) - 1 ] - ' A ' ) ? 1 : 0 ; // 0 -- a, 1 -- b
}
}
}
BOOL InitFendMsgEx ( void )
{
int i , j ;
struct hostent * test ;
char InitFileName [ 256 ] ;
GetConfigName ( InitFileName , sizeof ( InitFileName ) , 0 ) ;
for ( j = 0 ; j < MAX_FEND ; j + + )
{
FendMsg . FendExistFlag [ j ] = FALSE ;
FendMsg . FendExistCnt [ j ] = 0 ;
FendMsg . LinkStatus [ j ] = FALSE ;
FendMsg . LinkCnt [ j ] = 0 ;
FendMsg . SendTxdDataFlag [ j ] = FALSE ;
}
for ( j = 0 ; j < MAX_ADDR ; j + + )
{
FendMsg . AllIpAddr [ j ] = 0 ;
FendMsg . HostIpAddr [ j ] = 0 ;
FendMsg . BroadCastAddr [ j ] = 0 ;
}
InitSetTcpIpAddr ( ) ;
FendMsg . EnableLink = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> û<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 1 , InitFileName ) ;
FendMsg . EnableLink = FendMsg . EnableLink ? 1 : 0 ;
FendMsg . LinkFlag = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 2 , InitFileName ) % 3 ;
FendMsg . LinkFlag = 2 ;
// wen 2006.01.14 <20> <> <EFBFBD> <EFBFBD> װ<EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> ʼ <EFBFBD> <CABC> վ<EFBFBD> ŵ<EFBFBD> ƫ<EFBFBD> <C6AB>
FendMsg . iPortOffset = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> վ<EFBFBD> <EFBFBD> " , 0 , InitFileName ) ;
if ( FendMsg . iPortOffset < 0 )
{
FendMsg . iPortOffset = 0 ;
}
// wen 2006.01.14 <20> <> <EFBFBD> Ӳ<EFBFBD> <D3B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> з<EFBFBD> ʽ
FendMsg . iRunMode = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> з<EFBFBD> ʽ " , 0 , InitFileName ) % 2 ;
if ( FendMsg . iRunMode < 0 )
{
FendMsg . iRunMode = RUN_MODE_STANDBY ;
}
// wen 2006.04.22 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> жϵĶ˿<C4B6> ͨѶ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD> )
FendMsg . iPortMask = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <EFBFBD> ˿<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , InitFileName ) ;
// wen 2006.05.20 32bit<69> <74> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
FendMsg . iSendAiof32Bit = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " ң<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 32λ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , InitFileName ) ;
if ( FendMsg . iSendAiof32Bit > 0 )
{
FendMsg . iSendAiof32Bit = 1 ;
}
else
{
FendMsg . iSendAiof32Bit = 0 ;
}
gethostname ( FendMsg . Name , 100 ) ;
test = gethostbyname ( FendMsg . Name ) ;
for ( i = 0 , j = 0 ; ( i < MAX_ADDR ) & & ( j < MAX_NET_NUM ) ; j + + )
{
FendMsg . TcpIpAddr [ i ] [ 0 ] = 0x00 ;
// <20> ж<EFBFBD> <D0B6> Ƿ<EFBFBD> ǰ<EFBFBD> û<EFBFBD> IP<49> <50> ַ(<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ds-3116<31> <36> 3<EFBFBD> <33> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
if ( false = = CheckIsFendIpAddr ( HostIpAddr . AllIpAddr [ j ] ) )
{
continue ;
}
ULongToIPString ( FendMsg . TcpIpAddr [ i ] , HostIpAddr . AllIpAddr [ j ] ) ;
//DebugPrint(FendMsg.TcpIpAddr[i]);
FendMsg . AllIpAddr [ i ] = HostIpAddr . AllIpAddr [ j ] ;
if ( IN_CLASSA ( FendMsg . AllIpAddr [ i ] ) ) //A<> <41> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSA_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSA_HOST ;
}
else if ( IN_CLASSB ( FendMsg . AllIpAddr [ i ] ) ) //B<> <42> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSB_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSB_HOST ;
}
else if ( IN_CLASSC ( FendMsg . AllIpAddr [ i ] ) ) //C<> <43> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSC_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSC_HOST ;
}
i + + ;
}
for ( i = 0 ; i < ( int ) strlen ( FendMsg . Name ) ; i + + )
{
FendMsg . Name [ i ] = toupper ( FendMsg . Name [ i ] ) ;
}
return TRUE ;
}
BOOL InitFendMsg ( void )
{
int i , j ;
struct hostent * test ;
struct in_addr * addr , inaddr ;
char InitFileName [ 256 ] ;
GetConfigName ( InitFileName , sizeof ( InitFileName ) , 0 ) ;
for ( j = 0 ; j < MAX_FEND ; j + + )
{
FendMsg . FendExistFlag [ j ] = FALSE ;
FendMsg . FendExistCnt [ j ] = 0 ;
FendMsg . LinkStatus [ j ] = FALSE ;
FendMsg . LinkCnt [ j ] = 0 ;
FendMsg . SendTxdDataFlag [ j ] = FALSE ;
}
for ( j = 0 ; j < MAX_ADDR ; j + + )
{
FendMsg . AllIpAddr [ j ] = 0 ;
FendMsg . HostIpAddr [ j ] = 0 ;
FendMsg . BroadCastAddr [ j ] = 0 ;
}
InitSetTcpIpAddr ( ) ;
FendMsg . LinkFlag = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " ǰ<EFBFBD> û<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 2 , InitFileName ) % 3 ;
FendMsg . LinkFlag = 2 ;
FendMsg . EnableLink = GetPrivateProInt ( " ǰ<EFBFBD> û<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> û<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 1 , InitFileName ) ;
FendMsg . EnableLink = FendMsg . EnableLink ? 1 : 0 ;
gethostname ( FendMsg . Name , 100 ) ;
test = gethostbyname ( FendMsg . Name ) ;
for ( i = 0 ; i < MAX_ADDR ; i + + )
{
FendMsg . TcpIpAddr [ i ] [ 0 ] = 0x00 ;
addr = ( struct in_addr * ) test - > h_addr_list [ i ] ;
if ( addr = = NULL )
{
break ;
}
inaddr = * ( ( struct in_addr * ) test - > h_addr_list [ i ] ) ;
// <20> ж<EFBFBD> <D0B6> Ƿ<EFBFBD> ǰ<EFBFBD> û<EFBFBD> IP<49> <50> ַ(<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ds-3116<31> <36> 3<EFBFBD> <33> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
if ( false = = CheckIsFendIpAddr ( ntohl ( inaddr . s_addr ) ) )
{
continue ;
}
strcpy ( FendMsg . TcpIpAddr [ i ] , inet_ntoa ( * addr ) ) ;
FendMsg . AllIpAddr [ i ] = ntohl ( inaddr . s_addr ) ;
if ( IN_CLASSA ( FendMsg . AllIpAddr [ i ] ) ) //A<> <41> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSA_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSA_HOST ;
}
else if ( IN_CLASSB ( FendMsg . AllIpAddr [ i ] ) ) //B<> <42> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSB_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSB_HOST ;
}
else if ( IN_CLASSC ( FendMsg . AllIpAddr [ i ] ) ) //C<> <43> <EFBFBD> <EFBFBD> ַ
{
FendMsg . HostIpAddr [ i ] = FendMsg . AllIpAddr [ i ] & IN_CLASSC_NET ;
FendMsg . BroadCastAddr [ i ] = FendMsg . HostIpAddr [ i ] | IN_CLASSC_HOST ;
}
}
for ( i = 0 ; i < ( int ) strlen ( FendMsg . Name ) ; i + + )
{
FendMsg . Name [ i ] = toupper ( FendMsg . Name [ i ] ) ;
}
return TRUE ;
}
BOOL InitHostWSAStartup ( void )
{
int i , j ;
# ifdef OS_WINDOWS
WSADATA WSAData ;
# endif
char szbuf [ 256 ] ;
static BOOL bInitFinished = FALSE ;
char InitFileName [ 256 ] ;
GetConfigName ( InitFileName , sizeof ( InitFileName ) , 0 ) ;
// wen 2002.08.01 <20> <> ʼ <EFBFBD> <CABC> ʱ<EFBFBD> <CAB1> Ӧ<EFBFBD> ùر<C3B9> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڳ<EFBFBD> ʼ <EFBFBD> <CABC>
if ( bInitFinished )
{
CloseHost ( ) ;
}
else
{
bInitFinished = TRUE ;
}
# ifdef OS_WINDOWS
if ( WSAStartup ( MAKEWORD ( 2 , 1 ) , ( LPWSADATA ) & WSAData ) ! = 0 )
{
WSAGetLastError ( ) ;
HostWSAStartupErr = TRUE ;
return FALSE ;
}
# endif;
//InitFendMsg();
InitFendMsgEx ( ) ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
HostRevBuf [ i ] . MsgCnt = 0 ;
HostRevBuf [ i ] . Front = 0 ;
HostRevBuf [ i ] . Rear = 0 ;
HostSendBuf [ i ] . MsgLen = 0 ;
HostLink [ i ] . InitOk = FALSE ;
HostLink [ i ] . InitFlag = FALSE ;
HostLink [ i ] . ExistFlag = FALSE ;
HostLink [ i ] . CommFlag = FALSE ;
HostLink [ i ] . Status = 2 ;
HostLink [ i ] . StatusCnt = 0 ;
HostLink [ i ] . VersionFalgByte = 0 ;
HostLink [ i ] . RevHostStatusMsg = 0 ;
HostLink [ i ] . NetNameplateFalg = FALSE ;
HostLink [ i ] . SocketId = INVALID_SOCKET ;
}
Host_Socket_Port = GetPrivateProInt ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿<EFBFBD> " , 7119 , InitFileName ) ;
GetPrivateProString ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> A<EFBFBD> <EFBFBD> ַ1" , " " , ( char * ) HostLink [ 0 ] . TcpIpAddr [ 0 ] , 30 , InitFileName ) ;
GetPrivateProString ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> A<EFBFBD> <EFBFBD> ַ2" , " " , ( char * ) HostLink [ 0 ] . TcpIpAddr [ 1 ] , 30 , InitFileName ) ;
GetPrivateProString ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> B<EFBFBD> <EFBFBD> ַ1" , " " , ( char * ) HostLink [ 1 ] . TcpIpAddr [ 0 ] , 30 , InitFileName ) ;
GetPrivateProString ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> B<EFBFBD> <EFBFBD> ַ2" , " " , ( char * ) HostLink [ 1 ] . TcpIpAddr [ 1 ] , 30 , InitFileName ) ;
for ( i = 0 , j = 0 ; i < 4 ; i + + )
{
if ( strlen ( ( char * ) HostLink [ i / 2 ] . TcpIpAddr [ i % 2 ] ) = = 0 )
{
continue ;
}
if ( CheckTcpIpAddr ( ( char * ) HostLink [ i / 2 ] . TcpIpAddr [ i % 2 ] ) = = FALSE )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> ַ%d = %s <20> <> <EFBFBD> <EFBFBD> !!!" ,
( ( i < 2 ) ? ' A ' : ' B ' ) , ( ( i % 2 ) + 1 ) , HostLink [ i / 2 ] . TcpIpAddr [ i % 2 ] ) ;
DebugPrint ( szbuf ) ;
//sprintf(szbuf, "i=%d, j=%d", i, j);
//DebugPrint(szbuf);
continue ;
}
j + + ;
}
FendMsg . EnableLink = ( j ) ? FendMsg . EnableLink : 0 ;
FindCurrentFend ( ) ;
HostWSAStartupErr = FALSE ;
return TRUE ;
}
void LinkOneHost ( int hostid )
{
struct sockaddr_in sa ;
int retval , len , tmp_len ;
char tmp_buf [ 256 ] ;
u_long largp = 1L ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ
/*
if ( ( ! SystemLoginFalg ) & & RESTRICTED_USER )
{
return ;
}
*/
// wen 2002.01.24
//if(HostLink[hostid].Status == 2) return;
if ( HostLink [ hostid ] . InitOk = = TRUE )
{
return ;
}
if ( HostLink [ hostid ] . InitFlag = = TRUE )
{
return ;
}
if ( CheckTcpIpAddr ( ( char * ) HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ] ) = = FALSE )
{
HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ] [ 0 ] = 0x00 ;
if ( CheckTcpIpAddr ( ( char * ) HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ? 0 : 1 ] ) )
HostLink [ hostid ] . CurLinkIdx = HostLink [ hostid ] . CurLinkIdx ? 0 : 1 ;
return ;
}
HostLink [ hostid ] . InitLinkCnt + + ;
HostLink [ hostid ] . InitLinkCnt = 0 ;
HostLink [ hostid ] . InitFlag = TRUE ;
if ( ( HostLink [ hostid ] . SocketId = socket ( PF_INET , SOCK_STREAM , IPPROTO_TCP ) ) = = INVALID_SOCKET )
{
# ifdef OS_LINUX
retval = errno ;
# else
retval = WSAGetLastError ( ) ;
# endif
HostLink [ hostid ] . InitFlag = FALSE ;
HostLink [ hostid ] . InitOk = FALSE ;
return ;
}
# ifdef OS_LINUX
// wen 2005.07.08 <20> <> socket<65> <74> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ
retval = fcntl ( HostLink [ hostid ] . SocketId , F_GETFL , 0 ) ;
fcntl ( HostLink [ hostid ] . SocketId , F_SETFL , retval | O_NONBLOCK ) ;
# else
retval = ioctlsocket ( HostLink [ hostid ] . SocketId , FIONBIO , ( u_long FAR * ) & largp ) ;
if ( SOCKET_ERROR = = retval )
{
retval = WSAGetLastError ( ) ;
sprintf ( tmp_buf , " wen: ioctlsocket<65> <74> <EFBFBD> ÷<EFBFBD> <C3B7> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ <C4A3> <CABD> <EFBFBD> <EFBFBD> , SocketError=%d, SocketId = %d " , retval , HostLink [ hostid ] . SocketId ) ;
DebugPrint ( tmp_buf ) ;
return ;
}
# endif
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( tmp_buf , " <EFBFBD> <EFBFBD> socket=%d<> <64> ǰ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c(%s:%d)!!!" , HostLink [ hostid ] . SocketId ,
hostid + ' A ' , ( char * ) HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ] , Host_Socket_Port ) ;
DebugPrint ( ( char * ) tmp_buf ) ;
}
retval = MAX_NET_BUF ;
len = sizeof ( retval ) ;
setsockopt ( HostLink [ hostid ] . SocketId , SOL_SOCKET , SO_RCVBUF , ( char * ) & retval , len ) ;
setsockopt ( HostLink [ hostid ] . SocketId , SOL_SOCKET , SO_SNDBUF , ( char * ) & retval , len ) ;
len = 4 ;
tmp_buf [ 0 ] = 1 ;
retval = setsockopt ( HostLink [ hostid ] . SocketId , SOL_SOCKET , SO_KEEPALIVE , tmp_buf , len ) ;
retval = getsockopt ( HostLink [ hostid ] . SocketId , SOL_SOCKET , SO_KEEPALIVE , tmp_buf , & len ) ;
tmp_len = 1 ;
retval = setsockopt ( HostLink [ hostid ] . SocketId , SOL_SOCKET , SO_REUSEADDR , ( char * ) & tmp_len , len ) ;
memset ( ( char * ) & sa , 0 , sizeof ( struct sockaddr_in ) ) ;
sa . sin_port = htons ( ( WORD ) Host_Socket_Port ) ;
sa . sin_family = PF_INET ;
sa . sin_addr . s_addr = inet_addr ( ( char * ) HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ] ) ;
retval = connect ( ( SOCKET ) HostLink [ hostid ] . SocketId , ( struct sockaddr * ) & sa , sizeof ( sa ) ) ;
if ( retval ! = 0 )
{
// wen 2005.10.21 <20> <EFBFBD> <DEB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD>
retval = GetNetErrorNo ( ) ;
if ( IsWouldBlockEx ( retval ) = = FALSE )
//if(IsWouldBlock() == FALSE)
{
HostLink [ hostid ] . InitFlag = FALSE ;
HostLink [ hostid ] . InitOk = FALSE ;
CloseHostSocket ( HostLink [ hostid ] . SocketId , 0 ) ;
// wen 2002.04.05
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( tmp_buf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c(%s:%d)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӵ<EFBFBD> <D3B4> <EFBFBD> <F3A3ACB4> <EFBFBD> <EFBFBD> <EFBFBD> = %d !!!" ,
hostid + ' A ' , ( char * ) HostLink [ hostid ] . TcpIpAddr [ HostLink [ hostid ] . CurLinkIdx ] , Host_Socket_Port , retval ) ;
DebugPrint ( ( char * ) tmp_buf ) ;
}
}
}
//else
//{
// HostConnect(HostLink[hostid].SocketId, 0);
//}
}
void HostConnect ( SOCKET socket , WORD error )
{
int id ;
char szbuf [ 256 ] ;
for ( id = 0 ; id < MAX_HOST ; id + + )
{
if ( socket = = HostLink [ id ] . SocketId )
{
HostLink [ id ] . InitFlag = FALSE ;
HostLink [ id ] . iNoWriteNum = 0 ;
if ( error )
{
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c(%s:%d)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʧ<EFBFBD> ܣ<EFBFBD> <DCA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> = %d !!!" ,
id + ' A ' , ( char * ) HostLink [ id ] . TcpIpAddr [ HostLink [ id ] . CurLinkIdx ] , Host_Socket_Port , error ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
HostLink [ id ] . InitOk = FALSE ;
CloseHostSocket ( HostLink [ id ] . SocketId , 0 ) ;
break ;
}
HostLink [ id ] . InitOk = TRUE ;
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c(%s:%d)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӳɹ<D3B3> !!!" ,
id + ' A ' , ( char * ) HostLink [ id ] . TcpIpAddr [ HostLink [ id ] . CurLinkIdx ] , Host_Socket_Port ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
//HostSendBuf[id].MsgLen = 0;
// wen 2002.07.10 ȷ<> <C8B7> <EFBFBD> <EFBFBD> <EFBFBD> ȷ<EFBFBD> <C8B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֡
ClearSendBuffer ( id ) ;
ClearRecvBuffer ( id ) ;
SendNetNameplateMsgToHost ( TRUE ) ;
SendNetNameplateMsgToHost ( TRUE ) ;
SendHostSendBufToHost ( ) ;
}
}
}
void LinkToHost ( void )
{
int i ;
static int cnt = 0 ;
//char szbuf[256];
if ( HostWSAStartupErr )
{
return ;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// wen 2006.04.30 <20> <> <EFBFBD> öδ<C3B6> <CEB4> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӷ<EFBFBD> <D3B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳ<EFBFBD> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת
for ( i = 0 ; i < MAX_FEND ; i + + )
{
FendMsg . LinkCnt [ i ] + + ;
FendMsg . FendExistCnt [ i ] + + ;
if ( FendMsg . LinkCnt [ i ] > 10000 / TIMER_CNT )
{
FendMsg . LinkCnt [ i ] - - ;
FendMsg . LinkStatus [ i ] = FALSE ;
}
if ( FendMsg . FendExistCnt [ i ] > 10000 / TIMER_CNT )
{
FendMsg . FendExistCnt [ i ] - - ;
FendMsg . FendExistFlag [ i ] = FALSE ;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if ( FendMsg . EnableLink = = 0 )
{
return ;
}
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( HostLink [ i ] . InitOk = = TRUE )
{
HostLink [ i ] . StatusCnt + + ;
// wen 2002.01.24
//if(HostLink[i].StatusCnt > (5000/TIMER_CNT))
if ( HostLink [ i ] . StatusCnt > ( 10000 / TIMER_CNT ) )
{
// wen 2005.07.21 <20> <EFBFBD> <DEB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//sprintf(szbuf, "<22> <> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> ݳ<EFBFBD> ʱ<EFBFBD> ر<EFBFBD> !!!",
// HostLink[i].SocketId, i + 'A');
//DebugPrint((char*)szbuf);
//HostLink[i].StatusCnt = 0;
CloseHostSocket ( HostLink [ i ] . SocketId , OVER_TIME_CLOSE_NET ) ;
}
}
}
SendNetActiveMsgToHost ( ) ;
switch ( FendMsg . LinkFlag )
{
case 0 :
case 1 :
LinkOneHost ( FendMsg . LinkFlag ) ;
break ;
case 2 :
for ( i = 0 ; i < MAX_HOST ; i + + )
{
LinkOneHost ( i ) ;
}
break ;
default :
break ;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// wen 2006.04.30 <20> <> <EFBFBD> öδ<C3B6> <CEB4> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӷ<EFBFBD> <D3B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳ<EFBFBD> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת
/*
for ( i = 0 ; i < MAX_FEND ; i + + )
{
FendMsg . LinkCnt [ i ] + + ;
FendMsg . FendExistCnt [ i ] + + ;
if ( FendMsg . LinkCnt [ i ] > 10000 / TIMER_CNT )
{
FendMsg . LinkCnt [ i ] - - ;
FendMsg . LinkStatus [ i ] = FALSE ;
}
if ( FendMsg . FendExistCnt [ i ] > 10000 / TIMER_CNT )
{
FendMsg . FendExistCnt [ i ] - - ;
FendMsg . FendExistFlag [ i ] = FALSE ;
}
}
*/
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cnt + + ;
if ( ( cnt * TIMER_CNT ) < 3000 )
{
return ;
}
cnt = 0 ;
switch ( FendMsg . LinkStatus [ 1 ] * 2 + FendMsg . LinkStatus [ 0 ] )
{
case 3 : // <20> <> ǰ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( HostLink [ i ] . Status = = 0 )
{
//SendSwitch(i);
}
}
break ;
case 1 : // <20> <> ǰ<EFBFBD> û<EFBFBD> A <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬
//SendSwitch(0);
break ;
case 2 : // <20> <> ǰ<EFBFBD> û<EFBFBD> B <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬
//SendSwitch(1);
break ;
default :
break ;
}
}
void CloseHostSocket ( SOCKET socket , int flag )
{
int i ;
char szbuf [ 256 ] ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( ( HostLink [ i ] . SocketId = = socket ) & & ( HostLink [ i ] . SocketId ! = INVALID_SOCKET ) )
{
CloseNetSocket ( HostLink [ i ] . SocketId ) ;
HostSendBuf [ i ] . MsgLen = 0 ;
HostLink [ i ] . InitOk = FALSE ;
HostLink [ i ] . InitFlag = FALSE ;
HostLink [ i ] . ExistFlag = FALSE ;
HostLink [ i ] . CommFlag = FALSE ;
HostLink [ i ] . Status = 2 ;
HostLink [ i ] . StatusCnt = 0 ;
HostLink [ i ] . VersionFalgByte = 0 ;
HostLink [ i ] . RevHostStatusMsg = 0 ;
if ( CheckTcpIpAddr ( ( char * ) HostLink [ i ] . TcpIpAddr [ HostLink [ i ] . CurLinkIdx ? 0 : 1 ] ) )
{
HostLink [ i ] . CurLinkIdx = HostLink [ i ] . CurLinkIdx ? 0 : 1 ;
}
if ( ShmGetDispHostLinkFlag ( ) )
{
switch ( flag )
{
case HOST_CLOSE_NET :
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" ,
HostLink [ i ] . SocketId , i + ' A ' ) ;
DebugPrint ( ( char * ) szbuf ) ;
break ;
case OVER_TIME_CLOSE_NET :
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> 綨ʱ<E7B6A8> <CAB1> ʱ<EFBFBD> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" ,
HostLink [ i ] . SocketId , i + ' A ' ) ;
DebugPrint ( ( char * ) szbuf ) ;
break ;
case FEND_CLOSE_NET :
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> ǰ<EFBFBD> û<EFBFBD> <C3BB> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" ,
HostLink [ i ] . SocketId , i + ' A ' ) ;
DebugPrint ( ( char * ) szbuf ) ;
break ;
case ERROR_CLOSE_NET :
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" ,
HostLink [ i ] . SocketId , i + ' A ' ) ;
DebugPrint ( ( char * ) szbuf ) ;
break ;
default :
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" ,
HostLink [ i ] . SocketId , i + ' A ' ) ;
DebugPrint ( ( char * ) szbuf ) ;
break ;
}
}
HostLink [ i ] . SocketId = INVALID_SOCKET ;
}
}
}
void CloseHost ( void )
{
int i ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
CloseHostSocket ( HostLink [ i ] . SocketId , FEND_CLOSE_NET ) ;
}
}
void PutDataToHostRevBuf ( int hostid , char * buf , int len )
{
int j ;
char * ptr , szbuf [ 256 ] ;
if ( HostRevBuf [ hostid ] . MsgCnt = = 0 )
{
HostRevBuf [ hostid ] . Front = 0 ;
HostRevBuf [ hostid ] . Rear = 0 ;
}
ptr = buf ;
if ( ( MAX_NET_BUF - HostRevBuf [ hostid ] . MsgCnt ) > len )
{
j = MAX_NET_BUF - HostRevBuf [ hostid ] . Rear ;
if ( j > = len )
{
memmove ( ( char * ) & HostRevBuf [ hostid ] . MsgData [ HostRevBuf [ hostid ] . Rear ] , ptr , len ) ;
HostRevBuf [ hostid ] . Rear + = len ;
HostRevBuf [ hostid ] . Rear % = MAX_NET_BUF ;
}
else
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> ݴ滺<DDB4> <E6BBBA> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <D6B0> 洢!!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
memmove ( ( char * ) & HostRevBuf [ hostid ] . MsgData [ HostRevBuf [ hostid ] . Rear ] , ptr , j ) ;
HostRevBuf [ hostid ] . Rear + = j ;
HostRevBuf [ hostid ] . Rear % = MAX_NET_BUF ;
memmove ( ( char * ) HostRevBuf [ hostid ] . MsgData , ptr , len - j ) ;
HostRevBuf [ hostid ] . Rear + = ( len - j ) ;
HostRevBuf [ hostid ] . Rear % = MAX_NET_BUF ;
}
HostRevBuf [ hostid ] . MsgCnt + = len ;
}
else
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> ݴ滺<DDB4> <E6BBBA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
}
BOOL ReadHost ( int hostid )
{
int retval , errorcode ;
char msgbuf [ MAX_NET_BUF ] ;
BOOL bRetVal ;
bRetVal = FALSE ;
if ( HostLink [ hostid ] . InitOk )
{
retval = recv ( HostLink [ hostid ] . SocketId , msgbuf , MAX_NET_BUF , 0 ) ;
if ( retval > 0 )
{
PutDataToHostRevBuf ( hostid , ( char * ) msgbuf , retval ) ;
HostLink [ hostid ] . StatusCnt = 0 ;
bRetVal = TRUE ;
}
else
{
# ifdef OS_LINUX
if ( retval = = 0 )
{
errorcode = 0 ;
}
else
{
errorcode = errno ;
}
# else
errorcode = WSAGetLastError ( ) ;
# endif
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( msgbuf , " recv(HostLink[%d].SocketId=%d) = %d(errno=%d) " ,
hostid , HostLink [ hostid ] . SocketId , retval , errorcode ) ;
DebugPrint ( msgbuf ) ;
}
}
}
return bRetVal ;
}
int GetHostMsgFormHostRevBuf ( HOSTMSG * hmsg , int hostid )
{
int status ;
int msglen , msgidx ;
int front , cnt ;
BYTE buf [ 32 ] ;
char szbuf [ 256 ] ;
ORTUMSG * msg ;
front = HostRevBuf [ hostid ] . Front ;
cnt = HostRevBuf [ hostid ] . MsgCnt ;
status = 0 ;
while ( cnt )
{
switch ( status )
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
if ( HostRevBuf [ hostid ] . MsgData [ front ] = = SyncHead [ status ] )
{
status + + ;
}
else
{
status = 0 ;
}
front = ( front + 1 ) % MAX_NET_BUF ;
cnt - - ;
if ( status = = 0 )
{
HostRevBuf [ hostid ] . Front = front ;
HostRevBuf [ hostid ] . MsgCnt = cnt ;
}
break ;
case 6 :
case 7 :
case 8 :
case 9 :
buf [ status - 6 ] = HostRevBuf [ hostid ] . MsgData [ front ] ;
status + + ;
front = ( front + 1 ) % MAX_NET_BUF ;
cnt - - ;
if ( status = = 10 )
{
msg = ( ORTUMSG * ) & buf ;
hmsg - > MsgType = msg - > MsgType ;
hmsg - > PortNumber = msg - > PortNumber ;
hmsg - > MsgLen = SequenceHostToRtuWord ( ( WORD ) msg - > MsgLen ) ;
hmsg - > EMsgLen = 0 ;
msglen = hmsg - > MsgLen ;
if ( msglen = = 0 )
{
HostRevBuf [ hostid ] . Front = front ;
HostRevBuf [ hostid ] . MsgCnt = cnt ;
return TRUE ;
}
if ( msglen > ( MAX_RTU_MSG_SIZE - 12 ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> Ϣ<EFBFBD> <CFA2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Len = %d!" , ' A ' + hostid , msglen ) ;
DebugPrint ( ( char * ) szbuf ) ;
status = 0 ;
HostRevBuf [ hostid ] . Front = front ;
HostRevBuf [ hostid ] . MsgCnt = cnt ;
}
}
msgidx = 0 ;
break ;
case 10 :
hmsg - > MsgData [ msgidx + + ] = HostRevBuf [ hostid ] . MsgData [ front ] ;
front = ( front + 1 ) % MAX_NET_BUF ;
cnt - - ;
msglen - - ;
if ( msglen = = 0 )
{
HostRevBuf [ hostid ] . Front = front ;
HostRevBuf [ hostid ] . MsgCnt = cnt ;
return TRUE ;
}
if ( msgidx < 6 )
{
break ;
}
if ( memcmp ( ( char * ) & hmsg - > MsgData [ msgidx - 6 ] , ( char * ) SyncHead , 6 ) = = 0 )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c <20> <> Ϣ<EFBFBD> <CFA2> ʧ<EFBFBD> <CAA7> ! " , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
status = 0 ;
HostRevBuf [ hostid ] . Front = front ;
HostRevBuf [ hostid ] . MsgCnt = cnt ;
}
break ;
default :
status = 0 ;
break ;
}
}
return FALSE ;
}
BOOL ReadDataFormHost ( SOCKET socket )
{
BOOL bRetVal ;
int i , hostid ;
WORD sum ;
char szbuf [ 256 ] ;
HOSTMSG hostmsg ;
DAY_TIME DateTime ;
SYSTEMTIME * pTime ;
bRetVal = TRUE ;
for ( hostid = 0 ; hostid < MAX_HOST ; hostid + + )
{
if ( HostLink [ hostid ] . SocketId = = socket )
{
bRetVal = ReadHost ( hostid ) ;
break ;
}
}
if ( bRetVal = = FALSE )
{
return bRetVal ;
}
if ( hostid > = MAX_HOST )
{
return FALSE ;
}
while ( GetHostMsgFormHostRevBuf ( & hostmsg , hostid ) )
{
if ( FALSE = = AllDataRtuToHostByteSequence ( & hostmsg ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> ݸ<EFBFBD> ʽ <EFBFBD> <CABD> <EFBFBD> <EFBFBD> !!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
continue ;
}
if ( HostLink [ hostid ] . VersionFalgByte & CHECK_VERSION_FLAG )
{
sum = hostmsg . MsgData [ hostmsg . MsgLen - 2 ] + hostmsg . MsgData [ hostmsg . MsgLen - 1 ] * 256 ;
sum = SequenceRtuToHostWord ( sum ) ;
if ( sum ! = CalCheckout ( ( u_char * ) hostmsg . MsgData , hostmsg . MsgLen - 2 ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> ϢУ <CFA2> <D0A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
continue ;
}
hostmsg . MsgLen - = 2 ;
}
switch ( hostmsg . MsgType )
{
case hHOSTSTATUS :
for ( i = 0 ; i < MAX_HOST ; i + + )
{
HostLink [ i ] . Status = ( * ( int * ) & hostmsg . MsgData [ i * sizeof ( int ) ] ) % 3 ;
}
// wen 2002.01.24
HostLink [ hostid ] . RevHostStatusMsg = TRUE ;
break ;
case hNETTESTMSG :
break ;
case hTIMEINFORM :
if ( ( HostLink [ 0 ] . Status = = 0 ) & & ( HostLink [ 1 ] . Status = = 0 ) )
{
continue ;
}
if ( HostLink [ hostid ] . Status )
{
continue ;
}
if ( SystemTimeFlag & & ( SystemTimeMode = = 1 ) )
{
//SetLocalTime((SYSTEMTIME*)hostmsg.MsgData);
pTime = ( SYSTEMTIME * ) hostmsg . MsgData ;
if ( pTime - > wSecond > 5 )
{
break ;
}
DateTime . Year = pTime - > wYear ;
DateTime . Month = ( BYTE ) pTime - > wMonth ;
DateTime . Day = ( BYTE ) pTime - > wDay ;
DateTime . Hour = ( BYTE ) pTime - > wHour ;
DateTime . Min = ( BYTE ) pTime - > wMinute ;
DateTime . Sec = ( BYTE ) pTime - > wSecond ;
DateTime . mSec = pTime - > wMilliseconds ;
SetLocalTimeEx ( & DateTime ) ;
}
break ;
// wen 2003.10.24 <20> <> <EFBFBD> Ӷ<EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> ݿ<EFBFBD> <DDBF> ĵ<DEB8> ͬ<EFBFBD> <CDAC> (֣<> <D6A3> ũ<EFBFBD> <C5A9> )
//case hRELOADDBSTN:// <20> <> <EFBFBD> <EFBFBD> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> ݿ<EFBFBD> վ<EFBFBD> <D5BE> Ϣ
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߳̿<DFB3> <CCBF> <EFBFBD> վ<EFBFBD> <D5BE> Ϣ<EFBFBD> <CFA2> <EFBFBD> ݲ<EFBFBD> <DDB2> 滻<EFBFBD> <E6BBBB> վ<EFBFBD> <D5BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͵ľ<CDB5> <C4BE> <EFBFBD> (<28> <> :ģ<> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
// break;
// wen 2003.10.24 <20> <> <EFBFBD> Ӷ<EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> ݿ<EFBFBD> <DDBF> ĵ<DEB8> ͬ<EFBFBD> <CDAC> (֣<> <D6A3> ũ<EFBFBD> <C5A9> )
//case hRELOADDBPOINT:// <20> <> <EFBFBD> <EFBFBD> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> ݿ<EFBFBD> <DDBF> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
// ֱ<> <D6B1> <EFBFBD> <EFBFBD> <EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> Ϣ
// break;
default : // hMAPANDATA,hMAPDIDATA,hBYPASSCMD,hYKYTCMD etc.
if ( ( HostLink [ 0 ] . Status = = 0 ) & & ( HostLink [ 1 ] . Status = = 0 ) )
{
continue ;
}
// wen 2002.04.05
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݶ<EFBFBD> <DDB6> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> Կ<EFBFBD> <D4BF> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> ķ<EFBFBD> <C4B7> <EFBFBD> <EFBFBD> <EFBFBD> )
//if(HostLink[hostid].Status)
// continue;
HostDataProce ( & hostmsg ) ;
break ;
}
}
return bRetVal ;
}
int SendHost ( int hostid ) ;
int SendDataToHostSendBuf ( int hostid , u_char * buf , int len , BOOL bInsert )
{
int imsgLen ;
HOSTMSG * revmsg ;
ORTUMSG msg ;
char szbuf [ 256 ] ;
if ( HostLink [ hostid ] . InitOk = = FALSE )
{
return 0 ;
}
if ( ! bInsert )
{
if ( HostLink [ hostid ] . RevHostStatusMsg ! = TRUE )
{
return 0 ;
}
if ( HostLink [ hostid ] . NetNameplateFalg = = FALSE )
{
MakeNetNameplateMsgToHost ( ( HOSTMSG * ) buf ) ;
HostLink [ hostid ] . NetNameplateFalg = TRUE ;
}
}
revmsg = ( HOSTMSG * ) buf ;
// wen 2002.08.01 <20> <> <EFBFBD> <EFBFBD> ֡<EFBFBD> <D6A1> ʽ <EFBFBD> <CABD> <EFBFBD> <EFBFBD> <F3A3ACB3> ȴ<EFBFBD> <C8B4> <EFBFBD> <EFBFBD> ܳ<EFBFBD> <DCB3> <EFBFBD>
if ( revmsg - > MsgLen > len )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֡<EFBFBD> <D6A1> ʽ <EFBFBD> <CABD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֡<EFBFBD> <D6A1> <EFBFBD> ȣ <EFBFBD> %d <20> ֽ<EFBFBD> " , ' A ' + hostid , revmsg - > MsgLen ) ;
DebugPrint ( ( char * ) szbuf ) ;
return 0 ;
}
// wen 2002.07.11 <20> <> <EFBFBD> ж϶<D0B6> <CFB6> <EFBFBD> һ Щ<D2BB> ռ <EFBFBD>
//imsgLen = msg.MsgLen + sizeof(ORTUMSGHEAD);
imsgLen = revmsg - > MsgLen + sizeof ( ORTUMSGHEAD ) ;
// 6bytesͬ<73> <CDAC> ͷ+2bytesУ <73> <D0A3> +12bytes<65> <73> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD>
//if((MAX_NET_BUF - HostSendBuf[hostid].MsgLen) < (msg.MsgLen+6))
if ( ( MAX_NET_BUF - HostSendBuf [ hostid ] . MsgLen ) < ( imsgLen + 20 ) )
{
if ( SendHost ( hostid ) = = FALSE )
{
return 0 ;
}
// wen 2002.08.01 <20> <> <EFBFBD> ݷ<EFBFBD> <DDB7> <EFBFBD> <EFBFBD> Ժ<D4BA> <F3A3ACBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȼ<EFBFBD> <C8BB> <EFBFBD> <EFBFBD>
if ( ( MAX_NET_BUF - HostSendBuf [ hostid ] . MsgLen ) < ( imsgLen + 20 ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> ͻ<EFBFBD> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
return 0 ;
}
}
/*
msg . MsgType = ( BYTE ) revmsg - > MsgType ;
msg . MsgLen = revmsg - > MsgLen ;
msg . PortNumber = ( BYTE ) revmsg - > PortNumber ;
memmove ( ( char * ) msg . MsgData , ( char * ) revmsg - > MsgData , revmsg - > MsgLen ) ;
*/
if ( FALSE = = AllDataHostToRtuByteSequence ( revmsg , & msg ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݸ<EFBFBD> ʽ <EFBFBD> <CABD> <EFBFBD> <EFBFBD> !!!" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
return 0 ;
}
if ( HostLink [ hostid ] . VersionFalgByte & CHECK_VERSION_FLAG )
{
* ( WORD * ) & msg . MsgData [ imsgLen ] = SequenceHostToRtuWord ( CalCheckout ( msg . MsgData , imsgLen ) ) ;
imsgLen + = 2 ;
msg . MsgLen = SequenceHostToRtuWord ( ( WORD ) imsgLen ) ;
}
memmove ( ( char * ) & HostSendBuf [ hostid ] . MsgData [ HostSendBuf [ hostid ] . MsgLen ] , ( char * ) SyncHead , 6 ) ;
HostSendBuf [ hostid ] . MsgLen + = 6 ;
memmove ( ( char * ) & HostSendBuf [ hostid ] . MsgData [ HostSendBuf [ hostid ] . MsgLen ] , ( char * ) & msg , imsgLen ) ;
HostSendBuf [ hostid ] . MsgLen + = imsgLen ;
// wen 2002.08.01 <20> <> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȹ<EFBFBD> <C8B9> <EFBFBD> (<28> <> ԶҲ<D4B6> <D2B2> <EFBFBD> ᵽ<EFBFBD> <E1B5BD> )
if ( HostSendBuf [ hostid ] . MsgLen > MAX_NET_BUF )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Խ<EFBFBD> ޣ<EFBFBD> <DEA3> <EFBFBD> <EFBFBD> ȣ <EFBFBD> %d <20> ֽ<EFBFBD> " ,
' A ' + hostid , HostSendBuf [ hostid ] . MsgLen ) ;
DebugPrint ( ( char * ) szbuf ) ;
HostSendBuf [ hostid ] . MsgLen = 0 ;
return 0 ;
}
return len ;
}
void SendDataToAllHostSendBuf ( u_char * buf , int len )
{
int i ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
SendDataToHostSendBuf ( i , buf , len , FALSE ) ;
}
}
int SendHost ( int hostid )
{
int retval , neterror ;
char szbuf [ 256 ] ;
struct timeval timeout ;
fd_set fdset_wr ;
if ( HostLink [ hostid ] . InitOk = = FALSE )
{
HostSendBuf [ hostid ] . MsgLen = 0 ;
return TRUE ;
}
if ( HostLink [ hostid ] . SocketId = = INVALID_SOCKET )
{
HostSendBuf [ hostid ] . MsgLen = 0 ;
return TRUE ;
}
if ( HostSendBuf [ hostid ] . MsgLen = = 0 )
{
return TRUE ;
}
FD_ZERO ( & fdset_wr ) ;
FD_SET ( HostLink [ hostid ] . SocketId , & fdset_wr ) ;
memset ( ( char * ) & timeout , 0 , sizeof ( struct timeval ) ) ;
// wen 2005.07.08 <20> <> <EFBFBD> ó<EFBFBD> ʱ<EFBFBD> ȴ<EFBFBD> ʱ<EFBFBD> <CAB1> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> ᶪʧ<E1B6AA> <CAA7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
//timeout.tv_usec = 200;
retval = select ( HostLink [ hostid ] . SocketId + 1 , ( fd_set * ) 0 , & fdset_wr , ( fd_set * ) 0 , & timeout ) ;
if ( retval = = 0 )
{
// wen 2005.10.21 <20> ۼ<EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> ر<DEB9> socket
HostLink [ hostid ] . iNoWriteNum + + ;
if ( HostLink [ hostid ] . iNoWriteNum > MAX_NO_WRITE_NUM )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c SOCKET<45> <54> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> ۼƳ<DBBC> <C6B3> <EFBFBD> <EFBFBD> <EFBFBD> ֵ" , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
CloseHostSocket ( HostLink [ hostid ] . SocketId , OVER_TIME_CLOSE_NET ) ;
HostLink [ hostid ] . iNoWriteNum = 0 ;
}
return TRUE ;
}
if ( retval ! = - 1 )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD> socketд<74> <D0B4> ʶ<EFBFBD> <CAB6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( FD_ISSET ( HostLink [ hostid ] . SocketId , & fdset_wr ) )
{
HostLink [ hostid ] . iNoWriteNum = 0 ;
retval = send ( HostLink [ hostid ] . SocketId ,
( char * ) HostSendBuf [ hostid ] . MsgData ,
HostSendBuf [ hostid ] . MsgLen , 0 ) ;
if ( SOCKET_ERROR = = retval )
{
neterror = GetNetErrorNo ( ) ;
if ( IsWouldBlockEx ( neterror ) = = TRUE )
{
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ,
HostLink [ hostid ] . SocketId , ' A ' + hostid ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
}
else
{
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %d <20> ֽ<EFBFBD> " ,
' A ' + hostid , neterror , HostSendBuf [ hostid ] . MsgLen ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
CloseHostSocket ( HostLink [ hostid ] . SocketId , ERROR_CLOSE_NET ) ;
return FALSE ;
}
}
else
{
HostSendBuf [ hostid ] . MsgLen - = retval ;
if ( HostSendBuf [ hostid ] . MsgLen > 0 )
{
if ( ShmGetDispHostLinkFlag ( ) )
{
sprintf ( szbuf , " <EFBFBD> <EFBFBD> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ! ʣ<> ࣺ%d <20> ֽڣ<D6BD> <DAA3> <EFBFBD> <EFBFBD> ͣ<EFBFBD> %d <20> ֽ<EFBFBD> " ,
HostLink [ hostid ] . SocketId , ' A ' + hostid , HostSendBuf [ hostid ] . MsgLen , retval ) ;
DebugPrint ( ( char * ) szbuf ) ;
}
memmove ( HostSendBuf [ hostid ] . MsgData , HostSendBuf [ hostid ] . MsgData + retval , HostSendBuf [ hostid ] . MsgLen ) ;
}
else
{
//sprintf(szbuf, "<22> <> socket=%d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %c<> <63> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> ͣ<EFBFBD> %d <20> ֽ<EFBFBD> ",
// HostLink[hostid].SocketId, 'A'+hostid, retval);
//DebugPrint((char*)szbuf);
HostSendBuf [ hostid ] . MsgLen = 0 ;
}
}
}
else
{
CloseHostSocket ( HostLink [ hostid ] . SocketId , ERROR_CLOSE_NET ) ;
return FALSE ;
}
}
else
{
CloseHostSocket ( HostLink [ hostid ] . SocketId , ERROR_CLOSE_NET ) ;
return FALSE ;
}
return TRUE ;
}
void SendHostSendBufToHost ( void )
{
int i ;
// wen 2003.06.11 <20> <> <EFBFBD> ӱ仯<D3B1> <E4BBAF> <EFBFBD> ݵķ<DDB5> <C4B7> <EFBFBD>
SendRtuChangeDataToHost ( ) ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
SendHost ( i ) ;
}
}
void ClearSendBuffer ( int hostid )
{
HostSendBuf [ hostid ] . MsgLen = 0 ;
}
void ClearRecvBuffer ( int hostid )
{
HostRevBuf [ hostid ] . MsgCnt = 0 ;
HostRevBuf [ hostid ] . Front = 0 ;
HostRevBuf [ hostid ] . Rear = 0 ;
}
void HostDataProceWithSignalYkYt ( HOSTMSG * hmsg )
{
BOOL bFailed ;
char buf [ 64 ] ;
int port , ykytpnt ;
SIO_PARAM_DEF * pSioParam ;
pSioParam = GetSioParamPtr ( ) ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//port = hmsg->PortNumber;
port = hmsg - > PortNumber - FendMsg . iPortOffset ;
if ( port < 0 )
{
return ;
}
bFailed = TRUE ;
if ( ( hmsg - > MsgLen ! = 5 ) & & ( hmsg - > MsgLen ! = 7 ) )
{
bFailed = FALSE ;
}
else if ( ( hmsg - > MsgData [ 3 ] < 1 ) | | ( hmsg - > MsgData [ 3 ] > 8 ) )
{
bFailed = FALSE ;
}
else if ( ( hmsg - > MsgData [ 4 ] < 1 ) | | ( hmsg - > MsgData [ 4 ] > 2 ) )
{
bFailed = FALSE ;
}
ykytpnt = * ( ( short * ) & hmsg - > MsgData [ 1 ] ) ;
if ( ( bFailed = = FALSE ) | | ( pSioParam [ port ] . m_psBaoHu = = NULL ) )
{
buf [ 0 ] = ( BYTE ) ykytpnt ;
buf [ 1 ] = 0 ;
buf [ 2 ] = 0 ;
SetYkYtAckData ( port , buf ) ;
return ;
}
memset ( buf , 0 , sizeof ( buf ) ) ;
buf [ 0 ] = port ;
buf [ 4 ] = ( BYTE ) ykytpnt ;
buf [ 8 ] = hmsg - > MsgData [ 3 ] ;
buf [ 9 ] = ( hmsg - > MsgData [ 4 ] = = 1 ) ? 1 : 2 ;
SendYkYtCommand ( port , buf , 10 ) ;
}
//***************************************************************
//* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ<EFBFBD> <DDB4> <EFBFBD> *
//***************************************************************
void HostDataProce ( HOSTMSG * hostmsg )
{
int port , iReLoadDefCnt = 0 ;
HOSTMSG msg ;
switch ( hostmsg - > MsgType )
{
case hYKYTCMD :
if ( ( ( hostmsg - > MsgLen % 5 ) ! = 0 )
& & ( ( hostmsg - > MsgLen % 7 ) ! = 0 ) )
{
break ;
}
if ( hostmsg - > MsgLen > = 10 ) // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
//ProLen = 0;
//memmove((char*)&MultiYkYtMsg, (char*)hostmsg, hostmsg->MsgLen+sizeof(HOSTMSGHEAD));
//MultiYkYtFlag = TRUE;
//MultiYkYtSelectProce();
//MultiYkYtFlag = FALSE;
}
else // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
HostDataProceWithSignalYkYt ( hostmsg ) ;
}
break ;
case hBYPASSCMD :
switch ( hostmsg - > MsgData [ 1 ] )
{
case 0x0d :
case 0x0e :
case 0x11 :
//SendDataToPort(hostmsg->PortNumber, (char*)hostmsg->MsgData, hostmsg->MsgLen, CLEAR_INPUT_BUF);
break ;
case 0x1a :
//SendDataToPort(hostmsg->PortNumber, (char*)hostmsg->MsgData, hostmsg->MsgLen, CLEAR_INPUT_BUF);
break ;
default :
//SendDataToPort(hostmsg->PortNumber, (char*)hostmsg->MsgData, hostmsg->MsgLen, CLEAR_INPUT_BUF);
break ;
}
break ;
case hMAPANDATA :
case hMAPDIDATA :
//FormHostMapDataProce(hostmsg);
break ;
case hDATA_OUTPUT_CTRL :
//hostmsg->PortNumber = hostmsg->MsgData[1];
//MakeRsLinks22DataCtrlCommand(hostmsg);
hostmsg - > PortNumber = hostmsg - > MsgData [ 1 ] ;
port = hostmsg - > PortNumber ;
//selidx = PortParam[port].CurrentPortSel;
//switch(PortParam[port].CommPort[selidx].RtuType)
//{
// case RSLINKS22DDE:
// MakeRsLinks22DataCtrlCommand(hostmsg);
// break;
// case DISA2000:
// Disa2000AoCommand(hostmsg);
// break;
//}
break ;
case hRELOADDATABASE :
msg . MsgType = hRELOADDATABASE ;
msg . PortNumber = 0 ;
msg . MsgLen = 1 ;
msg . EMsgLen = 0 ;
msg . MsgData [ 0 ] = FALSE ;
if ( iReLoadDefCnt * TIMER_CNT / 1000 > 60 )
{
iReLoadDefCnt = 0 ;
//ReLoadPortDefine();
msg . MsgData [ 0 ] = TRUE ;
}
SendDataToAllHostSendBuf ( ( u_char * ) & msg , msg . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
break ;
case hMAPALLOP :
//HostMapOpProc(hostmsg);
break ;
// <20> <> <EFBFBD> ݿ<EFBFBD> <DDBF> <EFBFBD> Ϣ<EFBFBD> <EFBFBD>
case NET_PROFILE_UPDATE :
//ModifyDBProc(hostmsg);
break ;
}
}
//***************************************************************
//* <20> <> <EFBFBD> ͱ仯<CDB1> <E4BBAF> <EFBFBD> ݵ<EFBFBD> <DDB5> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SendRtuChangeDataToHost ( void )
{
int i ;
# ifdef FEND_STANDBY_NOSEND
// wen 2003.01.07 ǰ<> û<EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> û<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͱ仯<CDB1> <E4BBAF> <EFBFBD> ݸ<EFBFBD> <DDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( ! IsSendDatatoPort ( - 1 ) )
return ;
# endif
for ( i = 0 ; i < RTUCHANGMSGNUM ; i + + )
{
gRtuChangeMsg [ i ] . EMsgLen = 0 ;
if ( gRtuChangeMsg [ i ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & gRtuChangeMsg [ i ] , gRtuChangeMsg [ i ] . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
gRtuChangeMsg [ i ] . MsgLen = 0 ;
}
}
}
//***************************************************************
//* <09> <> <EFBFBD> Ͷ˿<CDB6> ͳ<EFBFBD> Ƶ<EFBFBD> <C6B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SendPortStatisticsToHost ( void )
{
/*
int i , portnum ;
HOSTMSG MsgBuf ;
portnum = DEFAULT_MAX_PORT_NUM ;
MsgBuf . MsgType = WUXI_ZHUANFA_AI_TO_HOST ;
MsgBuf . PortNumber = MaxPortNum - 1 ;
MsgBuf . MsgLen = portnum * 20 + 2 ;
MsgBuf . EMsgLen = 0 ;
* ( short * ) & MsgBuf . MsgData [ 0 ] = 0 ;
for ( i = 0 ; i < portnum ; i + + )
{
* ( float * ) & MsgBuf . MsgData [ 20 * i + 2 ] = ( float ) PortParam [ i ] . MsgNum ;
* ( float * ) & MsgBuf . MsgData [ 20 * i + 6 ] = ( float ) PortParam [ i ] . ErrMsgNum ;
* ( float * ) & MsgBuf . MsgData [ 20 * i + 10 ] = ( float ) PortParam [ i ] . LostSyncCnt ;
* ( float * ) & MsgBuf . MsgData [ 20 * i + 14 ] = ( float ) ( ( PortParam [ i ] . MsgNum ! = 0 ) ?
( float ) PortParam [ i ] . ErrMsgNum / ( float ) PortParam [ i ] . MsgNum : 0.0 ) ;
* ( float * ) & MsgBuf . MsgData [ 20 * i + 18 ] = ( float ) ( ( PortParam [ i ] . UpTime | | PortParam [ i ] . DownTime ) ?
( float ) PortParam [ i ] . UpTime / ( float ) ( PortParam [ i ] . UpTime + PortParam [ i ] . DownTime ) : 0.0 ) ;
}
SendDataToAllHostSendBuf ( ( u_char * ) & MsgBuf , MsgBuf . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
*/
}
//***************************************************************
//* <20> <> <EFBFBD> Ͷ˿<CDB6> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SendPortStatusToHost ( int flag )
{
int i , portnum ;
HOSTMSG MsgBuf ;
SIO_PARAM_DEF * pSioParam ;
pSioParam = GetSioParamPtr ( ) ;
portnum = DEFAULT_MAX_PORT_NUM ;
MsgBuf . MsgType = iLINESTATUS ;
MsgBuf . PortNumber = 0 ;
MsgBuf . MsgLen = portnum * 2 ;
MsgBuf . EMsgLen = 0 ;
for ( i = 0 ; i < portnum ; i + + )
{
// <20> <> <EFBFBD> ˿<EFBFBD> ״̬<D7B4> <CCAC> λ
pSioParam [ i ] . LineCommCnt + + ;
if ( ( ( ( long ) pSioParam [ i ] . LineCommCnt * TIMER_CNT ) / 1000 ) > 60 )
{
pSioParam [ i ] . LineCommCnt = 0 ;
pSioParam [ i ] . Status = FALSE ;
}
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//MsgBuf.MsgData[i*2] = (BYTE)i;
MsgBuf . MsgData [ i * 2 ] = ( BYTE ) ( i + FendMsg . iPortOffset ) ;
MsgBuf . MsgData [ i * 2 + 1 ] = flag ? ( pSioParam [ i ] . Status & 0x01 ) : 0x00 ;
}
SendDataToAllHostSendBuf ( ( u_char * ) & MsgBuf , MsgBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
//SendPortStatisticsToHost();
}
// wen 2003.01.08 ǰ<> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> ȡ<EFBFBD> <C8A1> <EFBFBD> <EFBFBD> ֵʱ<D6B5> <CAB1> Ӧ
// <20> <> <EFBFBD> жϸ<D0B6> ֵ<EFBFBD> <D6B5> <EFBFBD> <EFBFBD> Ч<EFBFBD> ԡ<EFBFBD> <D4A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ͳ<EFBFBD> <CDB2> ᷢ<EFBFBD> <E1B7A2> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <F3B1A8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//***************************************************************
//* <20> Ͷ˿<CDB6> ȫ<EFBFBD> <C8AB> <EFBFBD> ݵ<EFBFBD> <DDB5> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SendPortAllDataToHost ( void )
{
//static int test=0;
char szDbg [ 256 ] ;
BOOL bSendFlag ;
int i ;
static int sendport = 0 , count = 0 ;
HOSTMSG SendAllDataBuf ;
AI_DEF aipntmsg ;
DI_DEF dipntmsg ;
PI_DEF pipntmsg ;
SIO_PARAM_DEF * pSioParam ;
//if (WaittingFlag == TRUE)
// return;
//if (DisbaleWriteAllDataToHostFlag)
// return;
# ifdef FEND_STANDBY_NOSEND
// wen 2003.01.07 ǰ<> û<EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> û<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> ݸ<EFBFBD> <DDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> ʡȥ<CAA1> <C8A5> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ<EFBFBD> <DDB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿<EFBFBD> ״̬ PortParam[sendport].Status
// Ҳ<> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ΪTRUE
if ( ! IsSendDatatoPort ( - 1 ) )
return ;
# endif
count + + ;
if ( count * TIMER_CNT < 1000 )
{
return ;
}
count = 0 ;
pSioParam = GetSioParamPtr ( ) ;
//if(test == 0)
//{
// DebugPrint(">>>Enter SendAllData.");
// test = 1;
//}
//else
//{
// DebugPrint("<<<Enter SendAllData.");
// test = 0;
//}
bSendFlag = FALSE ;
for ( i = 0 ; i < DEFAULT_MAX_PORT_NUM ; i + + )
{
if ( pSioParam [ sendport ] . Status )
{
if ( pSioParam [ sendport ] . m_psBaoHu )
{
if ( PROTOCOL_MASTER = = pSioParam [ sendport ] . m_psBaoHu - > PortType )
{
// <20> ˿<EFBFBD> <CBBF> <EFBFBD> ͣ<EFBFBD> <CDA3> ---תΪ--><3E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> 1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˢ<EFBFBD> иö˿<C3B6> <CBBF> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȥ<EFBFBD> <C8A5> ȫ<EFBFBD> <C8AB> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> <EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> ȫˢ<C8AB> ¶<EFBFBD> <C2B6> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <D6B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ҡ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> صĺ<D8B5> <C4BA> <EFBFBD> <EFBFBD> <EFBFBD> ң<EFBFBD> ű<EFBFBD> <C5B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> <EFBFBD> <EFBFBD>
//if(pSioParam[sendport].iDelaySendAllData < (60000/TIMER_CNT))
if ( pSioParam [ sendport ] . iDelaySendAllData < 60 )
{
pSioParam [ sendport ] . iDelaySendAllData + + ;
}
else
{
bSendFlag = TRUE ;
break ;
}
}
}
}
else
{
pSioParam [ sendport ] . iDelaySendAllData = 0 ;
}
sendport = ( sendport + 1 ) % DEFAULT_MAX_PORT_NUM ;
}
// test
if ( pSioParam [ sendport ] . iDelaySendAllData = = 60 )
{
sprintf ( szDbg , " SendAllData port=%d iDelaySendAllData=%d, bSendFlag=%d, status=%d " ,
sendport , pSioParam [ sendport ] . iDelaySendAllData , bSendFlag , pSioParam [ sendport ] . Status ) ;
DebugPrint ( szDbg ) ;
pSioParam [ sendport ] . iDelaySendAllData + + ;
}
sendport = sendport % DEFAULT_MAX_PORT_NUM ;
//if((i >= DEFAULT_MAX_PORT_NUM) || (FALSE == bSendFlag))
if ( FALSE = = bSendFlag )
{
return ;
}
// test
//sprintf(szDbg, "SendAllData from port=%d", sendport);
//DebugPrint(szDbg);
// wen 2005.06.20 <20> <> <EFBFBD> <EFBFBD> 32bitģ<74> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( FendMsg . iSendAiof32Bit )
{
// <20> <> <EFBFBD> <EFBFBD> ȫң<C8AB> <D2A3>
SendAllDataBuf . MsgType = PGC3_AI32ALLDATA ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//SendAllDataBuf.PortNumber = sendport;
SendAllDataBuf . PortNumber = sendport + FendMsg . iPortOffset ;
SendAllDataBuf . MsgLen = 0 ;
SendAllDataBuf . EMsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = 0 ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
for ( i = 0 ; i < pSioParam [ sendport ] . m_psBaoHu - > AiNum ; i + + )
{
if ( ( MAX_RTU_MSG_SIZE - SendAllDataBuf . MsgLen ) < 8 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = i ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( GetPntMsg ( sendport , i , ( void * ) & aipntmsg , AI_PNT_TYPE , PNT_ALL_MSG ) = = FALSE )
{
aipntmsg . RawValue = 0 ;
}
* ( long * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = ( long ) aipntmsg . RawValue ;
SendAllDataBuf . MsgLen + = sizeof ( long ) ;
}
if ( SendAllDataBuf . MsgLen > sizeof ( long ) )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
}
}
else
{
// <20> <> <EFBFBD> <EFBFBD> ȫң<C8AB> <D2A3>
SendAllDataBuf . MsgType = iAIALLDATA ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//SendAllDataBuf.PortNumber = sendport;
SendAllDataBuf . PortNumber = sendport + FendMsg . iPortOffset ;
SendAllDataBuf . MsgLen = 0 ;
SendAllDataBuf . EMsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = 0 ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
for ( i = 0 ; i < pSioParam [ sendport ] . m_psBaoHu - > AiNum ; i + + )
{
if ( ( MAX_RTU_MSG_SIZE - SendAllDataBuf . MsgLen ) < 8 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = i ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( GetPntMsg ( sendport , i , ( void * ) & aipntmsg , AI_PNT_TYPE , PNT_ALL_MSG ) = = FALSE )
{
aipntmsg . RawValue = 0 ;
}
//if(abs(aipntmsg.RawValue&0x0000ffff) < aipntmsg.Dead)
//{
// pntmsg.RawValue = 0;
//}
//if(i == 1)
//{
// sprintf(szDbg, "SendAllData pnt%d val=%d", i+1, (short)aipntmsg.RawValue);
// DebugPrint(szDbg);
//}
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = ( short ) aipntmsg . RawValue ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( SendAllDataBuf . MsgLen > sizeof ( short ) )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
}
}
// <20> <> <EFBFBD> <EFBFBD> ȫң<C8AB> <D2A3>
SendAllDataBuf . MsgType = iDIALLDATA ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//SendAllDataBuf.PortNumber = sendport;
SendAllDataBuf . PortNumber = sendport + FendMsg . iPortOffset ;
SendAllDataBuf . MsgLen = 0 ;
SendAllDataBuf . EMsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = 0 ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
for ( i = 0 ; i < pSioParam [ sendport ] . m_psBaoHu - > DiNum ; i + + )
{
if ( ( MAX_RTU_MSG_SIZE - SendAllDataBuf . MsgLen ) < 8 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = i ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( GetPntMsg ( sendport , i , ( void * ) & dipntmsg , DI_PNT_TYPE , PNT_STATUS ) = = FALSE )
{
dipntmsg . Status = 0 ;
}
SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = dipntmsg . Status & 0x01 ;
SendAllDataBuf . MsgLen + = sizeof ( char ) ;
}
if ( SendAllDataBuf . MsgLen > sizeof ( short ) )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
}
/*
// <20> <> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3>
SendAllDataBuf . MsgType = iODALLDATA ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//SendAllDataBuf.PortNumber = sendport;
SendAllDataBuf . PortNumber = sendport + FendMsg . iPortOffset ;
SendAllDataBuf . MsgLen = 0 ;
SendAllDataBuf . EMsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = 0 ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
for ( i = 0 ; i < min ( PortParam [ sendport ] . RevOdNum , MAX_OD_NUM ) ; i + + )
{
if ( ( MAX_RTU_MSG_SIZE - SendAllDataBuf . MsgLen ) < 8 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = i ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( GetPntMsg ( sendport , i , & pntmsg , OD_PNT_TYPE , PNT_STATUS ) = = FALSE )
pntmsg . Status = 0 ;
SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = pntmsg . Status & 0x01 ;
SendAllDataBuf . MsgLen + = sizeof ( char ) ;
}
if ( SendAllDataBuf . MsgLen > sizeof ( short ) )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
}
*/
// <20> <> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
SendAllDataBuf . MsgType = iPIALLDATA ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//SendAllDataBuf.PortNumber = sendport;
SendAllDataBuf . PortNumber = sendport + FendMsg . iPortOffset ;
SendAllDataBuf . MsgLen = 0 ;
SendAllDataBuf . EMsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = 0 ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
for ( i = 0 ; i < pSioParam [ sendport ] . m_psBaoHu - > PiNum ; i + + )
{
if ( ( MAX_RTU_MSG_SIZE - SendAllDataBuf . MsgLen ) < 8 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
* ( short * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = i ;
SendAllDataBuf . MsgLen + = sizeof ( short ) ;
}
if ( GetPntMsg ( sendport , i , ( void * ) & pipntmsg , PI_PNT_TYPE , PNT_RAWVALUE ) = = FALSE )
{
pipntmsg . RawValue = 0 ;
}
* ( u_long * ) & SendAllDataBuf . MsgData [ SendAllDataBuf . MsgLen ] = pipntmsg . RawValue ;
SendAllDataBuf . MsgLen + = sizeof ( long ) ;
}
if ( SendAllDataBuf . MsgLen > sizeof ( short ) )
{
SendDataToAllHostSendBuf ( ( u_char * ) & SendAllDataBuf , SendAllDataBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
SendAllDataBuf . MsgLen = 0 ;
}
sendport = ( sendport + 1 ) % DEFAULT_MAX_PORT_NUM ;
}
//***************************************************************
//* <20> <> <EFBFBD> <EFBFBD> SOE <20> <> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SetSoeData ( int commidex , SOE_DEF * pSoeData )
{
int commid ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
commid = commidex + FendMsg . iPortOffset ;
gRtuChangeMsg [ SOEMSGNO ] . MsgType = iSOEDATA ;
gRtuChangeMsg [ SOEMSGNO ] . EMsgLen = 0 ;
if ( ( gRtuChangeMsg [ SOEMSGNO ] . PortNumber ! = commid )
& & gRtuChangeMsg [ SOEMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & gRtuChangeMsg [ SOEMSGNO ] , gRtuChangeMsg [ SOEMSGNO ] . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
gRtuChangeMsg [ SOEMSGNO ] . MsgLen = 0 ;
}
gRtuChangeMsg [ SOEMSGNO ] . PortNumber = commid ;
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = LOBYTE ( pSoeData - > iPntNo ) ; // point low
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = HIBYTE ( pSoeData - > iPntNo ) ; // point high
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = pSoeData - > bStatus ; // Status
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = LOBYTE ( pSoeData - > SoeTime . mSec ) ; // ms low
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = HIBYTE ( pSoeData - > SoeTime . mSec ) ; // ms high
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = ( BYTE ) pSoeData - > SoeTime . Sec ; // sec
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = ( BYTE ) pSoeData - > SoeTime . Min ; // min
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = ( BYTE ) pSoeData - > SoeTime . Hour ; // hour
gRtuChangeMsg [ SOEMSGNO ] . MsgData [ gRtuChangeMsg [ SOEMSGNO ] . MsgLen + + ] = ( BYTE ) pSoeData - > SoeTime . Day ; // day
}
//***************************************************************
//* <20> <> <EFBFBD> <EFBFBD> ң<> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> У <20> <> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void SetYkYtAckData ( int portno , char * buf )
{
int port ;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
//port = portno;
port = portno + FendMsg . iPortOffset ;
gRtuChangeMsg [ YKYTACKNO ] . MsgType = iACKDATA ;
gRtuChangeMsg [ YKYTACKNO ] . EMsgLen = 0 ;
if ( ( gRtuChangeMsg [ YKYTACKNO ] . PortNumber ! = port )
& & gRtuChangeMsg [ YKYTACKNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & gRtuChangeMsg [ YKYTACKNO ] , gRtuChangeMsg [ YKYTACKNO ] . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
gRtuChangeMsg [ YKYTACKNO ] . MsgLen = 0 ;
}
gRtuChangeMsg [ YKYTACKNO ] . PortNumber = port ;
gRtuChangeMsg [ YKYTACKNO ] . MsgData [ gRtuChangeMsg [ YKYTACKNO ] . MsgLen + + ] = buf [ 0 ] ; // Point Low
gRtuChangeMsg [ YKYTACKNO ] . MsgData [ gRtuChangeMsg [ YKYTACKNO ] . MsgLen + + ] = buf [ 1 ] ; // Point High
gRtuChangeMsg [ YKYTACKNO ] . MsgData [ gRtuChangeMsg [ YKYTACKNO ] . MsgLen + + ] = buf [ 2 ] ; // <20> <> У <EFBFBD> <D0A3>
}
void SelectHostSocketEvent ( void )
{
struct timeval timeout ;
int i , inum , nfds ;
fd_set fdset_ro , fdset_wr , fdset_ex ;
inum = 0 ;
nfds = 0 ;
FD_ZERO ( & fdset_ro ) ;
FD_ZERO ( & fdset_wr ) ;
FD_ZERO ( & fdset_ex ) ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( INVALID_SOCKET = = HostLink [ i ] . SocketId )
{
continue ;
}
inum + + ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_ro ) ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_wr ) ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_ex ) ;
if ( ( u_32 ) nfds < HostLink [ i ] . SocketId )
{
nfds = HostLink [ i ] . SocketId ;
}
}
if ( inum > 0 )
{
memset ( ( char * ) & timeout , 0 , sizeof ( struct timeval ) ) ;
// wen 2005.07.08 <20> <> <EFBFBD> ó<EFBFBD> ʱ<EFBFBD> ȴ<EFBFBD> ʱ<EFBFBD> <CAB1>
//timeout.tv_usec = 200;
if ( select ( nfds + 1 , & fdset_ro , & fdset_wr , & fdset_ex , & timeout ) < 1 )
{
return ;
}
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( INVALID_SOCKET = = HostLink [ i ] . SocketId )
{
continue ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD> socket<65> Ƿ<EFBFBD> <C7B7> 쳣
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_ex ) )
{
CloseHostSocket ( HostLink [ i ] . SocketId , ERROR_CLOSE_NET ) ;
continue ;
}
if ( TRUE = = HostLink [ i ] . InitOk )
{
// socket<65> ɶ<EFBFBD>
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_ro ) )
{
// <20> <> <EFBFBD> <EFBFBD> socket<65> е <EFBFBD> <D0B5> <EFBFBD> <EFBFBD> ݶ<EFBFBD> <DDB6> <EFBFBD>
/*
if ( ReadHost ( i ) = = FALSE )
{
// <20> ˿<EFBFBD> <CBBF> Ѿ<EFBFBD> <D1BE> ر<EFBFBD>
CloseHostSocket ( HostLink [ i ] . SocketId , HOST_CLOSE_NET ) ;
continue ;
}
else
{
ReadDataFormHost ( HostLink [ i ] . SocketId ) ;
}
*/
if ( ReadDataFormHost ( HostLink [ i ] . SocketId ) = = FALSE )
{
// <20> ر<EFBFBD> SOCKET<45> ˿<EFBFBD>
CloseHostSocket ( HostLink [ i ] . SocketId , HOST_CLOSE_NET ) ;
continue ;
}
}
}
// socket<65> <74> д
if ( FALSE = = HostLink [ i ] . InitOk )
{
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_wr ) )
{
HostConnect ( HostLink [ i ] . SocketId , 0 ) ;
}
}
}
}
}
void SelectHostSocketEventEx ( void )
{
struct timeval timeout ;
int i , nfds ; //, retval
fd_set fdset_ro , fdset_wr , fdset_ex ;
int _err = 0 ;
int _err_len = sizeof ( _err ) ;
for ( i = 0 ; i < MAX_HOST ; i + + )
{
if ( INVALID_SOCKET = = HostLink [ i ] . SocketId )
{
continue ;
}
FD_ZERO ( & fdset_ro ) ;
FD_ZERO ( & fdset_wr ) ;
FD_ZERO ( & fdset_ex ) ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_ro ) ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_wr ) ;
FD_SET ( HostLink [ i ] . SocketId , & fdset_ex ) ;
nfds = HostLink [ i ] . SocketId + 1 ;
memset ( ( char * ) & timeout , 0 , sizeof ( struct timeval ) ) ;
// wen 2005.07.08 <20> <> <EFBFBD> ó<EFBFBD> ʱ<EFBFBD> ȴ<EFBFBD> ʱ<EFBFBD> <CAB1>
//timeout.tv_usec = 200;
if ( TRUE = = HostLink [ i ] . InitOk )
{
if ( select ( nfds , & fdset_ro , & fdset_wr , & fdset_ex , & timeout ) < 1 )
{
continue ;
}
}
else
{
if ( select ( nfds , NULL , & fdset_wr , & fdset_ex , & timeout ) < 1 )
{
continue ;
}
}
# ifdef OS_WINDOWS
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD> socket<65> Ƿ<EFBFBD> <C7B7> 쳣
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_ex ) )
{
CloseHostSocket ( HostLink [ i ] . SocketId , ERROR_CLOSE_NET ) ;
continue ;
}
# endif
if ( TRUE = = HostLink [ i ] . InitOk )
{
// socket<65> ɶ<EFBFBD>
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_ro ) )
{
if ( ReadDataFormHost ( HostLink [ i ] . SocketId ) = = FALSE )
{
// <20> ر<EFBFBD> SOCKET<45> ˿<EFBFBD>
CloseHostSocket ( HostLink [ i ] . SocketId , HOST_CLOSE_NET ) ;
continue ;
}
}
}
// socket<65> <74> д
if ( FALSE = = HostLink [ i ] . InitOk )
{
if ( FD_ISSET ( HostLink [ i ] . SocketId , & fdset_wr ) )
{
//#ifdef OS_WINDOWS
HostConnect ( HostLink [ i ] . SocketId , 0 ) ;
/*#else
retval = getsockopt ( HostLink [ i ] . SocketId , SOL_SOCKET , SO_ERROR , ( char * ) & _err , & _err_len ) ;
if ( ( 0 = = retval ) & & ( _err = = 0 ) )
{
HostConnect ( HostLink [ i ] . SocketId , 0 ) ;
}
else
{
CloseHostSocket ( HostLink [ i ] . SocketId , ERROR_CLOSE_NET ) ;
}
# endif* /
}
}
}
}
void TcpHostTimer ( void )
{
//DAY_TIME sm;
//char szDbg[256];
//GetLocalTimeEx(&sm);
//sprintf(szDbg, "Begin>>> %02d:%02d:%02d.%03d\n",
// sm.Hour, sm.Min, sm.Sec, sm.mSec);
//DebugPrint(szDbg);
// <20> <> <EFBFBD> <EFBFBD>
LinkToHost ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <C7B7> ɹ<EFBFBD> <C9B9> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> Ч<EFBFBD> ˿<EFBFBD> <CBBF> <EFBFBD> <EFBFBD> ݽ<EFBFBD> <DDBD> <EFBFBD>
//SelectHostSocketEvent();
SelectHostSocketEventEx ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
SendHostSendBufToHost ( ) ;
// <20> <> <EFBFBD> Ͷ˿<CDB6> ״̬
SendPortStatusToHost ( 1 ) ;
// <20> <> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
SendPortAllDataToHost ( ) ;
// 2006.01.13 <20> <> <EFBFBD> <EFBFBD> ǰ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ķ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD>
SendSystemTimeToHost ( ) ;
}
//***************************************************************
//* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> *
//***************************************************************
void MapAnPointToHost ( int iMapOutPort , int iMapSavePort )
{
int i ;
HOSTMSG MapPointBuf ;
PROV_AI_PNT * pProvAi ;
SIO_PARAM_DEF * pSioParam ;
if ( ( iMapOutPort < 1 ) | | ( iMapSavePort < 1 ) )
{
return ;
}
pSioParam = GetSioParamPtr ( ) ;
MapPointBuf . MsgType = iANPOINT ;
MapPointBuf . PortNumber = 0 ;
MapPointBuf . MsgLen = 0 ;
pProvAi = ( PROV_AI_PNT * ) pSioParam [ iMapOutPort ] . m_psBaoHu - > AiPtr ;
for ( i = 0 ; i < pSioParam [ iMapOutPort ] . m_psBaoHu - > AiNum ; i + + )
{
if ( pProvAi [ i ] . Enable = = 0 )
{
continue ;
}
MapPointBuf . MsgData [ MapPointBuf . MsgLen + + ] = ( u_char ) pProvAi [ i ] . wType ;
MapPointBuf . MsgData [ MapPointBuf . MsgLen + + ] = ( u_char ) pProvAi [ i ] . PortNo ;
* ( short * ) & MapPointBuf . MsgData [ MapPointBuf . MsgLen ] = pProvAi [ i ] . PntNo ;
MapPointBuf . MsgLen + = 2 ;
}
SendDataToAllHostSendBuf ( ( u_char * ) & MapPointBuf , MapPointBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
}
//***************************************************************
//* <09> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> *
//***************************************************************
void MapDiPointToHost ( int iMapOutPort , int iMapSavePort )
{
int i ;
HOSTMSG MapPointBuf ;
PROV_DI_PNT * pProvDi ;
SIO_PARAM_DEF * pSioParam ;
if ( ( iMapOutPort < 1 ) | | ( iMapSavePort < 1 ) )
{
return ;
}
pSioParam = GetSioParamPtr ( ) ;
MapPointBuf . MsgType = iDIPOINT ;
MapPointBuf . PortNumber = 0 ;
MapPointBuf . MsgLen = 0 ;
pProvDi = ( PROV_DI_PNT * ) pSioParam [ iMapOutPort ] . m_psBaoHu - > DiPtr ;
for ( i = 0 ; i < pSioParam [ iMapOutPort ] . m_psBaoHu - > DiNum ; i + + )
{
if ( pProvDi [ i ] . Enable = = 0 )
{
continue ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ 'X' <20> <> <EFBFBD> <EFBFBD>
MapPointBuf . MsgData [ MapPointBuf . MsgLen + + ] = ( u_char ) ( pProvDi [ i ] . wType = = ' o ' ? ' x ' : pProvDi [ i ] . wType ) ;
MapPointBuf . MsgData [ MapPointBuf . MsgLen + + ] = ( u_char ) pProvDi [ i ] . PortNo ;
* ( short * ) & MapPointBuf . MsgData [ MapPointBuf . MsgLen ] = pProvDi [ i ] . PntNo ;
MapPointBuf . MsgLen + = 2 ;
}
SendDataToAllHostSendBuf ( ( u_char * ) & MapPointBuf , MapPointBuf . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
}
//***************************************************************
//* <20> <> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ<EFBFBD> <DDB4> <EFBFBD> *
//***************************************************************
void FormHostMapDataProce ( int iMapOutPort , int iMapSavePort , HOSTMSG * msg )
{
int i , j , iDataNum ;
float anval ;
AI_DEF aipmsg ;
DI_DEF dipmsg ;
PROV_AI_PNT * pProvAi ;
PROV_DI_PNT * pProvDi ;
SIO_PARAM_DEF * pSioParam ;
if ( ( iMapOutPort < 1 ) | | ( iMapSavePort < 1 ) )
{
return ;
}
pSioParam = GetSioParamPtr ( ) ;
if ( msg - > MsgType = = hMAPANDATA )
{
pProvAi = ( PROV_AI_PNT * ) pSioParam [ iMapOutPort ] . m_psBaoHu - > AiPtr ;
iDataNum = pSioParam [ iMapOutPort ] . m_psBaoHu - > AiNum ;
for ( i = j = 0 ; ( i < iDataNum ) & & ( ( j + 4 ) < = ( int ) msg - > MsgLen ) ; i + + )
{
if ( pProvAi [ i ] . Enable = = 0 )
{
continue ;
}
anval = * ( float * ) & msg - > MsgData [ j ] ;
j + = 4 ;
aipmsg . RawValue = ( int ) ( anval * pProvAi [ i ] . fFactor ) ;
SetPntMsg ( iMapSavePort - 1 , i , ( void * ) & aipmsg , AI_PNT_TYPE , PNT_RAWVALUE ) ;
}
}
else if ( msg - > MsgType = = hMAPDIDATA )
{
pProvDi = ( PROV_DI_PNT * ) pSioParam [ iMapOutPort ] . m_psBaoHu - > DiPtr ;
iDataNum = pSioParam [ iMapOutPort ] . m_psBaoHu - > DiNum ;
for ( i = j = 0 ; ( i < iDataNum ) & & ( j < ( int ) msg - > MsgLen ) ; i + + , j + + )
{
if ( pProvDi [ i ] . Enable = = 0 )
{
continue ;
}
dipmsg . Status = ( msg - > MsgData [ j ] & 0x01 ) ;
SetPntMsg ( iMapSavePort - 1 , i , ( void * ) & dipmsg , DI_PNT_TYPE , PNT_STATUS ) ;
}
}
}
int GetFendTxdFlag ( void )
{
// wen 2006.04.26 <20> <> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <D0A3> <EFBFBD> <EFBFBD> ·<EFBFBD> <C2B7> <EFBFBD> ʶΪ<CAB6> <CEAA>
if ( RUN_MODE_ALLHOT = = FendMsg . iRunMode )
{
return TRUE ;
}
return FendMsg . SendTxdDataFlag [ FendMsg . FendIdx ] ;
}
int CheckIsFendIpAddr ( u_long addr )
{
int i ;
bool bRetVal ;
u_long uFendAddr ;
bRetVal = false ;
for ( i = 0 ; i < MAX_FEND * MAX_ADDR ; i + + )
{
uFendAddr = ntohl ( inet_addr ( FendMsg . SetTcpIpAddr [ i ] ) ) ;
if ( uFendAddr = = addr )
{
bRetVal = true ;
break ;
}
}
return bRetVal ;
}
//***************************************************************
//* д<> 仯<EFBFBD> <E4BBAF> <EFBFBD> ݵ<EFBFBD> <DDB5> 仯<EFBFBD> <E4BBAF> <EFBFBD> ݻ<EFBFBD> <DDBB> <EFBFBD> <EFBFBD> <EFBFBD> *
//***************************************************************
void WriteChangeData ( int commidex , int point , void * pntmsg , BYTE type )
{
//char szDbg[256];
AI_DEF * aiptr ;
DI_DEF * diptr ;
PI_DEF * piptr ;
HOSTMSG * pRtuChangeMsg ;
int commid ;
//if (WriteChangeFlag == 0)
// return;
// wen 2006.01.14 <20> <> <EFBFBD> Ӷ˿<D3B6> ƫ<EFBFBD> <C6AB>
commid = commidex + FendMsg . iPortOffset ;
pRtuChangeMsg = GetRtuChangeMsgPtr ( ) ;
switch ( type )
{
case AI_PNT_TYPE :
// wen 2006.05.20 <20> <> <EFBFBD> <EFBFBD> 32bitģ<74> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( FendMsg . iSendAiof32Bit )
{
aiptr = ( AI_DEF * ) pntmsg ;
pRtuChangeMsg [ AIMSGNO ] . MsgType = PGC3_AI32DATA ;
pRtuChangeMsg [ AIMSGNO ] . EMsgLen = 0 ;
if ( ( pRtuChangeMsg [ AIMSGNO ] . PortNumber ! = commid )
& & pRtuChangeMsg [ AIMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ AIMSGNO ] , pRtuChangeMsg [ AIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen = 0 ;
}
pRtuChangeMsg [ AIMSGNO ] . PortNumber = commid ;
if ( ( MAX_RTU_MSG_SIZE - pRtuChangeMsg [ AIMSGNO ] . MsgLen ) < 12 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ AIMSGNO ] , pRtuChangeMsg [ AIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen = 0 ;
}
* ( short * ) & ( pRtuChangeMsg [ AIMSGNO ] . MsgData [ pRtuChangeMsg [ AIMSGNO ] . MsgLen ] ) = point ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen + = sizeof ( short ) ;
* ( long * ) & ( pRtuChangeMsg [ AIMSGNO ] . MsgData [ pRtuChangeMsg [ AIMSGNO ] . MsgLen ] ) = ( long ) aiptr - > RawValue ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen + = sizeof ( long ) ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> 16bitģ<74> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
aiptr = ( AI_DEF * ) pntmsg ;
pRtuChangeMsg [ AIMSGNO ] . MsgType = iAIDATA ;
pRtuChangeMsg [ AIMSGNO ] . EMsgLen = 0 ;
if ( ( pRtuChangeMsg [ AIMSGNO ] . PortNumber ! = commid )
& & pRtuChangeMsg [ AIMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ AIMSGNO ] , pRtuChangeMsg [ AIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen = 0 ;
}
pRtuChangeMsg [ AIMSGNO ] . PortNumber = commid ;
if ( ( MAX_RTU_MSG_SIZE - pRtuChangeMsg [ AIMSGNO ] . MsgLen ) < 12 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ AIMSGNO ] , pRtuChangeMsg [ AIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen = 0 ;
}
* ( short * ) & ( pRtuChangeMsg [ AIMSGNO ] . MsgData [ pRtuChangeMsg [ AIMSGNO ] . MsgLen ] ) = point ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen + = sizeof ( short ) ;
* ( short * ) & ( pRtuChangeMsg [ AIMSGNO ] . MsgData [ pRtuChangeMsg [ AIMSGNO ] . MsgLen ] ) = ( short ) ( aiptr - > RawValue & 0x0000ffff ) ;
pRtuChangeMsg [ AIMSGNO ] . MsgLen + = sizeof ( short ) ;
// test
//if(point == 1)
//{
// sprintf(szDbg, "AIChange: pnt=%d val=%d", point, (short)(aiptr->RawValue & 0x0000ffff));
// DebugPrint(szDbg);
//}
break ;
case DI_PNT_TYPE :
diptr = ( DI_DEF * ) pntmsg ;
//if(PortParam[port].SoeInsertFlag)
// MakeSoeData(port, point, pntmsg->Status & 0x01);
pRtuChangeMsg [ DIMSGNO ] . MsgType = iDIDATA ;
pRtuChangeMsg [ DIMSGNO ] . EMsgLen = 0 ;
if ( ( pRtuChangeMsg [ DIMSGNO ] . PortNumber ! = commid )
& & pRtuChangeMsg [ DIMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ DIMSGNO ] , pRtuChangeMsg [ DIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ DIMSGNO ] . MsgLen = 0 ;
}
pRtuChangeMsg [ DIMSGNO ] . PortNumber = commid ;
if ( ( MAX_RTU_MSG_SIZE - pRtuChangeMsg [ DIMSGNO ] . MsgLen ) < 12 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ DIMSGNO ] , pRtuChangeMsg [ DIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ DIMSGNO ] . MsgLen = 0 ;
}
* ( short * ) & ( pRtuChangeMsg [ DIMSGNO ] . MsgData [ pRtuChangeMsg [ DIMSGNO ] . MsgLen ] ) = point ;
pRtuChangeMsg [ DIMSGNO ] . MsgLen + = sizeof ( short ) ;
pRtuChangeMsg [ DIMSGNO ] . MsgData [ pRtuChangeMsg [ DIMSGNO ] . MsgLen ] = diptr - > Status & 0x01 ;
pRtuChangeMsg [ DIMSGNO ] . MsgLen + = sizeof ( BYTE ) ;
break ;
case OD_PNT_TYPE :
/*
pRtuChangeMsg [ ODMSGNO ] . MsgType = iODDATA ;
pRtuChangeMsg [ ODMSGNO ] . EMsgLen = 0 ;
if ( ( pRtuChangeMsg [ ODMSGNO ] . PortNumber ! = commid )
& & pRtuChangeMsg [ ODMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ ODMSGNO ] , pRtuChangeMsg [ ODMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ ODMSGNO ] . MsgLen = 0 ;
}
pRtuChangeMsg [ ODMSGNO ] . PortNumber = commid ;
if ( ( MAX_RTU_MSG_SIZE - pRtuChangeMsg [ ODMSGNO ] . MsgLen ) < 12 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ ODMSGNO ] , pRtuChangeMsg [ ODMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ ODMSGNO ] . MsgLen = 0 ;
}
* ( short * ) & ( pRtuChangeMsg [ ODMSGNO ] . MsgData [ pRtuChangeMsg [ ODMSGNO ] . MsgLen ] ) = point ;
pRtuChangeMsg [ ODMSGNO ] . MsgLen + = sizeof ( short ) ;
pRtuChangeMsg [ ODMSGNO ] . MsgData [ pRtuChangeMsg [ ODMSGNO ] . MsgLen ] = pntmsg - > Status & 0x01 ;
pRtuChangeMsg [ ODMSGNO ] . MsgLen + = sizeof ( BYTE ) ;
*/
break ;
case PI_PNT_TYPE :
piptr = ( PI_DEF * ) pntmsg ;
pRtuChangeMsg [ PIMSGNO ] . MsgType = iPIDATA ;
pRtuChangeMsg [ PIMSGNO ] . EMsgLen = 0 ;
if ( ( pRtuChangeMsg [ PIMSGNO ] . PortNumber ! = commid )
& & pRtuChangeMsg [ PIMSGNO ] . MsgLen )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ PIMSGNO ] , pRtuChangeMsg [ PIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ PIMSGNO ] . MsgLen = 0 ;
}
pRtuChangeMsg [ PIMSGNO ] . PortNumber = commid ;
if ( ( MAX_RTU_MSG_SIZE - pRtuChangeMsg [ PIMSGNO ] . MsgLen ) < 12 )
{
SendDataToAllHostSendBuf ( ( u_char * ) & pRtuChangeMsg [ PIMSGNO ] , pRtuChangeMsg [ PIMSGNO ] . MsgLen + sizeof ( RTUMSGHEAD ) ) ;
pRtuChangeMsg [ PIMSGNO ] . MsgLen = 0 ;
}
* ( short * ) & ( pRtuChangeMsg [ PIMSGNO ] . MsgData [ pRtuChangeMsg [ PIMSGNO ] . MsgLen ] ) = point ;
pRtuChangeMsg [ PIMSGNO ] . MsgLen + = sizeof ( short ) ;
* ( u_long * ) & ( pRtuChangeMsg [ PIMSGNO ] . MsgData [ pRtuChangeMsg [ PIMSGNO ] . MsgLen ] ) = piptr - > RawValue ;
pRtuChangeMsg [ PIMSGNO ] . MsgLen + = sizeof ( long ) ;
break ;
}
//WriteProvChangeData(pntmsg, type);
}
// <20> жϸö˿<C3B6> <CBBF> Ƿ<EFBFBD> <C7B7> ·<EFBFBD> <C2B7> <EFBFBD> <EFBFBD> <EFBFBD>
BOOL IsSendDatatoPort ( int port )
{
FEND_DEF * pFendMsg ;
SIO_PARAM_DEF * pSioParam ;
//char szDbg[256];
//static int test=0;
BOOL bReturn = TRUE ;
# ifdef PC_MACHINE // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> windowsģ<73> <EFBFBD> <E2BBB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч
# if (FEND_OTHERDEV_DS3116 == 1)
return TRUE ;
# endif
# endif
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// wen 2006.01.14 <20> <> <EFBFBD> Ӳ<EFBFBD> <D3B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> з<EFBFBD> ʽ
/*
pFendMsg = GetFendMsgPtr ( ) ;
if ( port < 0 )
{
if ( pFendMsg - > SendTxdDataFlag [ pFendMsg - > FendIdx ] = = FALSE )
{
bReturn = FALSE ;
}
}
else
{
pSioParam = GetSioParamPtr ( ) ;
switch ( pSioParam [ port ] . iForceSendFlag )
{
case 1 : // ǿ<> <C7BF> <EFBFBD> ·<EFBFBD>
//bReturn = TRUE;
break ;
case 2 : // ǿ<> Ʋ<EFBFBD> <C6B2> ·<EFBFBD>
bReturn = FALSE ;
break ;
case 0 : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
default :
// <20> <> ǰ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> û<EFBFBD>
if ( pFendMsg - > SendTxdDataFlag [ pFendMsg - > FendIdx ] = = FALSE )
{
bReturn = FALSE ;
}
break ;
}
}
*/
//================================================================================
pFendMsg = GetFendMsgPtr ( ) ;
if ( port < 0 )
{
if ( RUN_MODE_ALLHOT = = pFendMsg - > iRunMode )
{
bReturn = TRUE ;
}
else if ( pFendMsg - > SendTxdDataFlag [ pFendMsg - > FendIdx ] = = FALSE )
{
bReturn = FALSE ;
}
}
else
{
pSioParam = GetSioParamPtr ( ) ;
switch ( pSioParam [ port ] . iForceSendFlag )
{
case 1 : // ǿ<> <C7BF> <EFBFBD> ·<EFBFBD>
//bReturn = TRUE;
break ;
case 2 : // ǿ<> Ʋ<EFBFBD> <C6B2> ·<EFBFBD>
bReturn = FALSE ;
break ;
case 0 : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
default :
// <20> <> ǰ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> û<EFBFBD>
if ( RUN_MODE_ALLHOT = = pFendMsg - > iRunMode )
{
bReturn = TRUE ;
}
else if ( pFendMsg - > SendTxdDataFlag [ pFendMsg - > FendIdx ] = = FALSE )
{
bReturn = FALSE ;
}
break ;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ط<EFBFBD> <D8B7> <EFBFBD> <EFBFBD> ã<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ20ms<6D> <73> 20<32> <30> 200=4000ms<6D> <73> 2=2s
//if(test == 200)
//{
// sprintf(szDbg, "port=%d, SendTxd=%d", port, bReturn);
// DebugPrint(szDbg);
// test = 0;
//}
//else
//{
// test++;
//}
return bReturn ;
}
TCP_LINK_DEF * GetHostLinkPtr ( )
{
return HostLink ;
}
FEND_DEF * GetFendMsgPtr ( )
{
return & FendMsg ;
}
HOSTMSG * GetRtuChangeMsgPtr ( )
{
return gRtuChangeMsg ;
}
#if 0
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> ˳<EFBFBD> <CBB3> ת<EFBFBD> <D7AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
BOOL AllDataHostToRtuByteSequence ( HOSTMSG * hmsg , ORTUMSG * pSendMsg )
{
int i ;
BOOL bRetVal ;
WORD * pWord , * pwSour ;
int * piSour , * piDest ;
long * plSour , * plDest ;
float * pfSour , * pfDest ;
SYSTEMTIME * pTime ;
bRetVal = TRUE ;
switch ( hmsg - > MsgType )
{
case iREQUESTHOSTSTATUS : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬
bRetVal = FALSE ;
break ;
case iTIMEINFORM : // ǰ<> û<EFBFBD> <C3BB> <EFBFBD> ʱ
pTime = ( SYSTEMTIME * ) hmsg - > MsgData ;
pWord = ( WORD * ) pSendMsg - > MsgData ;
pWord [ 0 ] = SequenceHostToRtuWord ( pTime - > wYear ) ;
pWord [ 1 ] = SequenceHostToRtuWord ( pTime - > wMonth ) ;
pWord [ 2 ] = SequenceHostToRtuWord ( pTime - > wDay ) ;
pWord [ 3 ] = SequenceHostToRtuWord ( pTime - > wHour ) ;
pWord [ 4 ] = SequenceHostToRtuWord ( pTime - > wMinute ) ;
pWord [ 5 ] = SequenceHostToRtuWord ( pTime - > wSecond ) ;
pWord [ 6 ] = SequenceHostToRtuWord ( pTime - > wMilliseconds ) ;
break ;
case iAIDATA : // <20> 仯ң<E4BBAF> <D2A3>
case iAIALLDATA : // ң<> <D2A3> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
pWord = ( WORD * ) pSendMsg - > MsgData ;
pwSour = ( WORD * ) hmsg - > MsgData ;
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 2 )
{
if ( ( i + 2 ) > hmsg - > MsgLen )
{
break ;
}
pWord [ i / 2 ] = SequenceHostToRtuWord ( pwSour [ i / 2 ] ) ;
}
break ;
// wen 2006.05.20 32bit<69> <74> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> ͵<EFBFBD> <CDB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ һ <CABD> <D2BB> )
case PGC3_AI32DATA : // <20> 仯32λң<CEBB> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 6 )
{
if ( ( i + 6 ) > hmsg - > MsgLen )
{
break ;
}
pWord = ( WORD * ) & pSendMsg - > MsgData [ i ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ i ] ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
plDest = ( long * ) & pSendMsg - > MsgData [ i + 2 ] ;
plSour = ( long * ) & hmsg - > MsgData [ i + 2 ] ;
* plDest = SequenceHostToRtulong ( * plSour ) ;
}
break ;
case PGC3_AI32ALLDATA : // ң<> <D2A3> 32λȫ<CEBB> <C8AB> <EFBFBD> <EFBFBD>
pWord = ( WORD * ) & pSendMsg - > MsgData ;
pwSour = ( WORD * ) & hmsg - > MsgData ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
plDest = ( long * ) & pSendMsg - > MsgData [ 2 ] ;
plSour = ( long * ) & hmsg - > MsgData [ 2 ] ;
for ( i = 2 ; i < hmsg - > MsgLen ; i + = 4 )
{
if ( ( i + 4 ) > hmsg - > MsgLen )
{
break ;
}
plDest [ ( i - 2 ) / 4 ] = SequenceHostToRtulong ( plSour [ ( i - 2 ) / 4 ] ) ;
}
break ;
case iDIDATA : // <20> 仯ң<E4BBAF> <D2A3>
case iODDATA : // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 3 )
{
if ( ( i + 3 ) > hmsg - > MsgLen )
{
break ;
}
pWord = ( WORD * ) & pSendMsg - > MsgData [ i ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ i ] ;
// wen 2006.05.20 <20> <EFBFBD> ң<EFBFBD> ű仯<C5B1> <E4BBAF> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> ת<EFBFBD> <D7AA> <EFBFBD> <EFBFBD> bug<75> <67> Ӧ<EFBFBD> <D3A6> ΪWORD<52> <44> <EFBFBD> <EFBFBD>
//*pWord = SequenceHostToRtuDWord(*pwSour);
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
pSendMsg - > MsgData [ i + 2 ] = hmsg - > MsgData [ i + 2 ] ;
}
break ;
case iPIDATA : // <20> 仯<EFBFBD> <E4BBAF> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 6 )
{
if ( ( i + 6 ) > hmsg - > MsgLen )
{
break ;
}
pWord = ( WORD * ) & pSendMsg - > MsgData [ i ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ i ] ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
plDest = ( long * ) & pSendMsg - > MsgData [ i + 2 ] ;
plSour = ( long * ) & hmsg - > MsgData [ i + 2 ] ;
* plDest = SequenceHostToRtulong ( * plSour ) ;
}
break ;
case iSOEDATA : // SOE <20> <> <EFBFBD> <EFBFBD>
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iACKDATA : // ң<> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> У
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case WUXI_ZHUANFA_AI_TO_HOST :
pfDest = ( float * ) pSendMsg - > MsgData ;
pfSour = ( float * ) hmsg - > MsgData ;
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 4 )
{
if ( ( i + 4 ) > hmsg - > MsgLen )
{
break ;
}
* pfDest = SequenceHostToRtufloat ( * pfSour ) ;
}
break ;
case WUXI_ZHUANFA_PI_TO_HOST :
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iODALLDATA : // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iWUFANGYKYTREQ : // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 8 )
{
if ( ( i + 8 ) > hmsg - > MsgLen )
{
break ;
}
pWord = ( WORD * ) & pSendMsg - > MsgData [ i ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ i ] ;
pWord [ 0 ] = SequenceHostToRtuWord ( pwSour [ 0 ] ) ;
pWord [ 1 ] = SequenceHostToRtuWord ( pwSour [ 1 ] ) ;
piDest = ( int * ) & pSendMsg - > MsgData [ i + 4 ] ;
piSour = ( int * ) & hmsg - > MsgData [ i + 4 ] ;
* piDest = SequenceHostToRtuint ( * piSour ) ;
}
break ;
case iDIALLDATA : // ң<> <D2A3> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
pWord = ( WORD * ) & pSendMsg - > MsgData ;
pwSour = ( WORD * ) & hmsg - > MsgData ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
memcpy ( & pSendMsg - > MsgData [ 2 ] , & hmsg - > MsgData [ 2 ] , hmsg - > MsgLen - 2 ) ;
break ;
case iPIALLDATA : // <20> <> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD>
pWord = ( WORD * ) & pSendMsg - > MsgData ;
pwSour = ( WORD * ) & hmsg - > MsgData ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
plDest = ( long * ) & pSendMsg - > MsgData [ 2 ] ;
plSour = ( long * ) & hmsg - > MsgData [ 2 ] ;
for ( i = 2 ; i < hmsg - > MsgLen ; i + = 4 )
{
if ( ( i + 4 ) > hmsg - > MsgLen )
{
break ;
}
plDest [ ( i - 2 ) / 4 ] = SequenceHostToRtulong ( plSour [ ( i - 2 ) / 4 ] ) ;
}
break ;
case iBYPASSDATA : // ֱͨ<D6B1> <CDA8> <EFBFBD> <EFBFBD>
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iODPOINT : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iANPOINT : // <20> <> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
case iDIPOINT : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < hmsg - > MsgLen ; i + = 4 )
{
if ( ( i + 4 ) > hmsg - > MsgLen )
{
break ;
}
pSendMsg - > MsgData [ i ] = hmsg - > MsgData [ i ] ;
pSendMsg - > MsgData [ i + 1 ] = hmsg - > MsgData [ i + 1 ] ;
pWord = ( WORD * ) & pSendMsg - > MsgData [ i + 2 ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ i + 2 ] ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
}
break ;
case iLINESTATUS : // <20> ˿<EFBFBD> <CBBF> <EFBFBD> ·״̬
memcpy ( pSendMsg - > MsgData , hmsg - > MsgData , hmsg - > MsgLen ) ;
break ;
case iNETTESTMSG : // <20> <> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC>
break ;
case iNETNAMEPLATE : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE>
pSendMsg - > MsgData [ 0 ] = hmsg - > MsgData [ 0 ] ;
pWord = ( WORD * ) & pSendMsg - > MsgData [ 1 ] ;
pwSour = ( WORD * ) & hmsg - > MsgData [ 1 ] ;
* pWord = SequenceHostToRtuWord ( * pwSour ) ;
break ;
default :
bRetVal = FALSE ;
break ;
}
if ( bRetVal = = TRUE )
{
pSendMsg - > MsgType = ( BYTE ) hmsg - > MsgType ;
pSendMsg - > PortNumber = ( BYTE ) hmsg - > PortNumber ;
pSendMsg - > MsgLen = SequenceHostToRtuWord ( hmsg - > MsgLen ) ;
}
return bRetVal ;
}
BOOL AllDataRtuToHostByteSequence ( HOSTMSG * hmsg )
{
int i ;
BOOL bRetVal ;
SYSTEMTIME * pTime ;
bRetVal = TRUE ;
switch ( hmsg - > MsgType )
{
case hHOSTSTATUS : // <20> <> <EFBFBD> <EFBFBD> ״̬
for ( i = 0 ; i < MAX_HOST ; i + + )
{
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ i * sizeof ( int ) ] , sizeof ( int ) ) ;
}
break ;
case NET_PROFILE_UPDATE : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ·<EFBFBD> <C2B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݿ<EFBFBD> ָ<EFBFBD> <D6B8>
break ;
case hTIMEINFORM : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ
pTime = ( SYSTEMTIME * ) hmsg - > MsgData ;
pTime - > wYear = SequenceRtuToHostWord ( pTime - > wYear ) ;
pTime - > wMonth = SequenceRtuToHostWord ( pTime - > wMonth ) ;
pTime - > wDay = SequenceRtuToHostWord ( pTime - > wDay ) ;
pTime - > wHour = SequenceRtuToHostWord ( pTime - > wHour ) ;
pTime - > wMinute = SequenceRtuToHostWord ( pTime - > wMinute ) ;
pTime - > wSecond = SequenceRtuToHostWord ( pTime - > wSecond ) ;
pTime - > wMilliseconds = SequenceRtuToHostWord ( pTime - > wMilliseconds ) ;
break ;
case hYKYTCMD : // ң<> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( hmsg - > MsgLen > = 10 ) // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
// ??? <20> <> ֡<EFBFBD> Ľṹ
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 1 ] , 2 ) ;
}
else
{
// ң<> <D2A3> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> У ʧ<D0A3> <CAA7>
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 1 ] , 2 ) ;
}
break ;
case hBYPASSCMD : // ֱͨ<D6B1> <CDA8> <EFBFBD> <EFBFBD>
break ;
case hMAPANDATA : // ģ<> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( i = 0 ; i < ( int ) hmsg - > MsgLen ; i + = 4 )
{
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ i ] , sizeof ( float ) ) ;
}
break ;
case hMAPDIDATA : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
break ;
case hDATA_OUTPUT_CTRL : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
break ;
case hRELOADDATABASE : // <20> <> <EFBFBD> <EFBFBD> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> ݿ<EFBFBD>
break ;
case hNETTESTMSG : // <20> <> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC>
break ;
case hMAPALLOP : // ģ<> <C4A3> <EFBFBD> <EFBFBD> ȫ<EFBFBD> ̲<EFBFBD> <CCB2> <EFBFBD>
switch ( hmsg - > MsgData [ 0 ] )
{
case 0 : // ȫ<> <C8AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 1 ] , sizeof ( DWORD ) ) ;
break ;
case 1 : // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> <D2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 1 ] , sizeof ( WORD ) ) ;
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 3 ] , sizeof ( float ) ) ;
break ;
case 2 : // <20> <> <EFBFBD> <EFBFBD> ң<EFBFBD> Ų<EFBFBD> <C5B2> <EFBFBD>
SequenceRtuToHost ( ( char * ) & hmsg - > MsgData [ 1 ] , sizeof ( WORD ) ) ;
break ;
}
break ;
default :
bRetVal = FALSE ;
break ;
}
return bRetVal ;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void SendSystemTimeToHost ( void )
{
static WORD tmpm = 0 ;
DAY_TIME CurTime ;
HOSTMSG rtumsg ;
if ( ( SystemTimeFlag = = 0 ) | | ( SystemTimeMode ! = 3 ) )
{
return ;
}
GetLocalTimeEx ( & CurTime ) ;
if ( CurTime . Sec )
{
return ;
}
if ( tmpm = = CurTime . Min )
{
return ;
}
tmpm = CurTime . Min ;
* ( WORD * ) & rtumsg . MsgData [ 0 ] = CurTime . Year ;
* ( WORD * ) & rtumsg . MsgData [ 2 ] = CurTime . Month ;
* ( WORD * ) & rtumsg . MsgData [ 4 ] = 0 ;
* ( WORD * ) & rtumsg . MsgData [ 6 ] = CurTime . Day ;
* ( WORD * ) & rtumsg . MsgData [ 8 ] = CurTime . Hour ;
* ( WORD * ) & rtumsg . MsgData [ 10 ] = CurTime . Min ;
* ( WORD * ) & rtumsg . MsgData [ 12 ] = CurTime . Sec ;
* ( WORD * ) & rtumsg . MsgData [ 14 ] = CurTime . mSec ;
rtumsg . MsgType = iTIMEINFORM ;
rtumsg . PortNumber = 0 ;
rtumsg . MsgLen = 16 ;
SendDataToAllHostSendBuf ( ( u_char * ) & rtumsg , rtumsg . MsgLen + sizeof ( HOSTMSGHEAD ) ) ;
}
# endif