Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
actor-incubator
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
actor-incubator
Commits
b068df71
Commit
b068df71
authored
May 05, 2020
by
Jakob Otto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reuse buffers for serializing
parent
3cdf5f18
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
66 additions
and
82 deletions
+66
-82
libcaf_net/caf/net/basp/application.hpp
libcaf_net/caf/net/basp/application.hpp
+2
-1
libcaf_net/caf/net/endpoint_manager.hpp
libcaf_net/caf/net/endpoint_manager.hpp
+2
-4
libcaf_net/src/application.cpp
libcaf_net/src/application.cpp
+9
-12
libcaf_net/test/datagram_transport.cpp
libcaf_net/test/datagram_transport.cpp
+10
-12
libcaf_net/test/doorman.cpp
libcaf_net/test/doorman.cpp
+13
-16
libcaf_net/test/endpoint_manager.cpp
libcaf_net/test/endpoint_manager.cpp
+9
-12
libcaf_net/test/stream_transport.cpp
libcaf_net/test/stream_transport.cpp
+10
-12
libcaf_net/test/string_application.cpp
libcaf_net/test/string_application.cpp
+9
-12
libcaf_net/test/transport_worker_dispatcher.cpp
libcaf_net/test/transport_worker_dispatcher.cpp
+2
-1
No files found.
libcaf_net/caf/net/basp/application.hpp
View file @
b068df71
...
...
@@ -136,7 +136,8 @@ public:
// nop
}
static
expected
<
buffer_type
>
serialize
(
actor_system
&
sys
,
const
message
&
x
);
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
);
// -- utility functions ------------------------------------------------------
...
...
libcaf_net/caf/net/endpoint_manager.hpp
View file @
b068df71
...
...
@@ -44,11 +44,9 @@ public:
using
super
=
socket_manager
;
/// Represents either an error or a serialized payload.
using
maybe_buffer
=
expected
<
std
::
vector
<
byte
>>
;
/// A function type for serializing message payloads.
using
serialize_fun_type
=
maybe_buffer
(
*
)(
actor_system
&
,
const
message
&
);
using
serialize_fun_type
=
error_code
<
sec
>
(
*
)(
actor_system
&
,
const
message
&
,
std
::
vector
<
byte
>&
buf
);
// -- constructors, destructors, and assignment operators --------------------
...
...
libcaf_net/src/application.cpp
View file @
b068df71
...
...
@@ -60,9 +60,9 @@ error application::write_message(
// TODO: valid?
return
none
;
}
auto
payload_buf
=
serialize
(
system
(),
ptr
->
msg
->
content
()
);
if
(
!
payload_buf
)
return
payload_buf
.
error
()
;
auto
payload_buf
=
writer
.
next_payload_buffer
(
);
if
(
auto
err
=
serialize
(
system
(),
ptr
->
msg
->
content
(),
payload_buf
)
)
return
err
;
if
(
src
!=
nullptr
)
{
auto
src_id
=
src
->
id
();
system
().
registry
().
put
(
src_id
,
src
);
...
...
@@ -75,10 +75,10 @@ error application::write_message(
auto
hdr
=
writer
.
next_header_buffer
();
to_bytes
(
header
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
payload_prefix_buf
.
size
()
+
payload_buf
->
size
()),
+
payload_buf
.
size
()),
ptr
->
msg
->
mid
.
integer_value
()},
hdr
);
writer
.
write_packet
(
hdr
,
payload_prefix_buf
,
*
payload_buf
);
writer
.
write_packet
(
hdr
,
payload_prefix_buf
,
payload_buf
);
return
none
;
}
...
...
@@ -121,13 +121,10 @@ void application::local_actor_down(packet_writer& writer, actor_id id,
writer
.
write_packet
(
hdr
,
payload
);
}
expected
<
std
::
vector
<
byte
>>
application
::
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
std
::
vector
<
byte
>
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
error_code
<
sec
>
application
::
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
strong_actor_ptr
application
::
resolve_local_path
(
string_view
path
)
{
...
...
libcaf_net/test/datagram_transport.cpp
View file @
b068df71
...
...
@@ -119,13 +119,13 @@ public:
return
none
;
}
template
<
class
Transpor
t
>
void
write_message
(
Transport
&
transpor
t
,
template
<
class
Paren
t
>
void
write_message
(
Parent
&
paren
t
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
()
);
auto
payload_buf
=
parent
.
next_payload_buffer
();
if
(
auto
err
=
serialize
(
parent
.
system
(),
msg
->
msg
->
payload
,
payload_buf
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
parent
.
write_packet
(
payload_buf
);
}
template
<
class
Parent
>
...
...
@@ -167,12 +167,10 @@ public:
CAF_FAIL
(
"handle_error called: "
<<
to_string
(
sec
));
}
static
expected
<
buffer_type
>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
buffer_type
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
private:
...
...
libcaf_net/test/doorman.cpp
View file @
b068df71
...
...
@@ -60,13 +60,10 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
class
dummy_application
{
public:
static
expected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
std
::
vector
<
byte
>
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
template
<
class
Parent
>
...
...
@@ -74,13 +71,13 @@ public:
return
none
;
}
template
<
class
Transpor
t
>
void
write_message
(
Transport
&
transpor
t
,
template
<
class
Paren
t
>
void
write_message
(
Parent
&
paren
t
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
()
);
auto
payload_buf
=
parent
.
next_payload_buffer
();
if
(
auto
err
=
serialize
(
parent
.
system
(),
msg
->
msg
->
payload
,
payload_buf
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
parent
.
write_packet
(
payload_buf
);
}
template
<
class
Parent
>
...
...
@@ -119,9 +116,9 @@ class dummy_application_factory {
public:
using
application_type
=
dummy_application
;
static
e
xpected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
return
dummy_application
::
serialize
(
sys
,
x
);
static
e
rror_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
return
dummy_application
::
serialize
(
sys
,
x
,
buf
);
}
template
<
class
Parent
>
...
...
libcaf_net/test/endpoint_manager.cpp
View file @
b068df71
...
...
@@ -62,13 +62,10 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
class
dummy_application
{
public:
static
expected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
std
::
vector
<
byte
>
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
};
...
...
@@ -106,12 +103,12 @@ public:
template
<
class
Manager
>
bool
handle_write_event
(
Manager
&
mgr
)
{
auto
sf
=
mgr
.
serialize_fun
();
for
(
auto
x
=
mgr
.
next_message
();
x
!=
nullptr
;
x
=
mgr
.
next_message
())
{
if
(
auto
payload
=
application_type
::
serialize
(
mgr
.
system
(),
x
->
msg
->
payload
))
buf_
.
insert
(
buf_
.
end
(),
payload
->
begin
(),
payload
->
end
());
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
std
::
vector
<
byte
>
payload_buf
;
if
(
auto
err
=
sf
(
mgr
.
system
(),
x
->
msg
->
payload
,
payload_buf
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
buf_
.
insert
(
buf_
.
end
(),
payload_buf
.
begin
(),
payload_buf
.
end
());
}
auto
res
=
write
(
handle_
,
buf_
);
if
(
auto
num_bytes
=
get_if
<
size_t
>
(
&
res
))
{
...
...
libcaf_net/test/stream_transport.cpp
View file @
b068df71
...
...
@@ -90,13 +90,13 @@ public:
return
none
;
}
template
<
class
Transpor
t
>
void
write_message
(
Transport
&
transpor
t
,
template
<
class
Paren
t
>
void
write_message
(
Parent
&
paren
t
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
()
);
auto
payload_buf
=
parent
.
next_payload_buffer
();
if
(
auto
err
=
serialize
(
parent
.
system
(),
msg
->
msg
->
payload
,
payload_buf
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
parent
.
write_packet
(
payload_buf
);
}
template
<
class
Parent
>
...
...
@@ -138,12 +138,10 @@ public:
// nop
}
static
expected
<
buffer_type
>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
buffer_type
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
private:
...
...
libcaf_net/test/string_application.cpp
View file @
b068df71
...
...
@@ -105,23 +105,20 @@ public:
if
(
ptr
->
msg
==
nullptr
)
return
;
auto
header_buf
=
parent
.
next_header_buffer
();
auto
payload_buf
=
serialize
(
parent
.
system
(),
ptr
->
msg
->
payload
);
if
(
!
payload_buf
)
CAF_FAIL
(
"serializing failed: "
<<
payload_buf
.
error
()
);
auto
payload_buf
=
parent
.
next_payload_buffer
(
);
if
(
auto
err
=
serialize
(
parent
.
system
(),
ptr
->
msg
->
payload
,
payload_buf
)
)
CAF_FAIL
(
"serializing failed: "
<<
err
);
binary_serializer
sink
{
sys_
,
header_buf
};
header_type
header
{
static_cast
<
uint32_t
>
(
payload_buf
->
size
())};
header_type
header
{
static_cast
<
uint32_t
>
(
payload_buf
.
size
())};
if
(
auto
err
=
sink
(
header
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
parent
.
write_packet
(
header_buf
,
*
payload_buf
);
parent
.
write_packet
(
header_buf
,
payload_buf
);
}
static
expected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
const
message
&
x
)
{
std
::
vector
<
byte
>
result
;
binary_serializer
sink
{
sys
,
result
};
if
(
auto
err
=
x
.
save
(
sink
))
return
err
.
value
();
return
result
;
static
error_code
<
sec
>
serialize
(
actor_system
&
sys
,
const
message
&
x
,
std
::
vector
<
byte
>&
buf
)
{
binary_serializer
sink
{
sys
,
buf
};
return
x
.
save
(
sink
);
}
private:
...
...
libcaf_net/test/transport_worker_dispatcher.cpp
View file @
b068df71
...
...
@@ -289,7 +289,8 @@ CAF_TEST(handle_data) {
CHECK_HANDLE_DATA
(
test_data
.
at
(
3
));
}
/*CAF_TEST(write_message write_packet) {
/*
CAF_TEST(write_message write_packet) {
CHECK_WRITE_MESSAGE(test_data.at(0));
CHECK_WRITE_MESSAGE(test_data.at(1));
CHECK_WRITE_MESSAGE(test_data.at(2));
...
...
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