Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
beat
beat.core
Commits
23ef306f
Commit
23ef306f
authored
Oct 25, 2017
by
Philip ABBET
Browse files
Optimize the number of messages sent between the remote inputs and the message handler
parent
f323cd1b
Changes
2
Show whitespace changes
Inline
Side-by-side
beat/core/message_handler.py
View file @
23ef306f
...
@@ -81,10 +81,12 @@ class ProxyMessageHandler(MessageHandler):
...
@@ -81,10 +81,12 @@ class ProxyMessageHandler(MessageHandler):
return
retval
return
retval
def
write
(
self
,
name
,
packed
):
def
write
(
self
,
name
,
end_data_index
,
packed
):
"""Syntax: wrt output data"""
"""Syntax: wrt output data"""
logger
.
debug
(
'recv: wrt %s <bin> (size=%d)'
,
name
,
len
(
packed
))
end_data_index
=
int
(
end_data_index
)
logger
.
debug
(
'recv: wrt %s %d <bin> (size=%d)'
,
name
,
end_data_index
,
len
(
packed
))
# Get output object
# Get output object
output_candidate
=
self
.
_get_output_candidate
(
name
)
output_candidate
=
self
.
_get_output_candidate
(
name
)
...
@@ -93,7 +95,7 @@ class ProxyMessageHandler(MessageHandler):
...
@@ -93,7 +95,7 @@ class ProxyMessageHandler(MessageHandler):
data
=
output_candidate
.
data_sink
.
dataformat
.
type
()
data
=
output_candidate
.
data_sink
.
dataformat
.
type
()
data
.
unpack
(
packed
)
data
.
unpack
(
packed
)
output_candidate
.
write
(
data
)
output_candidate
.
write
(
data
,
end_data_index
=
end_data_index
)
logger
.
debug
(
'send: ack'
)
logger
.
debug
(
'send: ack'
)
self
.
socket
.
send
(
'ack'
)
self
.
socket
.
send
(
'ack'
)
...
...
beat/core/test/test_message_handler.py
View file @
23ef306f
...
@@ -99,6 +99,90 @@ class TestMessageHandlerBase(unittest.TestCase):
...
@@ -99,6 +99,90 @@ class TestMessageHandlerBase(unittest.TestCase):
#----------------------------------------------------------
#----------------------------------------------------------
class
TestOneInput
(
TestMessageHandlerBase
):
def
setUp
(
self
):
dataformat
=
DataFormat
(
prefix
,
'user/single_integer/1'
)
self
.
create_remote_inputs
(
DataFormat
(
prefix
,
'user/single_integer/1'
),
dict
(
a
=
MockDataSource
([
dataformat
.
type
(
value
=
10
),
dataformat
.
type
(
value
=
20
),
],
[
(
0
,
0
),
(
1
,
1
),
]
)
)
)
self
.
remote_input_a
=
self
.
remote_input_list
[
'a'
]
def
test_input_has_more_data
(
self
):
self
.
assertTrue
(
self
.
remote_input_a
.
hasMoreData
())
def
test_input_next
(
self
):
self
.
remote_input_a
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
10
)
def
test_input_full_cycle
(
self
):
self
.
assertTrue
(
self
.
remote_input_a
.
hasMoreData
())
self
.
remote_input_a
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
10
)
self
.
assertTrue
(
self
.
remote_input_a
.
hasDataChanged
())
self
.
assertTrue
(
self
.
remote_input_a
.
hasMoreData
())
self
.
assertTrue
(
self
.
remote_input_a
.
isDataUnitDone
())
self
.
remote_input_a
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
20
)
self
.
assertTrue
(
self
.
remote_input_a
.
hasDataChanged
())
self
.
assertTrue
(
not
self
.
remote_input_a
.
hasMoreData
())
self
.
assertTrue
(
self
.
remote_input_a
.
isDataUnitDone
())
def
test_group_has_more_data
(
self
):
self
.
assertTrue
(
self
.
remote_group
.
hasMoreData
())
def
test_group_next
(
self
):
self
.
remote_group
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
10
)
self
.
assertTrue
(
self
.
remote_input_a
.
hasDataChanged
())
self
.
assertTrue
(
self
.
remote_input_a
.
hasMoreData
())
self
.
assertTrue
(
self
.
remote_input_a
.
isDataUnitDone
())
def
test_group_full_cycle
(
self
):
self
.
assertTrue
(
self
.
remote_group
.
hasMoreData
())
self
.
remote_group
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
10
)
self
.
assertTrue
(
self
.
remote_input_a
.
hasDataChanged
())
self
.
assertTrue
(
self
.
remote_input_a
.
hasMoreData
())
self
.
assertTrue
(
self
.
remote_input_a
.
isDataUnitDone
())
self
.
assertTrue
(
self
.
remote_group
.
hasMoreData
())
self
.
remote_group
.
next
()
self
.
assertEqual
(
self
.
remote_input_a
.
data
.
value
,
20
)
self
.
assertTrue
(
self
.
remote_input_a
.
hasDataChanged
())
self
.
assertFalse
(
self
.
remote_input_a
.
hasMoreData
())
self
.
assertTrue
(
self
.
remote_input_a
.
isDataUnitDone
())
self
.
assertFalse
(
self
.
remote_group
.
hasMoreData
())
#----------------------------------------------------------
class
TestSameFrequencyInputs
(
TestMessageHandlerBase
):
class
TestSameFrequencyInputs
(
TestMessageHandlerBase
):
def
setUp
(
self
):
def
setUp
(
self
):
...
...
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