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
59ef36ea
Commit
59ef36ea
authored
Mar 19, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(UNetUDP): исправлена ошибка переключения каналов (спасибо Alexey Surov)
parent
b4ed97c3
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
75 additions
and
28 deletions
+75
-28
libuniset.spec
conf/libuniset.spec
+5
-2
UNetExchange.cc
extensions/UNetUDP/UNetExchange.cc
+68
-24
UNetReceiver.h
extensions/UNetUDP/UNetReceiver.h
+1
-1
UNetSender.h
extensions/UNetUDP/UNetSender.h
+1
-1
No files found.
conf/libuniset.spec
View file @
59ef36ea
...
...
@@ -8,7 +8,7 @@
Name: libuniset
Version: 1.8
Release: alt
4
Release: alt
5
Summary: UniSet - library for building distributed industrial control systems
License: GPL
...
...
@@ -339,8 +339,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
%changelog
* Thu Mar 19 2015 Pavel Vainerman <pv@altlinux.ru> 1.8-alt5
- unetudp: fxied critial bug in "switching channels" (thank`s Alexey Surov)
* Fri Mar 13 2015 Pavel Vainerman <pv@altlinux.ru> 1.8-alt4
- unetudp: minor optimization (thank`s
uzum
)
- unetudp: minor optimization (thank`s
thank`s Alexey Vinogradov
)
* Sun Mar 01 2015 Pavel Vainerman <pv@altlinux.ru> 1.8-alt3
- ModbusMaster: fixed bug in initialization (close setbug #5583)
...
...
extensions/UNetUDP/UNetExchange.cc
View file @
59ef36ea
...
...
@@ -737,40 +737,84 @@ UNetExchange* UNetExchange::init_unetexchange( int argc, const char* argv[], Uni
// -----------------------------------------------------------------------------
void
UNetExchange
::
receiverEvent
(
UNetReceiver
*
r
,
UNetReceiver
::
Event
ev
)
{
// пока, что другие события нас не интересуют
if
(
ev
!=
UNetReceiver
::
evTimeout
)
return
;
for
(
ReceiverList
::
iterator
it
=
recvlist
.
begin
();
it
!=
recvlist
.
end
();
++
it
)
{
if
(
it
->
r1
==
r
)
{
// если нет второго канала
// то и переключать некуда
if
(
!
it
->
r2
)
return
;
// пропала связь по первому каналу...
// переключаемся на второй
it
->
r1
->
setLockUpdate
(
true
);
it
->
r2
->
setLockUpdate
(
false
);
if
(
dlog
.
debugging
(
Debug
::
INFO
)
)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(event): "
<<
r
->
getName
()
if
(
ev
==
UNetReceiver
::
evTimeout
)
{
// если нет второго канала или нет связи
// то и переключать не надо
if
(
!
it
->
r2
||
!
it
->
r2
->
isRecvOK
()
)
return
;
// пропала связь по первому каналу...
// переключаемся на второй
it
->
r1
->
setLockUpdate
(
true
);
it
->
r2
->
setLockUpdate
(
false
);
if
(
dlog
.
debugging
(
Debug
::
LEVEL8
)
)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(event): "
<<
r
->
getName
()
<<
": timeout for channel1.. select channel 2"
<<
endl
;
}
else
if
(
ev
==
UNetReceiver
::
evOK
)
{
// если связь восстановилась..
// проверяем, а что там со вторым каналом
// если у него связи нет, то забираем себе..
if
(
!
it
->
r2
||
!
it
->
r2
->
isRecvOK
()
)
{
it
->
r1
->
setLockUpdate
(
false
);
if
(
it
->
r2
)
it
->
r2
->
setLockUpdate
(
true
);
if
(
dlog
.
debugging
(
Debug
::
LEVEL8
)
)
dlog
[
Debug
::
LEVEL8
]
<<
"(event): "
<<
r
->
getName
()
<<
": link failed for channel2.. select again channel1.."
<<
endl
;
}
}
return
;
}
if
(
it
->
r2
==
r
)
{
// пропала связь по второму каналу...
// переключаемся на первый
it
->
r1
->
setLockUpdate
(
false
);
it
->
r2
->
setLockUpdate
(
true
);
if
(
dlog
.
debugging
(
Debug
::
INFO
)
)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(event): "
<<
r
->
getName
()
<<
": timeout for channel2.. select channel 1"
<<
endl
;
if
(
ev
==
UNetReceiver
::
evTimeout
)
{
// если первого канала нет или нет связи
// то и переключать не надо
if
(
!
it
->
r1
||
!
it
->
r1
->
isRecvOK
()
)
return
;
// пропала связь по второму каналу...
// переключаемся на первый
it
->
r1
->
setLockUpdate
(
false
);
it
->
r2
->
setLockUpdate
(
true
);
if
(
dlog
.
debugging
(
Debug
::
INFO
)
)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(event): "
<<
r
->
getName
()
<<
": timeout for channel2.. select channel 1"
<<
endl
;
return
;
}
else
if
(
ev
==
UNetReceiver
::
evOK
)
{
// если связь восстановилась..
// проверяем, а что там со первым каналом
// если у него связи нет, то забираем себе..
if
(
!
it
->
r1
||
!
it
->
r1
->
isRecvOK
()
)
{
if
(
it
->
r1
)
it
->
r1
->
setLockUpdate
(
true
);
it
->
r2
->
setLockUpdate
(
false
);
if
(
dlog
.
debugging
(
Debug
::
LEVEL8
)
)
dlog
[
Debug
::
LEVEL8
]
<<
myname
<<
"(event): "
<<
r
->
getName
()
<<
": link failed for channel1.. select again channel2.."
<<
endl
;
}
}
return
;
}
}
...
...
extensions/UNetUDP/UNetReceiver.h
View file @
59ef36ea
...
...
@@ -51,7 +51,7 @@ class UNetReceiver
{
public
:
UNetReceiver
(
const
std
::
string
&
host
,
const
ost
::
tpport_t
port
,
SMInterface
*
smi
);
~
UNetReceiver
();
virtual
~
UNetReceiver
();
void
start
();
void
stop
();
...
...
extensions/UNetUDP/UNetSender.h
View file @
59ef36ea
...
...
@@ -22,7 +22,7 @@ class UNetSender
UNetSender
(
const
std
::
string
host
,
const
ost
::
tpport_t
port
,
SMInterface
*
smi
,
const
std
::
string
s_field
=
""
,
const
std
::
string
s_fvalue
=
""
,
SharedMemory
*
ic
=
0
);
~
UNetSender
();
virtual
~
UNetSender
();
struct
UItem
{
...
...
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