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
74298c52
Commit
74298c52
authored
May 16, 2021
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[unet-multicast]: init from XML
parent
97ff1779
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
300 additions
and
62 deletions
+300
-62
test.xml
conf/test.xml
+10
-2
MulticastTransport.cc
extensions/UNetUDP/MulticastTransport.cc
+151
-2
MulticastTransport.h
extensions/UNetUDP/MulticastTransport.h
+7
-10
UDPTransport.cc
extensions/UNetUDP/UDPTransport.cc
+55
-0
UDPTransport.h
extensions/UNetUDP/UDPTransport.h
+5
-0
UNetExchange.cc
extensions/UNetUDP/UNetExchange.cc
+72
-48
No files found.
conf/test.xml
View file @
74298c52
...
@@ -181,7 +181,7 @@
...
@@ -181,7 +181,7 @@
</RTUExchange>
</RTUExchange>
<UDPExchange
name=
"UDPExchange"
/>
<UDPExchange
name=
"UDPExchange"
/>
<UDPExchange2
name=
"UDPExchange2"
/>
<UDPExchange2
name=
"UDPExchange2"
/>
<UNetExchange
name=
"UNetExchange"
/>
<UNetExchange
name=
"UNetExchange"
transport=
"multicast"
/>
<HeartBeatTime
msec=
"5000"
/>
<HeartBeatTime
msec=
"5000"
/>
<NCReadyTimeout
msec=
"120000"
/>
<NCReadyTimeout
msec=
"120000"
/>
<TestGen
input1_s=
"Input1_S"
input2_s=
"DumpSensor1_S"
name=
"TestGen"
output1_c=
"DO_C"
output2_c=
"DO1_C"
/>
<TestGen
input1_s=
"Input1_S"
input2_s=
"DumpSensor1_S"
name=
"TestGen"
output1_c=
"DO_C"
output2_c=
"DO1_C"
/>
...
@@ -214,13 +214,21 @@
...
@@ -214,13 +214,21 @@
priority - приоритет сообщения об изменении данного датчика
priority - приоритет сообщения об изменении данного датчика
textname - текстовое имя датчика
textname - текстовое имя датчика
-->
-->
<nodes
port=
"2809"
unet_broadcast_ip=
"127.255.255.255"
unet_broadcast_ip2=
"192.168.56.255"
>
<nodes
port=
"2809"
unet_broadcast_ip=
"127.255.255.255"
unet_broadcast_ip2=
"192.168.56.255"
unet_transport=
"multicast"
>
<item
id=
"3000"
dbserver=
"DBServer1"
infserver=
"InfoServer"
ip=
"127.0.0.1"
name=
"LocalhostNode"
textname=
"Локальный узел"
unet_ignore=
"0"
unet_port=
"2048"
>
<item
id=
"3000"
dbserver=
"DBServer1"
infserver=
"InfoServer"
ip=
"127.0.0.1"
name=
"LocalhostNode"
textname=
"Локальный узел"
unet_ignore=
"0"
unet_port=
"2048"
>
<iocards>
<iocards>
<item
card=
"1"
name=
"DI32"
/>
<item
card=
"1"
name=
"DI32"
/>
<item
card=
"2"
name=
"DO32"
/>
<item
card=
"2"
name=
"DO32"
/>
<item
baddr=
"0x110"
card=
"3"
dev=
"/dev/null"
name=
"UNIO48"
subdev1=
"TBI24_0"
subdev2=
"TBI16_8"
/>
<item
baddr=
"0x110"
card=
"3"
dev=
"/dev/null"
name=
"UNIO48"
subdev1=
"TBI24_0"
subdev2=
"TBI16_8"
/>
</iocards>
</iocards>
<multicast>
<receive>
<group
addr=
"224.0.0.1"
/>
</receive>
<send>
<group
addr=
"224.0.0.1"
/>
</send>
</multicast>
</item>
</item>
<item
id=
"3001"
infserver=
"InfoServer"
ip=
"127.0.0.1"
name=
"LocalhostNode1"
textname=
"Локальный узел"
unet_ignore=
"0"
unet_port=
"2049"
/>
<item
id=
"3001"
infserver=
"InfoServer"
ip=
"127.0.0.1"
name=
"LocalhostNode1"
textname=
"Локальный узел"
unet_ignore=
"0"
unet_port=
"2049"
/>
<item
id=
"3002"
ip=
"192.168.56.10"
name=
"Node1"
textname=
"Node1"
unet_ignore=
"0"
unet_port=
"3001"
unet_respond_id=
"Input1_S"
unet_respond_invert=
"1"
/>
<item
id=
"3002"
ip=
"192.168.56.10"
name=
"Node1"
textname=
"Node1"
unet_ignore=
"0"
unet_port=
"3001"
unet_respond_id=
"Input1_S"
unet_respond_invert=
"1"
/>
...
...
extensions/UNetUDP/MulticastTransport.cc
View file @
74298c52
...
@@ -25,7 +25,81 @@
...
@@ -25,7 +25,81 @@
using
namespace
std
;
using
namespace
std
;
using
namespace
uniset
;
using
namespace
uniset
;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
MulticastReceiveTransport
::
MulticastReceiveTransport
(
const
std
::
string
&
_bind
,
int
_port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
_joinGroups
)
:
/*
* <item id="3000" unet_port="2048" unet_multicast_ip="192.168.0.255" unet_port2="2048" unet_multicast_ip2="192.169.0.255">
<multicast>
<receive>
1<group addr="224.0.0.1" addr2="224.0.0.1"/>
</receive>
<send>
<group addr="224.0.0.1"/>
</send>
</multicast>
</item>
*/
std
::
unique_ptr
<
MulticastReceiveTransport
>
MulticastReceiveTransport
::
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
)
{
ostringstream
fieldIp
;
fieldIp
<<
"unet_multicast_ip"
;
if
(
numChan
>
0
)
fieldIp
<<
numChan
;
const
string
h
=
it
.
getProp2
(
fieldIp
.
str
(),
defaultIP
);
if
(
h
.
empty
()
)
{
ostringstream
err
;
err
<<
"(MulticastReceiveTransport): Unknown multicast IP for "
<<
it
.
getProp
(
"name"
);
throw
uniset
::
SystemError
(
err
.
str
());
}
ostringstream
fieldPort
;
fieldPort
<<
"unet_port"
;
if
(
numChan
>
0
)
fieldPort
<<
numChan
;
int
p
=
it
.
getPIntProp
(
fieldPort
.
str
(),
it
.
getIntProp
(
"id"
));
if
(
it
.
find
(
"multicast"
)
)
throw
SystemError
(
"(MulticastReceiveTransport): not found <multicast> node"
);
if
(
!
it
.
goChildren
()
)
throw
SystemError
(
"(MulticastReceiveTransport): empty <multicast> node"
);
if
(
it
.
find
(
"receive"
)
)
throw
SystemError
(
"(MulticastReceiveTransport): not found <receive> node"
);
if
(
!
it
.
goChildren
()
)
throw
SystemError
(
"(MulticastReceiveTransport): empty <receive> groups"
);
std
::
vector
<
Poco
::
Net
::
IPAddress
>
groups
;
ostringstream
fieldAddr
;
fieldAddr
<<
"addr"
;
if
(
numChan
>
0
)
fieldAddr
<<
numChan
;
for
(
;
it
;
it
++
)
{
Poco
::
Net
::
IPAddress
a
(
it
.
getProp
(
fieldAddr
.
str
()),
Poco
::
Net
::
IPAddress
::
IPv4
);
if
(
!
a
.
isMulticast
()
)
{
ostringstream
err
;
err
<<
"(MulticastReceiveTransport): "
<<
it
.
getProp
(
fieldAddr
.
str
())
<<
" is not multicast address"
;
throw
SystemError
(
err
.
str
());
}
groups
.
push_back
(
a
);
}
return
unisetstd
::
make_unique
<
MulticastReceiveTransport
>
(
h
,
p
,
std
::
move
(
groups
));
}
// -------------------------------------------------------------------------
MulticastReceiveTransport
::
MulticastReceiveTransport
(
const
std
::
string
&
_bind
,
int
_port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>&
_joinGroups
)
:
host
(
_bind
),
host
(
_bind
),
port
(
_port
),
port
(
_port
),
groups
(
_joinGroups
)
groups
(
_joinGroups
)
...
@@ -125,7 +199,82 @@ ssize_t MulticastReceiveTransport::receive( void* r_buf, size_t sz )
...
@@ -125,7 +199,82 @@ ssize_t MulticastReceiveTransport::receive( void* r_buf, size_t sz )
return
udp
->
receiveBytes
(
r_buf
,
sz
);
return
udp
->
receiveBytes
(
r_buf
,
sz
);
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
MulticastSendTransport
::
MulticastSendTransport
(
const
std
::
string
&
_host
,
int
_port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
_sendGroups
)
:
// -------------------------------------------------------------------------
/*
* <item id="3000" unet_port="2048" unet_multicast_ip="192.168.0.255" unet_port2="2048" unet_multicast_ip2="192.169.0.255">
<multicast>
<receive>
1<group addr="224.0.0.1" addr2="224.0.0.1"/>
</receive>
<send>
<group addr="224.0.0.1"/>
</send>
</multicast>
</item>
*/
std
::
unique_ptr
<
MulticastSendTransport
>
MulticastSendTransport
::
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
)
{
ostringstream
fieldIp
;
fieldIp
<<
"unet_multicast_ip"
;
if
(
numChan
>
0
)
fieldIp
<<
numChan
;
const
string
h
=
it
.
getProp2
(
fieldIp
.
str
(),
defaultIP
);
if
(
h
.
empty
()
)
{
ostringstream
err
;
err
<<
"(MulticastSendTransport): Unknown multicast IP for "
<<
it
.
getProp
(
"name"
);
throw
uniset
::
SystemError
(
err
.
str
());
}
ostringstream
fieldPort
;
fieldPort
<<
"unet_port"
;
if
(
numChan
>
0
)
fieldPort
<<
numChan
;
int
p
=
it
.
getPIntProp
(
fieldPort
.
str
(),
it
.
getIntProp
(
"id"
));
if
(
it
.
find
(
"multicast"
)
)
throw
SystemError
(
"(MulticastSendTransport): not found <multicast> node"
);
if
(
!
it
.
goChildren
()
)
throw
SystemError
(
"(MulticastSendTransport): empty <multicast> node"
);
if
(
it
.
find
(
"send"
)
)
throw
SystemError
(
"(MulticastSendTransport): not found <send> node"
);
if
(
!
it
.
goChildren
()
)
throw
SystemError
(
"(MulticastSendTransport): empty <send> groups"
);
ostringstream
fieldAddr
;
fieldAddr
<<
"addr"
;
if
(
numChan
>
0
)
fieldAddr
<<
numChan
;
std
::
vector
<
Poco
::
Net
::
IPAddress
>
groups
;
for
(
;
it
;
it
++
)
{
Poco
::
Net
::
IPAddress
a
(
it
.
getProp
(
fieldAddr
.
str
()),
Poco
::
Net
::
IPAddress
::
IPv4
);
if
(
!
a
.
isMulticast
()
)
{
ostringstream
err
;
err
<<
"(MulticastSendTransport): "
<<
it
.
getProp
(
fieldAddr
.
str
())
<<
" is not multicast address"
;
throw
SystemError
(
err
.
str
());
}
groups
.
push_back
(
a
);
}
return
unisetstd
::
make_unique
<
MulticastSendTransport
>
(
h
,
p
,
std
::
move
(
groups
));
}
// -------------------------------------------------------------------------
MulticastSendTransport
::
MulticastSendTransport
(
const
std
::
string
&
_host
,
int
_port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>&
_sendGroups
)
:
saddr
(
_host
,
_port
),
saddr
(
_host
,
_port
),
groups
(
_sendGroups
)
groups
(
_sendGroups
)
{
{
...
...
extensions/UNetUDP/MulticastTransport.h
View file @
74298c52
...
@@ -22,28 +22,26 @@
...
@@ -22,28 +22,26 @@
#include <vector>
#include <vector>
#include "UNetTransport.h"
#include "UNetTransport.h"
#include "UDPCore.h"
#include "UDPCore.h"
#include "UniXML.h"
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
namespace
uniset
namespace
uniset
{
{
class
MulticastReceiveTransport
:
class
MulticastReceiveTransport
:
public
UNetReceiveTransport
public
UNetReceiveTransport
{
{
public
:
public
:
MulticastReceiveTransport
(
const
std
::
string
&
bind
,
int
port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
joinGroups
);
static
std
::
unique_ptr
<
MulticastReceiveTransport
>
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
);
MulticastReceiveTransport
(
const
std
::
string
&
bind
,
int
port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>&
joinGroups
);
virtual
~
MulticastReceiveTransport
();
virtual
~
MulticastReceiveTransport
();
virtual
bool
isConnected
()
const
override
;
virtual
bool
isConnected
()
const
override
;
virtual
std
::
string
toString
()
const
override
;
virtual
std
::
string
toString
()
const
override
;
virtual
std
::
string
ID
()
const
noexcept
override
;
virtual
std
::
string
ID
()
const
noexcept
override
;
virtual
bool
createConnection
(
bool
throwEx
,
timeout_t
readTimeout
,
bool
noblock
)
override
;
virtual
bool
createConnection
(
bool
throwEx
,
timeout_t
readTimeout
,
bool
noblock
)
override
;
virtual
void
disconnect
()
override
;
virtual
void
disconnect
()
override
;
virtual
int
getSocket
()
const
override
;
virtual
int
getSocket
()
const
override
;
virtual
ssize_t
receive
(
void
*
r_buf
,
size_t
sz
)
override
;
virtual
ssize_t
receive
(
void
*
r_buf
,
size_t
sz
)
override
;
...
@@ -55,21 +53,20 @@ namespace uniset
...
@@ -55,21 +53,20 @@ namespace uniset
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
groups
;
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
groups
;
};
};
class
MulticastSendTransport
:
class
MulticastSendTransport
:
public
UNetSendTransport
public
UNetSendTransport
{
{
public
:
public
:
MulticastSendTransport
(
const
std
::
string
&
host
,
int
port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>
sendGroups
);
static
std
::
unique_ptr
<
MulticastSendTransport
>
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
);
MulticastSendTransport
(
const
std
::
string
&
host
,
int
port
,
const
std
::
vector
<
Poco
::
Net
::
IPAddress
>&
sendGroups
);
virtual
~
MulticastSendTransport
();
virtual
~
MulticastSendTransport
();
virtual
bool
isConnected
()
const
override
;
virtual
bool
isConnected
()
const
override
;
virtual
std
::
string
toString
()
const
override
;
virtual
std
::
string
toString
()
const
override
;
virtual
bool
createConnection
(
bool
throwEx
,
timeout_t
sendTimeout
)
override
;
virtual
bool
createConnection
(
bool
throwEx
,
timeout_t
sendTimeout
)
override
;
virtual
int
getSocket
()
const
override
;
virtual
int
getSocket
()
const
override
;
// write
// write
...
...
extensions/UNetUDP/UDPTransport.cc
View file @
74298c52
...
@@ -25,6 +25,33 @@
...
@@ -25,6 +25,33 @@
using
namespace
std
;
using
namespace
std
;
using
namespace
uniset
;
using
namespace
uniset
;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
std
::
unique_ptr
<
UDPReceiveTransport
>
UDPReceiveTransport
::
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
)
{
ostringstream
fieldIp
;
fieldIp
<<
"unet_broadcast_ip"
;
if
(
numChan
>
0
)
fieldIp
<<
numChan
;
const
string
h
=
it
.
getProp2
(
fieldIp
.
str
(),
defaultIP
);
if
(
h
.
empty
()
)
{
ostringstream
err
;
err
<<
"(UDPReceiveTransport): Unknown broadcast IP for "
<<
it
.
getProp
(
"name"
);
throw
uniset
::
SystemError
(
err
.
str
());
}
ostringstream
fieldPort
;
fieldPort
<<
"unet_port"
;
if
(
numChan
>
0
)
fieldPort
<<
numChan
;
int
p
=
it
.
getPIntProp
(
fieldPort
.
str
(),
it
.
getIntProp
(
"id"
));
return
unisetstd
::
make_unique
<
UDPReceiveTransport
>
(
h
,
p
);
}
// -------------------------------------------------------------------------
UDPReceiveTransport
::
UDPReceiveTransport
(
const
std
::
string
&
_bind
,
int
_port
)
:
UDPReceiveTransport
::
UDPReceiveTransport
(
const
std
::
string
&
_bind
,
int
_port
)
:
host
(
_bind
),
host
(
_bind
),
port
(
_port
)
port
(
_port
)
...
@@ -97,6 +124,34 @@ ssize_t UDPReceiveTransport::receive( void* r_buf, size_t sz )
...
@@ -97,6 +124,34 @@ ssize_t UDPReceiveTransport::receive( void* r_buf, size_t sz )
return
udp
->
receiveBytes
(
r_buf
,
sz
);
return
udp
->
receiveBytes
(
r_buf
,
sz
);
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
std
::
unique_ptr
<
UDPSendTransport
>
UDPSendTransport
::
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
)
{
ostringstream
fieldIp
;
fieldIp
<<
"unet_broadcast_ip"
;
if
(
numChan
>
0
)
fieldIp
<<
numChan
;
const
string
h
=
it
.
getProp2
(
fieldIp
.
str
(),
defaultIP
);
if
(
h
.
empty
()
)
{
ostringstream
err
;
err
<<
"(UDPReceiveTransport): Unknown broadcast IP for "
<<
it
.
getProp
(
"name"
);
throw
uniset
::
SystemError
(
err
.
str
());
}
ostringstream
fieldPort
;
fieldPort
<<
"unet_port"
;
if
(
numChan
>
0
)
fieldPort
<<
numChan
;
int
p
=
it
.
getPIntProp
(
fieldPort
.
str
(),
it
.
getIntProp
(
"id"
));
return
unisetstd
::
make_unique
<
UDPSendTransport
>
(
h
,
p
);
}
// -------------------------------------------------------------------------
UDPSendTransport
::
UDPSendTransport
(
const
std
::
string
&
_host
,
int
_port
)
:
UDPSendTransport
::
UDPSendTransport
(
const
std
::
string
&
_host
,
int
_port
)
:
saddr
(
_host
,
_port
)
saddr
(
_host
,
_port
)
{
{
...
...
extensions/UNetUDP/UDPTransport.h
View file @
74298c52
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
#include <memory>
#include <memory>
#include "UNetTransport.h"
#include "UNetTransport.h"
#include "UDPCore.h"
#include "UDPCore.h"
#include "UniXML.h"
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
namespace
uniset
namespace
uniset
{
{
...
@@ -29,6 +30,8 @@ namespace uniset
...
@@ -29,6 +30,8 @@ namespace uniset
{
{
public
:
public
:
static
std
::
unique_ptr
<
UDPReceiveTransport
>
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
);
UDPReceiveTransport
(
const
std
::
string
&
bind
,
int
port
);
UDPReceiveTransport
(
const
std
::
string
&
bind
,
int
port
);
virtual
~
UDPReceiveTransport
();
virtual
~
UDPReceiveTransport
();
...
@@ -52,6 +55,8 @@ namespace uniset
...
@@ -52,6 +55,8 @@ namespace uniset
{
{
public
:
public
:
static
std
::
unique_ptr
<
UDPSendTransport
>
createFromXml
(
UniXML
::
iterator
it
,
const
std
::
string
&
defaultIP
,
int
numChan
);
UDPSendTransport
(
const
std
::
string
&
host
,
int
port
);
UDPSendTransport
(
const
std
::
string
&
host
,
int
port
);
virtual
~
UDPSendTransport
();
virtual
~
UDPSendTransport
();
...
...
extensions/UNetUDP/UNetExchange.cc
View file @
74298c52
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
#include "UNetExchange.h"
#include "UNetExchange.h"
#include "UNetLogSugar.h"
#include "UNetLogSugar.h"
#include "UDPTransport.h"
#include "UDPTransport.h"
#include "MulticastTransport.h"
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
using
namespace
std
;
using
namespace
std
;
using
namespace
uniset
;
using
namespace
uniset
;
...
@@ -114,9 +115,16 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -114,9 +115,16 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
UniXML
::
iterator
n_it
(
nodes
);
UniXML
::
iterator
n_it
(
nodes
);
const
string
unet_transport
(
n_it
.
getProp2
(
"unet_transport"
,
"udp"
));
string
default_ip
(
n_it
.
getProp
(
"unet_broadcast_ip"
));
string
default_ip
(
n_it
.
getProp
(
"unet_broadcast_ip"
));
string
default_ip2
(
n_it
.
getProp
(
"unet_broadcast_ip2"
));
string
default_ip2
(
n_it
.
getProp
(
"unet_broadcast_ip2"
));
if
(
unet_transport
==
"multicast"
)
{
default_ip
=
n_it
.
getProp
(
"unet_multicast_ip"
);
default_ip2
=
n_it
.
getProp
(
"unet_multicast_ip2"
);
}
if
(
!
n_it
.
goChildren
()
)
if
(
!
n_it
.
goChildren
()
)
throw
uniset
::
SystemError
(
"(UNetExchange): Items not found for <nodes>"
);
throw
uniset
::
SystemError
(
"(UNetExchange): Items not found for <nodes>"
);
...
@@ -132,30 +140,6 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -132,30 +140,6 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
if
(
!
uniset
::
check_filter
(
n_it
,
n_field
,
n_fvalue
)
)
if
(
!
uniset
::
check_filter
(
n_it
,
n_field
,
n_fvalue
)
)
continue
;
continue
;
// Если указано поле unet_broadcast_ip непосредственно у узла - берём его
// если не указано берём общий broadcast_ip
string
h
=
{
n_it
.
getProp2
(
"unet_broadcast_ip"
,
default_ip
)
};
string
h2
=
{
n_it
.
getProp2
(
"unet_broadcast_ip2"
,
default_ip2
)
};
if
(
h
.
empty
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(init): Unknown broadcast IP for "
<<
n_it
.
getProp
(
"name"
);
unetcrit
<<
err
.
str
()
<<
endl
;
throw
uniset
::
SystemError
(
err
.
str
());
}
if
(
h2
.
empty
()
)
unetinfo
<<
myname
<<
"(init): ip2 not used..."
<<
endl
;
// Если указано поле unet_port - используем его
// Иначе port = идентификатору узла
int
p
=
n_it
.
getPIntProp
(
"unet_port"
,
n_it
.
getIntProp
(
"id"
));
// по умолчанию порт на втором канале такой же как на первом (если не задан отдельно)
int
p2
=
n_it
.
getPIntProp
(
"unet_port2"
,
p
);
string
n
(
n_it
.
getProp
(
"name"
));
string
n
(
n_it
.
getProp
(
"name"
));
if
(
n
==
conf
->
getLocalNodeName
()
)
if
(
n
==
conf
->
getLocalNodeName
()
)
...
@@ -168,8 +152,18 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -168,8 +152,18 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
}
}
unetinfo
<<
myname
<<
"(init): init sender.. my node "
<<
n_it
.
getProp
(
"name"
)
<<
endl
;
unetinfo
<<
myname
<<
"(init): init sender.. my node "
<<
n_it
.
getProp
(
"name"
)
<<
endl
;
auto
s1
=
unisetstd
::
make_unique
<
uniset
::
UDPSendTransport
>
(
h
,
p
);
sender
=
make_shared
<
UNetSender
>
(
std
::
move
(
s1
),
shm
,
false
,
s_field
,
s_fvalue
,
"unet"
,
prefix
);
if
(
unet_transport
==
"multicast"
)
{
auto
s1
=
MulticastSendTransport
::
createFromXml
(
n_it
,
default_ip
,
0
);
sender
=
make_shared
<
UNetSender
>
(
std
::
move
(
s1
),
shm
,
false
,
s_field
,
s_fvalue
,
"unet"
,
prefix
);
}
else
// default
{
auto
s1
=
UDPSendTransport
::
createFromXml
(
n_it
,
default_ip
,
0
);
sender
=
make_shared
<
UNetSender
>
(
std
::
move
(
s1
),
shm
,
false
,
s_field
,
s_fvalue
,
"unet"
,
prefix
);
}
sender
->
setSendPause
(
sendpause
);
sender
->
setSendPause
(
sendpause
);
sender
->
setPackSendPause
(
packsendpause
);
sender
->
setPackSendPause
(
packsendpause
);
sender
->
setPackSendPauseFactor
(
packsendpauseFactor
);
sender
->
setPackSendPauseFactor
(
packsendpauseFactor
);
...
@@ -178,35 +172,57 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -178,35 +172,57 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
try
try
{
{
sender2
=
nullptr
;
// создаём "писателя" для второго канала если задан
// создаём "писателя" для второго канала если задан
if
(
!
h2
.
empty
()
)
if
(
unet_transport
==
"multicast"
)
{
{
unetinfo
<<
myname
<<
"(init): init sender2.. my node "
<<
n_it
.
getProp
(
"name"
)
<<
endl
;
if
(
n_it
.
getProp
(
"unet_multicast_ip2"
).
empty
()
||
!
default_ip2
.
empty
()
)
{
auto
s2
=
MulticastSendTransport
::
createFromXml
(
n_it
,
default_ip2
,
2
);
sender2
=
make_shared
<
UNetSender
>
(
std
::
move
(
s2
),
shm
,
false
,
s_field
,
s_fvalue
,
"unet"
,
prefix
);
}
}
else
// default
{
if
(
n_it
.
getProp
(
"unet_broadcast_ip2"
).
empty
()
||
!
default_ip2
.
empty
()
)
{
auto
s2
=
UDPSendTransport
::
createFromXml
(
n_it
,
default_ip2
,
2
);
sender2
=
make_shared
<
UNetSender
>
(
std
::
move
(
s2
),
shm
,
false
,
s_field
,
s_fvalue
,
"unet"
,
prefix
);
}
}
auto
s2
=
unisetstd
::
make_unique
<
uniset
::
UDPSendTransport
>
(
h2
,
p2
);
if
(
sender2
)
sender2
=
make_shared
<
UNetSender
>
(
std
::
move
(
s2
),
shm
,
false
,
s_field
,
s_fvalue
,
prefix
);
{
sender2
->
setSendPause
(
sendpause
);
sender2
->
setSendPause
(
sendpause
);
sender2
->
setCheckConnectionPause
(
checkConnectionPause
);
sender2
->
setCheckConnectionPause
(
checkConnectionPause
);
loga
->
add
(
sender2
->
getLog
());
loga
->
add
(
sender2
->
getLog
());
}
}
else
unetwarn
<<
myname
<<
"(ignore): sender for Channel2 disabled "
<<
endl
;
}
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
{
// т.е. это "резервный канал", то игнорируем ошибку его создания
// т.е. это "резервный канал", то игнорируем ошибку его создания
// при запуске "интерфейс" может быть и не доступен...
// при запуске "интерфейс" может быть и не доступен...
sender2
=
0
;
sender2
=
nullptr
;
unetcrit
<<
myname
<<
"(ignore): DON`T CREATE 'UNetSender' for "
<<
h2
<<
":"
<<
p2
<<
endl
;
unetcrit
<<
myname
<<
"IGNORE! reserv channel create error:"
<<
ex
.
what
()
<<
endl
;
}
}
continue
;
continue
;
}
}
unetinfo
<<
myname
<<
"(init): add UNetReceiver
for "
<<
h
<<
":"
<<
p
<<
endl
;
unetinfo
<<
myname
<<
"(init): add UNetReceiver
.."
<<
endl
;
auto
transport
=
unisetstd
::
make_unique
<
uniset
::
UDPReceiveTransport
>
(
h
,
p
)
;
std
::
unique_ptr
<
UNetReceiveTransport
>
transport1
;
if
(
checkExistTransport
(
transport
->
ID
())
)
if
(
unet_transport
==
"multicast"
)
transport1
=
MulticastReceiveTransport
::
createFromXml
(
n_it
,
default_ip
,
0
);
else
// default
transport1
=
UDPReceiveTransport
::
createFromXml
(
n_it
,
default_ip
,
0
);
if
(
checkExistTransport
(
transport1
->
ID
())
)
{
{
unetinfo
<<
myname
<<
"(init): "
<<
h
<<
":"
<<
p
<<
" already added! Ignore.."
<<
endl
;
unetinfo
<<
myname
<<
"(init): "
<<
transport1
->
ID
()
<<
" already added! Ignore.."
<<
endl
;
continue
;
continue
;
}
}
...
@@ -350,9 +366,8 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -350,9 +366,8 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
throw
SystemError
(
err
.
str
());
throw
SystemError
(
err
.
str
());
}
}
unetinfo
<<
myname
<<
"(init): (node='"
<<
n
<<
"') add basic receiver "
unetinfo
<<
myname
<<
"(init): (node='"
<<
n
<<
"') add basic receiver "
<<
transport1
->
ID
()
<<
endl
;
<<
h
<<
":"
<<
p
<<
endl
;
auto
r
=
make_shared
<
UNetReceiver
>
(
std
::
move
(
transport1
),
shm
,
false
,
prefix
);
auto
r
=
make_shared
<
UNetReceiver
>
(
std
::
move
(
transport
),
shm
,
false
,
prefix
);
loga
->
add
(
r
->
getLog
());
loga
->
add
(
r
->
getLog
());
...
@@ -379,13 +394,22 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -379,13 +394,22 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
try
try
{
{
if
(
!
h2
.
empty
()
)
// создаём читателя впо второму каналу
std
::
unique_ptr
<
UNetReceiveTransport
>
transport2
=
nullptr
;
{
unetinfo
<<
myname
<<
"(init): (node='"
<<
n
<<
"') add reserv receiver "
<<
h2
<<
":"
<<
p2
<<
endl
;
auto
transport2
=
unisetstd
::
make_unique
<
UDPReceiveTransport
>
(
h2
,
p2
);
if
(
unet_transport
==
"multicast"
)
{
if
(
!
n_it
.
getProp
(
"unet_multicast_ip2"
).
empty
()
||
!
default_ip2
.
empty
())
transport2
=
MulticastReceiveTransport
::
createFromXml
(
n_it
,
default_ip2
,
2
);
}
else
// default
{
if
(
!
n_it
.
getProp
(
"unet_broadcast_ip2"
).
empty
()
||
!
default_ip2
.
empty
()
)
transport2
=
UDPReceiveTransport
::
createFromXml
(
n_it
,
default_ip2
,
2
);
}
if
(
transport2
)
// создаём читателя по второму каналу
{
unetinfo
<<
myname
<<
"(init): (node='"
<<
n
<<
"') add reserv receiver "
<<
transport2
->
ID
()
<<
endl
;
r2
=
make_shared
<
UNetReceiver
>
(
std
::
move
(
transport2
),
shm
,
false
,
prefix
);
r2
=
make_shared
<
UNetReceiver
>
(
std
::
move
(
transport2
),
shm
,
false
,
prefix
);
loga
->
add
(
r2
->
getLog
());
loga
->
add
(
r2
->
getLog
());
...
@@ -409,12 +433,12 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
...
@@ -409,12 +433,12 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
r2
->
setUpdateStrategy
(
r_upStrategy
);
r2
->
setUpdateStrategy
(
r_upStrategy
);
}
}
}
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
{
// т.е. это "резервный канал", то игнорируем ошибку его создания
// т.е. это "резервный канал", то игнорируем ошибку его создания
// при запуске "интерфейс" может быть и не доступен...
// при запуске "интерфейс" может быть и не доступен...
r2
=
0
;
r2
=
nullptr
;
unetcrit
<<
myname
<<
"(ignore): DON`T CREATE
'UNetReceiver' for "
<<
h2
<<
":"
<<
p2
<<
endl
;
unetcrit
<<
myname
<<
"(ignore): DON`T CREATE
reserve 'UNetReceiver'. error: "
<<
ex
.
what
()
<<
endl
;
}
}
ReceiverInfo
ri
(
r
,
r2
);
ReceiverInfo
ri
(
r
,
r2
);
...
...
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