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
3cdf5f18
Commit
3cdf5f18
authored
May 05, 2020
by
Jakob Otto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reimplement serializing
parent
54240489
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
111 additions
and
101 deletions
+111
-101
libcaf_net/caf/net/endpoint_manager.hpp
libcaf_net/caf/net/endpoint_manager.hpp
+1
-2
libcaf_net/caf/net/endpoint_manager_queue.hpp
libcaf_net/caf/net/endpoint_manager_queue.hpp
+4
-7
libcaf_net/src/actor_proxy_impl.cpp
libcaf_net/src/actor_proxy_impl.cpp
+4
-7
libcaf_net/src/application.cpp
libcaf_net/src/application.cpp
+8
-5
libcaf_net/src/endpoint_manager.cpp
libcaf_net/src/endpoint_manager.cpp
+2
-4
libcaf_net/src/net/endpoint_manager_queue.cpp
libcaf_net/src/net/endpoint_manager_queue.cpp
+2
-4
libcaf_net/test/datagram_transport.cpp
libcaf_net/test/datagram_transport.cpp
+12
-13
libcaf_net/test/doorman.cpp
libcaf_net/test/doorman.cpp
+6
-3
libcaf_net/test/endpoint_manager.cpp
libcaf_net/test/endpoint_manager.cpp
+7
-5
libcaf_net/test/stream_transport.cpp
libcaf_net/test/stream_transport.cpp
+15
-16
libcaf_net/test/string_application.cpp
libcaf_net/test/string_application.cpp
+13
-12
libcaf_net/test/transport_worker.cpp
libcaf_net/test/transport_worker.cpp
+16
-8
libcaf_net/test/transport_worker_dispatcher.cpp
libcaf_net/test/transport_worker_dispatcher.cpp
+21
-15
No files found.
libcaf_net/caf/net/endpoint_manager.hpp
View file @
3cdf5f18
...
@@ -71,8 +71,7 @@ public:
...
@@ -71,8 +71,7 @@ public:
void
resolve
(
uri
locator
,
actor
listener
);
void
resolve
(
uri
locator
,
actor
listener
);
/// Enqueues a message to the endpoint.
/// Enqueues a message to the endpoint.
void
enqueue
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
void
enqueue
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
);
std
::
vector
<
byte
>
payload
);
/// Enqueues an event to the endpoint.
/// Enqueues an event to the endpoint.
template
<
class
...
Ts
>
template
<
class
...
Ts
>
...
...
libcaf_net/caf/net/endpoint_manager_queue.hpp
View file @
3cdf5f18
...
@@ -125,11 +125,7 @@ public:
...
@@ -125,11 +125,7 @@ public:
/// ID of the receiving actor.
/// ID of the receiving actor.
strong_actor_ptr
receiver
;
strong_actor_ptr
receiver
;
/// Serialized representation of of `msg->content()`.
message
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
);
std
::
vector
<
byte
>
payload
;
message
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
std
::
vector
<
byte
>
payload
);
~
message
()
override
;
~
message
()
override
;
...
@@ -153,9 +149,10 @@ public:
...
@@ -153,9 +149,10 @@ public:
// nop
// nop
}
}
static
task_size_type
task_size
(
const
message
&
x
)
noexcept
{
static
task_size_type
task_size
(
const
message
&
)
noexcept
{
// Return at least 1 if the payload is empty.
// Return at least 1 if the payload is empty.
return
x
.
payload
.
size
()
+
static_cast
<
task_size_type
>
(
x
.
payload
.
empty
());
return
static_cast
<
task_size_type
>
(
1
);
// was x.payload.size() + static_cast<task_size_type>(x.payload.empty());
}
}
};
};
...
...
libcaf_net/src/actor_proxy_impl.cpp
View file @
3cdf5f18
...
@@ -34,14 +34,11 @@ actor_proxy_impl::~actor_proxy_impl() {
...
@@ -34,14 +34,11 @@ actor_proxy_impl::~actor_proxy_impl() {
// nop
// nop
}
}
void
actor_proxy_impl
::
enqueue
(
mailbox_element_ptr
what
,
execution_unit
*
)
{
void
actor_proxy_impl
::
enqueue
(
mailbox_element_ptr
msg
,
execution_unit
*
)
{
CAF_PUSH_AID
(
0
);
CAF_PUSH_AID
(
0
);
CAF_ASSERT
(
what
!=
nullptr
);
CAF_ASSERT
(
msg
!=
nullptr
);
CAF_LOG_SEND_EVENT
(
what
);
CAF_LOG_SEND_EVENT
(
msg
);
if
(
auto
payload
=
sf_
(
home_system
(),
what
->
content
()))
dst_
->
enqueue
(
std
::
move
(
msg
),
ctrl
());
dst_
->
enqueue
(
std
::
move
(
what
),
ctrl
(),
std
::
move
(
*
payload
));
else
CAF_LOG_ERROR
(
"unable to serialize payload: "
<<
payload
.
error
());
}
}
void
actor_proxy_impl
::
kill_proxy
(
execution_unit
*
ctx
,
error
rsn
)
{
void
actor_proxy_impl
::
kill_proxy
(
execution_unit
*
ctx
,
error
rsn
)
{
...
...
libcaf_net/src/application.cpp
View file @
3cdf5f18
...
@@ -52,14 +52,17 @@ error application::write_message(
...
@@ -52,14 +52,17 @@ error application::write_message(
CAF_ASSERT
(
ptr
!=
nullptr
);
CAF_ASSERT
(
ptr
!=
nullptr
);
CAF_ASSERT
(
ptr
->
msg
!=
nullptr
);
CAF_ASSERT
(
ptr
->
msg
!=
nullptr
);
CAF_LOG_TRACE
(
CAF_ARG2
(
"content"
,
ptr
->
msg
->
content
()));
CAF_LOG_TRACE
(
CAF_ARG2
(
"content"
,
ptr
->
msg
->
content
()));
auto
payload_prefix
=
writer
.
next_payload_buffer
();
auto
payload_prefix
_buf
=
writer
.
next_payload_buffer
();
binary_serializer
sink
{
system
(),
payload_prefix
};
binary_serializer
sink
{
system
(),
payload_prefix
_buf
};
const
auto
&
src
=
ptr
->
msg
->
sender
;
const
auto
&
src
=
ptr
->
msg
->
sender
;
const
auto
&
dst
=
ptr
->
receiver
;
const
auto
&
dst
=
ptr
->
receiver
;
if
(
dst
==
nullptr
)
{
if
(
dst
==
nullptr
)
{
// TODO: valid?
// TODO: valid?
return
none
;
return
none
;
}
}
auto
payload_buf
=
serialize
(
system
(),
ptr
->
msg
->
content
());
if
(
!
payload_buf
)
return
payload_buf
.
error
();
if
(
src
!=
nullptr
)
{
if
(
src
!=
nullptr
)
{
auto
src_id
=
src
->
id
();
auto
src_id
=
src
->
id
();
system
().
registry
().
put
(
src_id
,
src
);
system
().
registry
().
put
(
src_id
,
src
);
...
@@ -71,11 +74,11 @@ error application::write_message(
...
@@ -71,11 +74,11 @@ error application::write_message(
}
}
auto
hdr
=
writer
.
next_header_buffer
();
auto
hdr
=
writer
.
next_header_buffer
();
to_bytes
(
header
{
message_type
::
actor_message
,
to_bytes
(
header
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
payload_prefix
.
size
()
static_cast
<
uint32_t
>
(
payload_prefix
_buf
.
size
()
+
p
tr
->
payload
.
size
()),
+
p
ayload_buf
->
size
()),
ptr
->
msg
->
mid
.
integer_value
()},
ptr
->
msg
->
mid
.
integer_value
()},
hdr
);
hdr
);
writer
.
write_packet
(
hdr
,
payload_prefix
,
ptr
->
payload
);
writer
.
write_packet
(
hdr
,
payload_prefix
_buf
,
*
payload_buf
);
return
none
;
return
none
;
}
}
...
...
libcaf_net/src/endpoint_manager.cpp
View file @
3cdf5f18
...
@@ -60,11 +60,9 @@ void endpoint_manager::resolve(uri locator, actor listener) {
...
@@ -60,11 +60,9 @@ void endpoint_manager::resolve(uri locator, actor listener) {
}
}
void
endpoint_manager
::
enqueue
(
mailbox_element_ptr
msg
,
void
endpoint_manager
::
enqueue
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
strong_actor_ptr
receiver
)
{
std
::
vector
<
byte
>
payload
)
{
using
message_type
=
endpoint_manager_queue
::
message
;
using
message_type
=
endpoint_manager_queue
::
message
;
auto
ptr
=
new
message_type
(
std
::
move
(
msg
),
std
::
move
(
receiver
),
auto
ptr
=
new
message_type
(
std
::
move
(
msg
),
std
::
move
(
receiver
));
std
::
move
(
payload
));
enqueue
(
ptr
);
enqueue
(
ptr
);
}
}
...
...
libcaf_net/src/net/endpoint_manager_queue.cpp
View file @
3cdf5f18
...
@@ -56,12 +56,10 @@ size_t endpoint_manager_queue::event::task_size() const noexcept {
...
@@ -56,12 +56,10 @@ size_t endpoint_manager_queue::event::task_size() const noexcept {
}
}
endpoint_manager_queue
::
message
::
message
(
mailbox_element_ptr
msg
,
endpoint_manager_queue
::
message
::
message
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
strong_actor_ptr
receiver
)
std
::
vector
<
byte
>
payload
)
:
element
(
element_type
::
message
),
:
element
(
element_type
::
message
),
msg
(
std
::
move
(
msg
)),
msg
(
std
::
move
(
msg
)),
receiver
(
std
::
move
(
receiver
)),
receiver
(
std
::
move
(
receiver
))
{
payload
(
std
::
move
(
payload
))
{
// nop
// nop
}
}
...
...
libcaf_net/test/datagram_transport.cpp
View file @
3cdf5f18
...
@@ -122,7 +122,10 @@ public:
...
@@ -122,7 +122,10 @@ public:
template
<
class
Transport
>
template
<
class
Transport
>
void
write_message
(
Transport
&
transport
,
void
write_message
(
Transport
&
transport
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
transport
.
write_packet
(
msg
->
payload
);
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
@@ -139,10 +142,8 @@ public:
...
@@ -139,10 +142,8 @@ public:
auto
nid
=
make_node_id
(
uri
);
auto
nid
=
make_node_id
(
uri
);
actor_config
cfg
;
actor_config
cfg
;
endpoint_manager_ptr
ptr
{
&
parent
.
manager
()};
endpoint_manager_ptr
ptr
{
&
parent
.
manager
()};
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
&
parent
.
system
(),
aid
,
nid
,
&
parent
.
system
(),
cfg
,
std
::
move
(
ptr
));
cfg
,
std
::
move
(
ptr
));
anon_send
(
listener
,
resolve_atom_v
,
std
::
string
{
path
.
begin
(),
path
.
end
()},
anon_send
(
listener
,
resolve_atom_v
,
std
::
string
{
path
.
begin
(),
path
.
end
()},
p
);
p
);
}
}
...
@@ -204,10 +205,9 @@ CAF_TEST(receive) {
...
@@ -204,10 +205,9 @@ CAF_TEST(receive) {
using
transport_type
=
datagram_transport
<
dummy_application_factory
>
;
using
transport_type
=
datagram_transport
<
dummy_application_factory
>
;
if
(
auto
err
=
nonblocking
(
recv_socket
,
true
))
if
(
auto
err
=
nonblocking
(
recv_socket
,
true
))
CAF_FAIL
(
"nonblocking() returned an error: "
<<
err
);
CAF_FAIL
(
"nonblocking() returned an error: "
<<
err
);
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr
=
make_endpoint_manager
(
transport_type
{
recv_socket
,
mpx
,
sys
,
dummy_application_factory
{
transport_type
{
recv_socket
,
dummy_application_factory
{
shared_buf
}});
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
CAF_CHECK
(
mgr_impl
!=
nullptr
);
CAF_CHECK
(
mgr_impl
!=
nullptr
);
...
@@ -227,10 +227,9 @@ CAF_TEST(resolve and proxy communication) {
...
@@ -227,10 +227,9 @@ CAF_TEST(resolve and proxy communication) {
using
transport_type
=
datagram_transport
<
dummy_application_factory
>
;
using
transport_type
=
datagram_transport
<
dummy_application_factory
>
;
buffer_type
recv_buf
(
1024
);
buffer_type
recv_buf
(
1024
);
auto
uri
=
unbox
(
make_uri
(
"test:/id/42"
));
auto
uri
=
unbox
(
make_uri
(
"test:/id/42"
));
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr
=
make_endpoint_manager
(
transport_type
{
send_socket
,
mpx
,
sys
,
dummy_application_factory
{
transport_type
{
send_socket
,
dummy_application_factory
{
shared_buf
}});
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
CAF_CHECK
(
mgr_impl
!=
nullptr
);
CAF_CHECK
(
mgr_impl
!=
nullptr
);
...
...
libcaf_net/test/doorman.cpp
View file @
3cdf5f18
...
@@ -74,10 +74,13 @@ public:
...
@@ -74,10 +74,13 @@ public:
return
none
;
return
none
;
}
}
template
<
class
Paren
t
>
template
<
class
Transpor
t
>
void
write_message
(
Parent
&
paren
t
,
void
write_message
(
Transport
&
transpor
t
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
parent
.
write_packet
(
msg
->
payload
);
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
...
libcaf_net/test/endpoint_manager.cpp
View file @
3cdf5f18
...
@@ -107,8 +107,11 @@ public:
...
@@ -107,8 +107,11 @@ public:
template
<
class
Manager
>
template
<
class
Manager
>
bool
handle_write_event
(
Manager
&
mgr
)
{
bool
handle_write_event
(
Manager
&
mgr
)
{
for
(
auto
x
=
mgr
.
next_message
();
x
!=
nullptr
;
x
=
mgr
.
next_message
())
{
for
(
auto
x
=
mgr
.
next_message
();
x
!=
nullptr
;
x
=
mgr
.
next_message
())
{
auto
&
payload
=
x
->
payload
;
if
(
auto
payload
=
application_type
::
serialize
(
mgr
.
system
(),
buf_
.
insert
(
buf_
.
end
(),
payload
.
begin
(),
payload
.
end
());
x
->
msg
->
payload
))
buf_
.
insert
(
buf_
.
end
(),
payload
->
begin
(),
payload
->
end
());
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
auto
res
=
write
(
handle_
,
buf_
);
auto
res
=
write
(
handle_
,
buf_
);
if
(
auto
num_bytes
=
get_if
<
size_t
>
(
&
res
))
{
if
(
auto
num_bytes
=
get_if
<
size_t
>
(
&
res
))
{
...
@@ -128,9 +131,8 @@ public:
...
@@ -128,9 +131,8 @@ public:
auto
hid
=
string_view
(
"0011223344556677889900112233445566778899"
);
auto
hid
=
string_view
(
"0011223344556677889900112233445566778899"
);
auto
nid
=
unbox
(
make_node_id
(
42
,
hid
));
auto
nid
=
unbox
(
make_node_id
(
42
,
hid
));
actor_config
cfg
;
actor_config
cfg
;
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
&
mgr
.
system
(),
cfg
,
aid
,
nid
,
&
mgr
.
system
(),
cfg
,
&
mgr
);
&
mgr
);
std
::
string
path
{
locator
.
path
().
begin
(),
locator
.
path
().
end
()};
std
::
string
path
{
locator
.
path
().
begin
(),
locator
.
path
().
end
()};
anon_send
(
listener
,
resolve_atom_v
,
std
::
move
(
path
),
p
);
anon_send
(
listener
,
resolve_atom_v
,
std
::
move
(
path
),
p
);
}
}
...
...
libcaf_net/test/stream_transport.cpp
View file @
3cdf5f18
...
@@ -90,10 +90,13 @@ public:
...
@@ -90,10 +90,13 @@ public:
return
none
;
return
none
;
}
}
template
<
class
Parent
>
template
<
class
Transport
>
void
write_message
(
Parent
&
parent
,
void
write_message
(
Transport
&
transport
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
ptr
)
{
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
parent
.
write_packet
(
ptr
->
payload
);
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
@@ -110,10 +113,8 @@ public:
...
@@ -110,10 +113,8 @@ public:
auto
nid
=
unbox
(
make_node_id
(
42
,
hid
));
auto
nid
=
unbox
(
make_node_id
(
42
,
hid
));
actor_config
cfg
;
actor_config
cfg
;
endpoint_manager_ptr
ptr
{
&
parent
.
manager
()};
endpoint_manager_ptr
ptr
{
&
parent
.
manager
()};
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
&
parent
.
system
(),
aid
,
nid
,
&
parent
.
system
(),
cfg
,
std
::
move
(
ptr
));
cfg
,
std
::
move
(
ptr
));
anon_send
(
listener
,
resolve_atom_v
,
std
::
string
{
path
.
begin
(),
path
.
end
()},
anon_send
(
listener
,
resolve_atom_v
,
std
::
string
{
path
.
begin
(),
path
.
end
()},
p
);
p
);
}
}
...
@@ -155,10 +156,9 @@ CAF_TEST_FIXTURE_SCOPE(endpoint_manager_tests, fixture)
...
@@ -155,10 +156,9 @@ CAF_TEST_FIXTURE_SCOPE(endpoint_manager_tests, fixture)
CAF_TEST
(
receive
)
{
CAF_TEST
(
receive
)
{
using
transport_type
=
stream_transport
<
dummy_application
>
;
using
transport_type
=
stream_transport
<
dummy_application
>
;
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr
=
make_endpoint_manager
(
transport_type
{
recv_socket_guard
.
release
(),
mpx
,
sys
,
dummy_application
{
transport_type
{
recv_socket_guard
.
release
(),
dummy_application
{
shared_buf
}});
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
auto
mgr_impl
=
mgr
.
downcast
<
endpoint_manager_impl
<
transport_type
>>
();
CAF_CHECK
(
mgr_impl
!=
nullptr
);
CAF_CHECK
(
mgr_impl
!=
nullptr
);
...
@@ -177,10 +177,9 @@ CAF_TEST(receive) {
...
@@ -177,10 +177,9 @@ CAF_TEST(receive) {
CAF_TEST
(
resolve
and
proxy
communication
)
{
CAF_TEST
(
resolve
and
proxy
communication
)
{
using
transport_type
=
stream_transport
<
dummy_application
>
;
using
transport_type
=
stream_transport
<
dummy_application
>
;
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr
=
make_endpoint_manager
(
transport_type
{
send_socket_guard
.
release
(),
mpx
,
sys
,
dummy_application
{
transport_type
{
send_socket_guard
.
release
(),
dummy_application
{
shared_buf
}});
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
run
();
run
();
mgr
->
resolve
(
unbox
(
make_uri
(
"test:/id/42"
)),
self
);
mgr
->
resolve
(
unbox
(
make_uri
(
"test:/id/42"
)),
self
);
...
...
libcaf_net/test/string_application.cpp
View file @
3cdf5f18
...
@@ -66,8 +66,8 @@ struct string_application_header {
...
@@ -66,8 +66,8 @@ struct string_application_header {
/// @relates header
/// @relates header
template
<
class
Inspector
>
template
<
class
Inspector
>
typename
Inspector
::
result_type
inspect
(
Inspector
&
f
,
typename
Inspector
::
result_type
string_application_header
&
hdr
)
{
inspect
(
Inspector
&
f
,
string_application_header
&
hdr
)
{
return
f
(
meta
::
type_name
(
"sa_header"
),
hdr
.
payload
);
return
f
(
meta
::
type_name
(
"sa_header"
),
hdr
.
payload
);
}
}
...
@@ -105,11 +105,14 @@ public:
...
@@ -105,11 +105,14 @@ public:
if
(
ptr
->
msg
==
nullptr
)
if
(
ptr
->
msg
==
nullptr
)
return
;
return
;
auto
header_buf
=
parent
.
next_header_buffer
();
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
());
binary_serializer
sink
{
sys_
,
header_buf
};
binary_serializer
sink
{
sys_
,
header_buf
};
header_type
header
{
static_cast
<
uint32_t
>
(
p
tr
->
payload
.
size
())};
header_type
header
{
static_cast
<
uint32_t
>
(
p
ayload_buf
->
size
())};
if
(
auto
err
=
sink
(
header
))
if
(
auto
err
=
sink
(
header
))
CAF_FAIL
(
"serializing failed: "
<<
err
);
CAF_FAIL
(
"serializing failed: "
<<
err
);
parent
.
write_packet
(
header_buf
,
ptr
->
payload
);
parent
.
write_packet
(
header_buf
,
*
payload_buf
);
}
}
static
expected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
static
expected
<
std
::
vector
<
byte
>>
serialize
(
actor_system
&
sys
,
...
@@ -208,8 +211,8 @@ private:
...
@@ -208,8 +211,8 @@ private:
CAF_TEST_FIXTURE_SCOPE
(
endpoint_manager_tests
,
fixture
)
CAF_TEST_FIXTURE_SCOPE
(
endpoint_manager_tests
,
fixture
)
CAF_TEST
(
receive
)
{
CAF_TEST
(
receive
)
{
using
application_type
=
extend
<
string_application
>::
with
<
using
application_type
stream_string_application
>
;
=
extend
<
string_application
>::
with
<
stream_string_application
>
;
using
transport_type
=
stream_transport
<
application_type
>
;
using
transport_type
=
stream_transport
<
application_type
>
;
std
::
vector
<
byte
>
read_buf
(
1024
);
std
::
vector
<
byte
>
read_buf
(
1024
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
1u
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
1u
);
...
@@ -219,14 +222,12 @@ CAF_TEST(receive) {
...
@@ -219,14 +222,12 @@ CAF_TEST(receive) {
CAF_CHECK_EQUAL
(
read
(
sockets
.
second
,
read_buf
),
CAF_CHECK_EQUAL
(
read
(
sockets
.
second
,
read_buf
),
sec
::
unavailable_or_would_block
);
sec
::
unavailable_or_would_block
);
CAF_MESSAGE
(
"adding both endpoint managers"
);
CAF_MESSAGE
(
"adding both endpoint managers"
);
auto
mgr1
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr1
=
make_endpoint_manager
(
transport_type
{
sockets
.
first
,
mpx
,
sys
,
transport_type
{
sockets
.
first
,
application_type
{
sys
,
buf
}});
application_type
{
sys
,
buf
}});
CAF_CHECK_EQUAL
(
mgr1
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr1
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
2u
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
2u
);
auto
mgr2
=
make_endpoint_manager
(
mpx
,
sys
,
auto
mgr2
=
make_endpoint_manager
(
transport_type
{
sockets
.
second
,
mpx
,
sys
,
transport_type
{
sockets
.
second
,
application_type
{
sys
,
buf
}});
application_type
{
sys
,
buf
}});
CAF_CHECK_EQUAL
(
mgr2
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mgr2
->
init
(),
none
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
3u
);
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
3u
);
CAF_MESSAGE
(
"resolve actor-proxy"
);
CAF_MESSAGE
(
"resolve actor-proxy"
);
...
...
libcaf_net/test/transport_worker.cpp
View file @
3cdf5f18
...
@@ -73,9 +73,11 @@ public:
...
@@ -73,9 +73,11 @@ public:
template
<
class
Parent
>
template
<
class
Parent
>
void
write_message
(
Parent
&
parent
,
void
write_message
(
Parent
&
parent
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
ptr
)
{
auto
header_buffer
=
parent
.
next_header_buffer
();
if
(
auto
payload
=
serialize
(
parent
.
system
(),
ptr
->
msg
->
payload
))
parent
.
write_packet
(
header_buffer
,
msg
->
payload
);
parent
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
@@ -121,8 +123,8 @@ public:
...
@@ -121,8 +123,8 @@ public:
using
application_type
=
dummy_application
;
using
application_type
=
dummy_application
;
dummy_transport
(
std
::
shared_ptr
<
transport_result
>
res
)
dummy_transport
(
actor_system
&
sys
,
std
::
shared_ptr
<
transport_result
>
res
)
:
res_
(
std
::
move
(
res
))
{
:
sys_
(
sys
),
res_
(
std
::
move
(
res
))
{
// nop
// nop
}
}
...
@@ -134,6 +136,10 @@ public:
...
@@ -134,6 +136,10 @@ public:
packet_buf
.
insert
(
packet_buf
.
end
(),
buf
->
begin
(),
buf
->
end
());
packet_buf
.
insert
(
packet_buf
.
end
(),
buf
->
begin
(),
buf
->
end
());
}
}
actor_system
&
system
()
{
return
sys_
;
}
transport_type
&
transport
()
{
transport_type
&
transport
()
{
return
*
this
;
return
*
this
;
}
}
...
@@ -147,6 +153,7 @@ public:
...
@@ -147,6 +153,7 @@ public:
}
}
private:
private:
actor_system
&
sys_
;
std
::
shared_ptr
<
transport_result
>
res_
;
std
::
shared_ptr
<
transport_result
>
res_
;
};
};
...
@@ -156,7 +163,7 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
...
@@ -156,7 +163,7 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
fixture
()
fixture
()
:
transport_results
{
std
::
make_shared
<
transport_result
>
()},
:
transport_results
{
std
::
make_shared
<
transport_result
>
()},
application_results
{
std
::
make_shared
<
application_result
>
()},
application_results
{
std
::
make_shared
<
application_result
>
()},
transport
(
transport_results
),
transport
(
sys
,
transport_results
),
worker
{
dummy_application
{
application_results
}}
{
worker
{
dummy_application
{
application_results
}}
{
mpx
=
std
::
make_shared
<
multiplexer
>
();
mpx
=
std
::
make_shared
<
multiplexer
>
();
if
(
auto
err
=
mpx
->
init
())
if
(
auto
err
=
mpx
->
init
())
...
@@ -195,7 +202,8 @@ CAF_TEST(handle_data) {
...
@@ -195,7 +202,8 @@ CAF_TEST(handle_data) {
CAF_CHECK_EQUAL
(
result
,
hello_test
);
CAF_CHECK_EQUAL
(
result
,
hello_test
);
}
}
CAF_TEST
(
write_message
)
{
/* TODO: Removed payload, send data in form of message
CAF_TEST(write_message) {
actor act;
actor act;
auto strong_actor = actor_cast<strong_actor_ptr>(act);
auto strong_actor = actor_cast<strong_actor_ptr>(act);
mailbox_element::forwarding_stack stack;
mailbox_element::forwarding_stack stack;
...
@@ -212,7 +220,7 @@ CAF_TEST(write_message) {
...
@@ -212,7 +220,7 @@ CAF_TEST(write_message) {
string_view result{reinterpret_cast<char*>(buf.data()), buf.size()};
string_view result{reinterpret_cast<char*>(buf.data()), buf.size()};
CAF_CHECK_EQUAL(result, hello_test);
CAF_CHECK_EQUAL(result, hello_test);
CAF_CHECK_EQUAL(transport_results->ep, ep);
CAF_CHECK_EQUAL(transport_results->ep, ep);
}
}
*/
CAF_TEST
(
resolve
)
{
CAF_TEST
(
resolve
)
{
worker
.
resolve
(
transport
,
"foo"
,
self
);
worker
.
resolve
(
transport
,
"foo"
,
self
);
...
...
libcaf_net/test/transport_worker_dispatcher.cpp
View file @
3cdf5f18
...
@@ -64,12 +64,14 @@ public:
...
@@ -64,12 +64,14 @@ public:
return
none
;
return
none
;
}
}
template
<
class
Paren
t
>
template
<
class
Transpor
t
>
void
write_message
(
Parent
&
paren
t
,
void
write_message
(
Transport
&
transpor
t
,
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
std
::
unique_ptr
<
endpoint_manager_queue
::
message
>
msg
)
{
rec_buf_
->
push_back
(
static_cast
<
byte
>
(
id_
));
rec_buf_
->
push_back
(
static_cast
<
byte
>
(
id_
));
auto
header_buf
=
parent
.
next_header_buffer
();
if
(
auto
payload
=
serialize
(
transport
.
system
(),
msg
->
msg
->
payload
))
parent
.
write_packet
(
header_buf
,
msg
->
payload
);
transport
.
write_packet
(
*
payload
);
else
CAF_FAIL
(
"serializing failed: "
<<
payload
.
error
());
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
@@ -126,7 +128,8 @@ struct dummy_transport {
...
@@ -126,7 +128,8 @@ struct dummy_transport {
using
application_type
=
dummy_application
;
using
application_type
=
dummy_application
;
dummy_transport
(
std
::
shared_ptr
<
buffer_type
>
buf
)
:
buf_
(
std
::
move
(
buf
))
{
dummy_transport
(
actor_system
&
sys
,
std
::
shared_ptr
<
buffer_type
>
buf
)
:
sys_
(
sys
),
buf_
(
std
::
move
(
buf
))
{
// nop
// nop
}
}
...
@@ -136,6 +139,10 @@ struct dummy_transport {
...
@@ -136,6 +139,10 @@ struct dummy_transport {
buf_
->
insert
(
buf_
->
end
(),
buf
->
begin
(),
buf
->
end
());
buf_
->
insert
(
buf_
->
end
(),
buf
->
begin
(),
buf
->
end
());
}
}
actor_system
&
system
()
{
return
sys_
;
}
transport_type
&
transport
()
{
transport_type
&
transport
()
{
return
*
this
;
return
*
this
;
}
}
...
@@ -149,6 +156,7 @@ struct dummy_transport {
...
@@ -149,6 +156,7 @@ struct dummy_transport {
}
}
private:
private:
actor_system
&
sys_
;
std
::
shared_ptr
<
buffer_type
>
buf_
;
std
::
shared_ptr
<
buffer_type
>
buf_
;
};
};
...
@@ -182,13 +190,13 @@ uri operator"" _u(const char* cstr, size_t cstr_len) {
...
@@ -182,13 +190,13 @@ uri operator"" _u(const char* cstr, size_t cstr_len) {
}
}
struct
fixture
:
host_fixture
{
struct
fixture
:
host_fixture
{
using
dispatcher_type
=
transport_worker_dispatcher
<
dummy_application_factory
,
using
dispatcher_type
ip_endpoint
>
;
=
transport_worker_dispatcher
<
dummy_application_factory
,
ip_endpoint
>
;
fixture
()
fixture
()
:
buf
{
std
::
make_shared
<
buffer_type
>
()},
:
buf
{
std
::
make_shared
<
buffer_type
>
()},
dispatcher
{
dummy_application_factory
{
buf
}},
dispatcher
{
dummy_application_factory
{
buf
}},
dummy
{
buf
}
{
dummy
{
sys
,
buf
}
{
add_new_workers
();
add_new_workers
();
}
}
...
@@ -206,8 +214,7 @@ struct fixture : host_fixture {
...
@@ -206,8 +214,7 @@ struct fixture : host_fixture {
auto
elem
=
make_mailbox_element
(
nullptr
,
make_message_id
(
12345
),
auto
elem
=
make_mailbox_element
(
nullptr
,
make_message_id
(
12345
),
std
::
move
(
stack
),
make_message
());
std
::
move
(
stack
),
make_message
());
return
detail
::
make_unique
<
endpoint_manager_queue
::
message
>
(
std
::
move
(
elem
),
return
detail
::
make_unique
<
endpoint_manager_queue
::
message
>
(
std
::
move
(
elem
),
receiver
,
receiver
);
payload
);
}
}
bool
contains
(
byte
x
)
{
bool
contains
(
byte
x
)
{
...
@@ -255,9 +262,8 @@ struct fixture : host_fixture {
...
@@ -255,9 +262,8 @@ struct fixture : host_fixture {
test_write_message(testcase); \
test_write_message(testcase); \
CAF_CHECK_EQUAL(buf->size(), hello_test.size() + 1u); \
CAF_CHECK_EQUAL(buf->size(), hello_test.size() + 1u); \
CAF_CHECK_EQUAL(static_cast<byte>(testcase.worker_id), buf->at(0)); \
CAF_CHECK_EQUAL(static_cast<byte>(testcase.worker_id), buf->at(0)); \
CAF_CHECK_EQUAL(memcmp(buf->data() + 1, hello_test.data(), \
CAF_CHECK_EQUAL( \
hello_test.size()), \
memcmp(buf->data() + 1, hello_test.data(), hello_test.size()), 0); \
0); \
buf->clear();
buf->clear();
#define CHECK_TIMEOUT(testcase) \
#define CHECK_TIMEOUT(testcase) \
...
@@ -283,12 +289,12 @@ CAF_TEST(handle_data) {
...
@@ -283,12 +289,12 @@ CAF_TEST(handle_data) {
CHECK_HANDLE_DATA
(
test_data
.
at
(
3
));
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(0));
CHECK_WRITE_MESSAGE(test_data.at(1));
CHECK_WRITE_MESSAGE(test_data.at(1));
CHECK_WRITE_MESSAGE(test_data.at(2));
CHECK_WRITE_MESSAGE(test_data.at(2));
CHECK_WRITE_MESSAGE(test_data.at(3));
CHECK_WRITE_MESSAGE(test_data.at(3));
}
}
*/
CAF_TEST
(
resolve
)
{
CAF_TEST
(
resolve
)
{
// TODO think of a test for this
// TODO think of a test for this
...
...
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