Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
e533def1
Commit
e533def1
authored
Dec 14, 2010
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UDP: сделал пакет постоянной длины..
parent
eadf8b95
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
121 additions
and
54 deletions
+121
-54
Makefile.am
extensions/UDPExchange/Makefile.am
+4
-2
UDPExchange.cc
extensions/UDPExchange/UDPExchange.cc
+16
-21
UDPExchange.h
extensions/UDPExchange/UDPExchange.h
+2
-4
UDPNReceiver.cc
extensions/UDPExchange/UDPNReceiver.cc
+39
-7
UDPNReceiver.h
extensions/UDPExchange/UDPNReceiver.h
+4
-1
UDPPacket.cc
extensions/UDPExchange/UDPPacket.cc
+11
-6
UDPPacket.h
extensions/UDPExchange/UDPPacket.h
+20
-7
UDPReceiver.cc
extensions/UDPExchange/UDPReceiver.cc
+21
-2
UDPReceiver.h
extensions/UDPExchange/UDPReceiver.h
+1
-1
start_fg2.sh
extensions/UDPExchange/start_fg2.sh
+2
-2
start_fg_receiver.sh
extensions/UDPExchange/start_fg_receiver.sh
+1
-1
No files found.
extensions/UDPExchange/Makefile.am
View file @
e533def1
bin_PROGRAMS
=
@PACKAGE@-udpexchange @PACKAGE@-udpsender @PACKAGE@-udpreceiver
bin_PROGRAMS
=
@PACKAGE@-udpexchange @PACKAGE@-udpreceiver
#@PACKAGE@-udpsender
lib_LTLIBRARIES
=
libUniSetUDP.la
libUniSetUDP_la_LIBADD
=
$(top_builddir)
/lib/libUniSet.la
\
...
...
@@ -6,8 +7,9 @@ libUniSetUDP_la_LIBADD = $(top_builddir)/lib/libUniSet.la \
$(top_builddir)
/extensions/lib/libUniSetExtensions.la
\
$(SIGC_LIBS)
$(COMCPP_LIBS)
libUniSetUDP_la_CXXFLAGS
=
-I
$(top_builddir)
/extensions/include
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
libUniSetUDP_la_SOURCES
=
UDPPacket.cc UDPExchange.cc UDP
Sender.cc UDP
NReceiver.cc UDPReceiver.cc
libUniSetUDP_la_SOURCES
=
UDPPacket.cc UDPExchange.cc UDPNReceiver.cc UDPReceiver.cc
#UDPSender.cc
#UDPSender.cc
@PACKAGE@
_udpexchange_SOURCES
=
udpexchange.cc
...
...
extensions/UDPExchange/UDPExchange.cc
View file @
e533def1
...
...
@@ -231,35 +231,28 @@ void UDPExchange::send()
h
.
dcount
=
mypack
.
size
();
h
.
num
=
packetnum
++
;
mypack
.
msg
.
header
=
h
;
/*
int ind = 0;
memcpy(udpbuf,(char*)(&h),sizeof(h));
ind += sizeof(h);
UniSetUDP
::
UDPMessage
::
UDPDataList
::
iterator
it
=
mypack
.
dlist
.
begin
();
for
(
;
it
!=
mypack
.
dlist
.
end
();
++
it
)
{
memcpy
(
&
(
udpbuf
[
ind
]),
&
(
*
it
),
sizeof
(
UniSetUDP
::
UDPData
));
ind
+=
sizeof
(
UniSetUDP
::
UDPData
);
if
(
ind
>=
MaxDataLen
)
{
cerr
<<
myname
<<
"(send data): data len > "
<<
MaxDataLen
<<
"!!!!"
<<
endl
;
return
;
}
}
memcpy( &(udpbuf[ind]),&(mypack.data),mypack.size());
ind += mypack.size();
*/
if
(
udp
->
isPending
(
ost
::
Socket
::
pendingOutput
)
)
{
ssize_t
ret
=
udp
->
send
(
udpbuf
,
ind
);
if
(
ret
<
(
ssize_t
)
ind
)
ssize_t
ret
=
udp
->
send
(
(
char
*
)
&
(
mypack
.
msg
),
sizeof
(
mypack
.
msg
)
);
if
(
ret
<
sizeof
(
mypack
.
msg
)
)
{
cerr
<<
myname
<<
"(send data header): ret="
<<
ret
<<
"
byte count="
<<
ind
<<
endl
;
cerr
<<
myname
<<
"(send data header): ret="
<<
ret
<<
"
sizeof="
<<
sizeof
(
mypack
.
msg
)
<<
endl
;
return
;
}
cout
<<
"send OK. byte count="
<<
ret
<<
endl
;
}
#if 0
/*
if( udp->isPending(ost::Socket::pendingOutput) )
...
...
@@ -443,8 +436,10 @@ void UDPExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
{
uniset_spin_lock
lock
(
it
->
val_lock
);
it
->
val
=
sm
->
value
;
if
(
it
->
pack_it
!=
mypack
.
dlist
.
end
()
)
it
->
pack_it
->
val
=
sm
->
value
;
/*
if( it->pack_ind != -1 )
mypack.it->pack_it->val = sm->value;
*/
}
break
;
}
...
...
@@ -557,9 +552,9 @@ bool UDPExchange::initItem( UniXML_iterator& it )
p
.
si
.
id
=
sid
;
p
.
si
.
node
=
conf
->
getLocalNode
();
mypack
.
addData
(
sid
,
0
);
p
.
pack_i
t
=
(
mypack
.
dlist
.
end
()
--
)
;
p
.
pack_i
nd
=
mypack
.
size
()
-
1
;
if
(
maxItem
>=
dlist
.
size
()
)
if
(
maxItem
>=
mypack
.
size
()
)
dlist
.
resize
(
maxItem
+
10
);
dlist
[
maxItem
]
=
p
;
...
...
extensions/UDPExchange/UDPExchange.h
View file @
e533def1
...
...
@@ -38,7 +38,8 @@ class UDPExchange:
IOController
::
AIOStateList
::
iterator
ait
;
IOController
::
DIOStateList
::
iterator
dit
;
UniSetTypes
::
uniset_spin_mutex
val_lock
;
UniSetUDP
::
UDPMessage
::
UDPDataList
::
iterator
pack_it
;
// UniSetUDP::UDPMessage::UDPDataList::iterator pack_it;
int
pack_ind
;
long
val
;
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
UItem
&
p
);
...
...
@@ -113,9 +114,6 @@ class UDPExchange:
ReceiverList
rlist
;
ThreadCreator
<
UDPExchange
>*
thr
;
static
const
int
MaxDataLen
=
8192
;
char
udpbuf
[
MaxDataLen
];
long
packetnum
;
};
// -----------------------------------------------------------------------------
...
...
extensions/UDPExchange/UDPNReceiver.cc
View file @
e533def1
...
...
@@ -86,25 +86,30 @@ void UDPNReceiver::recv()
cout
<<
myname
<<
": recv....(timeout="
<<
recvTimeout
<<
")"
<<
endl
;
// UniSetUDP::UDPHeader h;
// receive
UniSetUDP
::
UDPMessage
pack
;
if
(
udp
->
isInputReady
(
recvTimeout
)
)
{
/*
ssize_t ret = udp->UDPReceive::receive(&h,sizeof(h));
if( ret<(ssize_t)sizeof(h) )
ssize_t
ret
=
udp
->
UDPReceive
::
receive
(
&
(
pack
.
msg
),
sizeof
(
pack
.
msg
));
if
(
ret
<
(
ssize_t
)
sizeof
(
pack
.
msg
)
)
{
cerr << myname << "(receive): ret=" << ret << " sizeof=" << sizeof(
h
) << endl;
cerr
<<
myname
<<
"(receive): ret="
<<
ret
<<
" sizeof="
<<
sizeof
(
pack
.
msg
)
<<
endl
;
return
;
}
cerr
<<
myname
<<
"(receive): OK. ret="
<<
ret
<<
" sizeof="
<<
sizeof
(
pack
.
msg
)
<<
endl
;
}
/*
cout << myname << "(receive): header: " << h << endl;
if( h.dcount <=0 )
{
cout << " data=0" << endl;
return;
}
*/
UniSetUDP::UDPData d;
// ignore echo...
*/
#if 0
if( h.nodeID == conf->getLocalNode() && h.procID == getId() )
{
...
...
@@ -116,7 +121,8 @@ void UDPNReceiver::recv()
}
return;
}
#endif
#endif
#if 0
//cout << "***** request: " << udp->UDPSocket::getIPV4Peer() << endl;
for( int i=0; i<100;i++ )
{
...
...
@@ -134,5 +140,31 @@ void UDPNReceiver::recv()
// {
// cout << "no InputReady.." << endl;
// }
#endif
}
// -----------------------------------------------------------------------------
UDPNReceiver
*
UDPNReceiver
::
init_udpreceiver
(
int
argc
,
char
*
argv
[],
UniSetTypes
::
ObjectId
icID
,
SharedMemory
*
ic
)
{
string
name
=
conf
->
getArgParam
(
"--udp-name"
,
"UDPReceiver1"
);
if
(
name
.
empty
()
)
{
cerr
<<
"(udpexchange): Не задан name'"
<<
endl
;
return
0
;
}
ObjectId
ID
=
conf
->
getObjectID
(
name
);
if
(
ID
==
UniSetTypes
::
DefaultObjectId
)
{
cerr
<<
"(udpexchange): идентификатор '"
<<
name
<<
"' не найден в конф. файле!"
<<
" в секции "
<<
conf
->
getObjectsSection
()
<<
endl
;
return
0
;
}
dlog
[
Debug
::
INFO
]
<<
"(rsexchange): name = "
<<
name
<<
"("
<<
ID
<<
")"
<<
endl
;
//return new UDPNReceiver(ID,icID,ic);
//return new UDPNReceiver(ID,icID,ic);
return
0
;
}
// -----------------------------------------------------------------------------
extensions/UDPExchange/UDPNReceiver.h
View file @
e533def1
...
...
@@ -25,7 +25,10 @@ class UDPNReceiver
inline
void
stop
(){
activate
=
false
;
}
inline
void
setReceiveTimeout
(
int
t
){
recvTimeout
=
t
;
}
inline
std
::
string
getName
(){
return
myname
;
}
/*! глобальная функция для инициализации объекта */
static
UDPNReceiver
*
init_udpreceiver
(
int
argc
,
char
*
argv
[],
UniSetTypes
::
ObjectId
shmID
,
SharedMemory
*
ic
=
0
);
protected
:
SMInterface
*
shm
;
...
...
extensions/UDPExchange/UDPPacket.cc
View file @
e533def1
...
...
@@ -20,19 +20,24 @@ std::ostream& UniSetUDP::operator<<( std::ostream& os, UniSetUDP::UDPMessage& p
return
os
;
}
// -----------------------------------------------------------------------------
UDPMessage
::
UDPMessage
()
UDPMessage
::
UDPMessage
()
:
count
(
0
)
{
}
// -----------------------------------------------------------------------------
void
UDPMessage
::
addData
(
const
UniSetUDP
::
UDPData
&
dat
)
bool
UDPMessage
::
addData
(
const
UniSetUDP
::
UDPData
&
dat
)
{
dlist
.
push_back
(
dat
);
if
(
count
>=
MaxDataCount
)
return
false
;
msg
.
dat
[
sizeof
(
UniSetUDP
::
UDPHeader
)
+
count
]
=
dat
;
count
++
;
return
true
;
}
// -----------------------------------------------------------------------------
void
UDPMessage
::
addData
(
long
id
,
long
val
)
bool
UDPMessage
::
addData
(
long
id
,
long
val
)
{
UDPData
d
(
id
,
val
);
addData
(
d
);
return
addData
(
d
);
}
// -----------------------------------------------------------------------------
extensions/UDPExchange/UDPPacket.h
View file @
e533def1
...
...
@@ -29,22 +29,35 @@ namespace UniSetUDP
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
UDPData
&
p
);
}
__attribute__
((
packed
));
static
const
int
MaxDataLen
=
8192
;
static
const
int
MaxDataCount
=
(
MaxDataLen
-
sizeof
(
UniSetUDP
::
UDPHeader
)
)
/
sizeof
(
UDPData
);
struct
DataPacket
{
UDPHeader
header
;
UDPData
dat
[
MaxDataCount
];
}
__attribute__
((
packed
));
struct
UDPMessage
:
public
UDPHeader
{
UDPMessage
();
void
addData
(
const
UDPData
&
dat
);
void
addData
(
long
id
,
long
val
);
inline
int
size
(){
return
dlist
.
size
();
}
bool
addData
(
const
UDPData
&
dat
);
bool
addData
(
long
id
,
long
val
);
inline
bool
isFull
(){
return
count
<
MaxDataCount
;
}
inline
int
size
(){
return
count
;
}
typedef
std
::
list
<
UDPData
>
UDPDataList
;
UDPDataList
dlis
t
;
DataPacket
msg
;
int
coun
t
;
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
UDPMessage
&
p
);
};
}
// -----------------------------------------------------------------------------
#endif // UDPPacket_H_
...
...
extensions/UDPExchange/UDPReceiver.cc
View file @
e533def1
...
...
@@ -206,7 +206,23 @@ void UDPReceiver::poll()
}
// -----------------------------------------------------------------------------
void
UDPReceiver
::
recv
()
{
{
cout
<<
myname
<<
": recv....(timeout="
<<
recvTimeout
<<
")"
<<
endl
;
// UniSetUDP::UDPHeader h;
// receive
UniSetUDP
::
UDPMessage
pack
;
if
(
udp
->
isInputReady
(
recvTimeout
)
)
{
ssize_t
ret
=
udp
->
UDPReceive
::
receive
(
&
(
pack
.
msg
),
sizeof
(
pack
.
msg
));
if
(
ret
<
(
ssize_t
)
sizeof
(
pack
.
msg
)
)
{
cerr
<<
myname
<<
"(receive): FAILED ret="
<<
ret
<<
" sizeof="
<<
sizeof
(
pack
.
msg
)
<<
endl
;
return
;
}
cerr
<<
myname
<<
"(receive): OK. ret="
<<
ret
<<
" sizeof="
<<
sizeof
(
pack
.
msg
)
<<
endl
;
}
/*
cout << myname << ": recv....(timeout=" << recvTimeout << ")" << endl;
UniSetUDP::UDPHeader h;
// receive
...
...
@@ -228,6 +244,7 @@ void UDPReceiver::recv()
UniSetUDP::UDPData d;
// ignore echo...
*/
#if 0
if( h.nodeID == conf->getLocalNode() && h.procID == getId() )
{
...
...
@@ -239,7 +256,8 @@ void UDPReceiver::recv()
}
return;
}
#endif
#endif
#if 0
for( int i=0; i<h.dcount;i++ )
{
ssize_t ret = udp->UDPReceive::receive(&d,sizeof(d));
...
...
@@ -256,6 +274,7 @@ void UDPReceiver::recv()
// {
// cout << "no InputReady.." << endl;
// }
#endif
}
// -----------------------------------------------------------------------------
void
UDPReceiver
::
processingMessage
(
UniSetTypes
::
VoidMessage
*
msg
)
...
...
extensions/UDPExchange/UDPReceiver.h
View file @
e533def1
...
...
@@ -21,7 +21,7 @@ class UDPReceiver:
virtual
~
UDPReceiver
();
/*! глобальная функция для инициализации объекта */
static
UDPReceiver
*
init_udpreceiver
(
int
argc
,
char
*
argv
[],
static
UDPReceiver
*
init_udpreceiver
(
int
argc
,
char
*
argv
[],
UniSetTypes
::
ObjectId
shmID
,
SharedMemory
*
ic
=
0
);
/*! глобальная функция для вывода help-а */
...
...
extensions/UDPExchange/start_fg2.sh
View file @
e533def1
#!/bin/sh
uniset-start.sh
-f
./uniset-udpexchange
--udp-name
UDPExchange2
--udp-host
localhost
--udp-port
2049
\
uniset-start.sh
-f
./uniset-udpexchange
--udp-name
UDPExchange2
--udp-host
localhost
--udp-port
3001
\
--confile
test.xml
\
--udp-filter-field
udp
--udp-filter-value
2
\
--udp-filter-field
udp
--udp-filter-value
2
we
\
--udp-ip
\
--dlog-add-levels
info,crit,warn
extensions/UDPExchange/start_fg_receiver.sh
View file @
e533def1
#!/bin/sh
uniset-start.sh
-f
./uniset-udpreceiver
--udp-name
UDPExchange
\
--udp-host
192.168.
56
.255
--udp-port
3000
\
--udp-host
192.168.
1
.255
--udp-port
3000
\
--confile
test.xml
\
--udp-filter-field
udp
--udp-filter-value
1
\
--dlog-add-levels
info,crit,warn
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment