Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
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
Operations
Operations
Metrics
Environments
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 Framework
Commits
f5991184
Commit
f5991184
authored
Sep 18, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add receiver pointer to endpoint_manager::message
parent
51f336ad
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
39 additions
and
12 deletions
+39
-12
libcaf_net/caf/net/basp/application.hpp
libcaf_net/caf/net/basp/application.hpp
+21
-5
libcaf_net/caf/net/endpoint_manager.hpp
libcaf_net/caf/net/endpoint_manager.hpp
+7
-2
libcaf_net/doc/basp.graffle
libcaf_net/doc/basp.graffle
+0
-0
libcaf_net/src/actor_proxy_impl.cpp
libcaf_net/src/actor_proxy_impl.cpp
+3
-3
libcaf_net/src/endpoint_manager.cpp
libcaf_net/src/endpoint_manager.cpp
+7
-2
libcaf_net/test/transport_worker.cpp
libcaf_net/test/transport_worker.cpp
+1
-0
No files found.
libcaf_net/caf/net/basp/application.hpp
View file @
f5991184
...
...
@@ -76,13 +76,29 @@ public:
}
template
<
class
Parent
>
void
write_message
(
Parent
&
parent
,
error
write_message
(
Parent
&
parent
,
std
::
unique_ptr
<
endpoint_manager
::
message
>
ptr
)
{
header
hdr
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
ptr
->
payload
.
size
()),
// TODO: avoid extra copy of the payload
buf_
.
clear
();
serializer_impl
<
buffer_type
>
sink
{
system
(),
buf_
};
const
auto
&
src
=
ptr
->
msg
->
sender
;
const
auto
&
dst
=
ptr
->
receiver
;
if
(
dst
==
nullptr
)
{
// TODO: valid?
return
none
;
}
if
(
src
!=
nullptr
)
{
if
(
auto
err
=
sink
(
src
->
node
(),
src
->
id
(),
dst
->
id
(),
ptr
->
msg
->
stages
))
return
err
;
}
else
{
if
(
auto
err
=
sink
(
node_id
{},
actor_id
{
0
},
dst
->
id
(),
ptr
->
msg
->
stages
))
return
err
;
}
buf_
.
insert
(
buf_
.
end
(),
ptr
->
payload
.
begin
(),
ptr
->
payload
.
end
());
header
hdr
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
buf_
.
size
()),
ptr
->
msg
->
mid
.
integer_value
()};
auto
bytes
=
to_bytes
(
hdr
);
parent
.
write_packet
(
parent
,
make_span
(
bytes
),
ptr
->
payload
,
unit
);
parent
.
write_packet
(
parent
,
make_span
(
bytes
),
make_span
(
buf_
)
,
unit
);
}
template
<
class
Parent
>
...
...
libcaf_net/caf/net/endpoint_manager.hpp
View file @
f5991184
...
...
@@ -91,10 +91,14 @@ public:
/// Original message to a remote actor.
mailbox_element_ptr
msg
;
/// ID of the receiving actor.
strong_actor_ptr
receiver
;
/// Serialized representation of of `msg->content()`.
std
::
vector
<
byte
>
payload
;
message
(
mailbox_element_ptr
msg
,
std
::
vector
<
byte
>
payload
);
message
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
std
::
vector
<
byte
>
payload
);
};
struct
message_policy
{
...
...
@@ -136,7 +140,8 @@ public:
void
resolve
(
std
::
string
path
,
actor
listener
);
/// Enqueues a message to the endpoint.
void
enqueue
(
mailbox_element_ptr
msg
,
std
::
vector
<
byte
>
payload
);
void
enqueue
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
std
::
vector
<
byte
>
payload
);
/// Enqueues a timeout to the endpoint.
void
enqueue
(
timeout_msg
msg
);
...
...
libcaf_net/doc/basp.graffle
View file @
f5991184
No preview for this file type
libcaf_net/src/actor_proxy_impl.cpp
View file @
f5991184
...
...
@@ -27,18 +27,18 @@ namespace net {
actor_proxy_impl
::
actor_proxy_impl
(
actor_config
&
cfg
,
endpoint_manager_ptr
dst
)
:
super
(
cfg
),
sf_
(
dst
->
serialize_fun
()),
dst_
(
std
::
move
(
dst
))
{
//
anon_send(broker_, monitor_atom::value, ctrl());
//
nop
}
actor_proxy_impl
::~
actor_proxy_impl
()
{
//
anon_send(broker_, make_message(delete_atom::value, node(), id()));
//
nop
}
void
actor_proxy_impl
::
enqueue
(
mailbox_element_ptr
what
,
execution_unit
*
)
{
CAF_PUSH_AID
(
0
);
CAF_ASSERT
(
what
!=
nullptr
);
if
(
auto
payload
=
sf_
(
home_system
(),
what
->
content
()))
dst_
->
enqueue
(
std
::
move
(
what
),
std
::
move
(
*
payload
));
dst_
->
enqueue
(
std
::
move
(
what
),
ctrl
(),
std
::
move
(
*
payload
));
else
CAF_LOG_ERROR
(
"unable to serialize payload: "
<<
home_system
().
render
(
payload
.
error
()));
...
...
libcaf_net/src/endpoint_manager.cpp
View file @
f5991184
...
...
@@ -37,8 +37,11 @@ endpoint_manager::event::event(atom_value type, uint64_t id)
}
endpoint_manager
::
message
::
message
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
std
::
vector
<
byte
>
payload
)
:
msg
(
std
::
move
(
msg
)),
payload
(
std
::
move
(
payload
))
{
:
msg
(
std
::
move
(
msg
)),
receiver
(
std
::
move
(
receiver
)),
payload
(
std
::
move
(
payload
))
{
// nop
}
...
...
@@ -87,8 +90,10 @@ void endpoint_manager::resolve(std::string path, actor listener) {
}
void
endpoint_manager
::
enqueue
(
mailbox_element_ptr
msg
,
strong_actor_ptr
receiver
,
std
::
vector
<
byte
>
payload
)
{
auto
ptr
=
new
message
(
std
::
move
(
msg
),
std
::
move
(
payload
));
auto
ptr
=
new
message
(
std
::
move
(
msg
),
std
::
move
(
receiver
),
std
::
move
(
payload
));
if
(
messages_
.
push_back
(
ptr
)
==
intrusive
::
inbox_result
::
unblocked_reader
)
mask_add
(
operation
::
write
);
}
...
...
libcaf_net/test/transport_worker.cpp
View file @
f5991184
...
...
@@ -192,6 +192,7 @@ CAF_TEST(write_message) {
hello_test
.
size
());
std
::
vector
<
byte
>
payload
(
test_span
.
begin
(),
test_span
.
end
());
auto
message
=
detail
::
make_unique
<
endpoint_manager
::
message
>
(
std
::
move
(
elem
),
nullptr
,
payload
);
worker
.
write_message
(
transport
,
std
::
move
(
message
));
auto
&
buf
=
transport_results
->
packet_buffer
;
...
...
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