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
d14838a8
Commit
d14838a8
authored
Sep 18, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix handling of write_packet calls
parent
290fc0c5
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
93 additions
and
45 deletions
+93
-45
libcaf_net/caf/net/basp/application.hpp
libcaf_net/caf/net/basp/application.hpp
+5
-4
libcaf_net/caf/net/endpoint_manager_impl.hpp
libcaf_net/caf/net/endpoint_manager_impl.hpp
+8
-0
libcaf_net/caf/net/stream_transport.hpp
libcaf_net/caf/net/stream_transport.hpp
+36
-15
libcaf_net/caf/net/transport_worker.hpp
libcaf_net/caf/net/transport_worker.hpp
+22
-10
libcaf_net/caf/net/write_packet_decorator.hpp
libcaf_net/caf/net/write_packet_decorator.hpp
+6
-1
libcaf_net/test/application.cpp
libcaf_net/test/application.cpp
+1
-2
libcaf_net/test/stream_transport.cpp
libcaf_net/test/stream_transport.cpp
+6
-4
libcaf_net/test/string_application.cpp
libcaf_net/test/string_application.cpp
+6
-6
libcaf_net/test/transport_worker.cpp
libcaf_net/test/transport_worker.cpp
+3
-3
No files found.
libcaf_net/caf/net/basp/application.hpp
View file @
d14838a8
...
@@ -71,7 +71,7 @@ public:
...
@@ -71,7 +71,7 @@ public:
return
err
;
return
err
;
auto
hdr
=
to_bytes
(
header
{
message_type
::
handshake
,
auto
hdr
=
to_bytes
(
header
{
message_type
::
handshake
,
static_cast
<
uint32_t
>
(
buf_
.
size
()),
version
});
static_cast
<
uint32_t
>
(
buf_
.
size
()),
version
});
parent
.
write_packet
(
parent
,
hdr
,
buf_
,
unit
);
parent
.
write_packet
(
hdr
,
buf_
);
return
none
;
return
none
;
}
}
...
@@ -98,13 +98,14 @@ public:
...
@@ -98,13 +98,14 @@ public:
header
hdr
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
buf_
.
size
()),
header
hdr
{
message_type
::
actor_message
,
static_cast
<
uint32_t
>
(
buf_
.
size
()),
ptr
->
msg
->
mid
.
integer_value
()};
ptr
->
msg
->
mid
.
integer_value
()};
auto
bytes
=
to_bytes
(
hdr
);
auto
bytes
=
to_bytes
(
hdr
);
parent
.
write_packet
(
parent
,
make_span
(
bytes
),
make_span
(
buf_
),
unit
);
parent
.
write_packet
(
make_span
(
bytes
),
make_span
(
buf_
));
return
none
;
}
}
template
<
class
Parent
>
template
<
class
Parent
>
error
handle_data
(
Parent
&
parent
,
byte_span
bytes
)
{
error
handle_data
(
Parent
&
parent
,
byte_span
bytes
)
{
auto
write_packet
=
make_callback
([
&
](
byte_span
hdr
,
byte_span
payload
)
{
auto
write_packet
=
make_callback
([
&
](
byte_span
hdr
,
byte_span
payload
)
{
parent
.
write_packet
(
parent
,
hdr
,
payload
,
unit
);
parent
.
write_packet
(
hdr
,
payload
);
return
none
;
return
none
;
});
});
return
handle
(
write_packet
,
bytes
);
return
handle
(
write_packet
,
bytes
);
...
@@ -113,7 +114,7 @@ public:
...
@@ -113,7 +114,7 @@ public:
template
<
class
Parent
>
template
<
class
Parent
>
void
resolve
(
Parent
&
parent
,
string_view
path
,
actor
listener
)
{
void
resolve
(
Parent
&
parent
,
string_view
path
,
actor
listener
)
{
auto
write_packet
=
make_callback
([
&
](
byte_span
hdr
,
byte_span
payload
)
{
auto
write_packet
=
make_callback
([
&
](
byte_span
hdr
,
byte_span
payload
)
{
parent
.
write_packet
(
parent
,
hdr
,
payload
,
unit
);
parent
.
write_packet
(
hdr
,
payload
);
return
none
;
return
none
;
});
});
resolve_remote_path
(
write_packet
,
path
,
listener
);
resolve_remote_path
(
write_packet
,
path
,
listener
);
...
...
libcaf_net/caf/net/endpoint_manager_impl.hpp
View file @
d14838a8
...
@@ -18,6 +18,10 @@
...
@@ -18,6 +18,10 @@
#pragma once
#pragma once
#include "caf/abstract_actor.hpp"
#include "caf/actor_cast.hpp"
#include "caf/actor_system.hpp"
#include "caf/atom.hpp"
#include "caf/net/endpoint_manager.hpp"
#include "caf/net/endpoint_manager.hpp"
namespace
caf
{
namespace
caf
{
...
@@ -56,6 +60,10 @@ public:
...
@@ -56,6 +60,10 @@ public:
return
transport_
;
return
transport_
;
}
}
endpoint_manager_impl
&
manager
()
{
return
*
this
;
}
// -- timeout management -----------------------------------------------------
// -- timeout management -----------------------------------------------------
template
<
class
...
Ts
>
template
<
class
...
Ts
>
...
...
libcaf_net/caf/net/stream_transport.hpp
View file @
d14838a8
...
@@ -41,6 +41,10 @@ public:
...
@@ -41,6 +41,10 @@ public:
using
application_type
=
Application
;
using
application_type
=
Application
;
using
transport_type
=
stream_transport
;
using
worker_type
=
transport_worker
<
application_type
>
;
// -- constructors, destructors, and assignment operators --------------------
// -- constructors, destructors, and assignment operators --------------------
stream_transport
(
stream_socket
handle
,
application_type
application
)
stream_transport
(
stream_socket
handle
,
application_type
application
)
...
@@ -51,7 +55,8 @@ public:
...
@@ -51,7 +55,8 @@ public:
collected_
(
0
),
collected_
(
0
),
max_
(
1024
),
max_
(
1024
),
rd_flag_
(
net
::
receive_policy_flag
::
exactly
),
rd_flag_
(
net
::
receive_policy_flag
::
exactly
),
written_
(
0
)
{
written_
(
0
),
manager_
(
nullptr
)
{
// nop
// nop
}
}
...
@@ -61,18 +66,35 @@ public:
...
@@ -61,18 +66,35 @@ public:
return
handle_
;
return
handle_
;
}
}
actor_system
&
system
()
{
return
manager
().
system
();
}
application_type
&
application
()
{
return
worker_
.
application
();
}
transport_type
&
transport
()
{
return
*
this
;
}
endpoint_manager
&
manager
()
{
return
*
manager_
;
}
// -- member functions -------------------------------------------------------
// -- member functions -------------------------------------------------------
template
<
class
Parent
>
template
<
class
Parent
>
error
init
(
Parent
&
parent
)
{
error
init
(
Parent
&
parent
)
{
if
(
auto
err
=
worker_
.
init
(
parent
))
manager_
=
&
parent
;
if
(
auto
err
=
worker_
.
init
(
*
this
))
return
err
;
return
err
;
parent
.
mask_add
(
operation
::
read
);
parent
.
mask_add
(
operation
::
read
);
return
none
;
return
none
;
}
}
template
<
class
Parent
>
template
<
class
Parent
>
bool
handle_read_event
(
Parent
&
parent
)
{
bool
handle_read_event
(
Parent
&
)
{
auto
buf
=
read_buf_
.
data
()
+
collected_
;
auto
buf
=
read_buf_
.
data
()
+
collected_
;
size_t
len
=
read_threshold_
-
collected_
;
size_t
len
=
read_threshold_
-
collected_
;
CAF_LOG_TRACE
(
CAF_ARG
(
handle_
.
id
)
<<
CAF_ARG
(
len
));
CAF_LOG_TRACE
(
CAF_ARG
(
handle_
.
id
)
<<
CAF_ARG
(
len
));
...
@@ -82,8 +104,7 @@ public:
...
@@ -82,8 +104,7 @@ public:
CAF_LOG_DEBUG
(
CAF_ARG
(
len
)
<<
CAF_ARG
(
handle_
.
id
)
<<
CAF_ARG
(
*
num_bytes
));
CAF_LOG_DEBUG
(
CAF_ARG
(
len
)
<<
CAF_ARG
(
handle_
.
id
)
<<
CAF_ARG
(
*
num_bytes
));
collected_
+=
*
num_bytes
;
collected_
+=
*
num_bytes
;
if
(
collected_
>=
read_threshold_
)
{
if
(
collected_
>=
read_threshold_
)
{
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
worker_
.
handle_data
(
*
this
,
read_buf_
);
worker_
.
handle_data
(
decorator
,
read_buf_
);
prepare_next_read
();
prepare_next_read
();
}
}
return
true
;
return
true
;
...
@@ -103,16 +124,15 @@ public:
...
@@ -103,16 +124,15 @@ public:
// TODO: dont read all messages at once - get one by one.
// TODO: dont read all messages at once - get one by one.
for
(
auto
msg
=
parent
.
next_message
();
msg
!=
nullptr
;
for
(
auto
msg
=
parent
.
next_message
();
msg
!=
nullptr
;
msg
=
parent
.
next_message
())
{
msg
=
parent
.
next_message
())
{
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
worker_
.
write_message
(
*
this
,
std
::
move
(
msg
));
worker_
.
write_message
(
decorator
,
std
::
move
(
msg
));
}
}
// Write prepared data.
// Write prepared data.
return
write_some
();
return
write_some
();
}
}
template
<
class
Parent
>
template
<
class
Parent
>
void
resolve
(
Parent
&
parent
,
const
std
::
string
&
path
,
actor
listener
)
{
void
resolve
(
Parent
&
,
const
std
::
string
&
path
,
actor
listener
)
{
worker_
.
resolve
(
parent
,
path
,
listener
);
worker_
.
resolve
(
*
this
,
path
,
listener
);
}
}
template
<
class
...
Ts
>
template
<
class
...
Ts
>
...
@@ -121,8 +141,8 @@ public:
...
@@ -121,8 +141,8 @@ public:
}
}
template
<
class
Parent
>
template
<
class
Parent
>
void
timeout
(
Parent
&
parent
,
atom_value
value
,
uint64_t
id
)
{
void
timeout
(
Parent
&
,
atom_value
value
,
uint64_t
id
)
{
worker_
.
timeout
(
parent
,
value
,
id
);
worker_
.
timeout
(
*
this
,
value
,
id
);
}
}
void
handle_error
(
sec
code
)
{
void
handle_error
(
sec
code
)
{
...
@@ -163,9 +183,8 @@ public:
...
@@ -163,9 +183,8 @@ public:
prepare_next_read
();
prepare_next_read
();
}
}
template
<
class
Parent
>
void
write_packet
(
span
<
const
byte
>
header
,
span
<
const
byte
>
payload
,
void
write_packet
(
Parent
&
,
span
<
const
byte
>
header
,
span
<
const
byte
>
payload
,
typename
worker_type
::
id_type
)
{
unit_t
)
{
write_buf_
.
insert
(
write_buf_
.
end
(),
header
.
begin
(),
header
.
end
());
write_buf_
.
insert
(
write_buf_
.
end
(),
header
.
begin
(),
header
.
end
());
write_buf_
.
insert
(
write_buf_
.
end
(),
payload
.
begin
(),
payload
.
end
());
write_buf_
.
insert
(
write_buf_
.
end
(),
payload
.
begin
(),
payload
.
end
());
}
}
...
@@ -198,7 +217,7 @@ private:
...
@@ -198,7 +217,7 @@ private:
return
true
;
return
true
;
}
}
transport_worker
<
application_type
>
worker_
;
worker_type
worker_
;
stream_socket
handle_
;
stream_socket
handle_
;
std
::
vector
<
byte
>
read_buf_
;
std
::
vector
<
byte
>
read_buf_
;
...
@@ -212,6 +231,8 @@ private:
...
@@ -212,6 +231,8 @@ private:
receive_policy_flag
rd_flag_
;
receive_policy_flag
rd_flag_
;
size_t
written_
;
size_t
written_
;
endpoint_manager
*
manager_
;
};
};
}
// namespace net
}
// namespace net
...
...
libcaf_net/caf/net/transport_worker.hpp
View file @
d14838a8
...
@@ -46,16 +46,32 @@ public:
...
@@ -46,16 +46,32 @@ public:
// nop
// nop
}
}
// -- properties -------------------------------------------------------------
application_type
&
application
()
noexcept
{
return
application_
;
}
const
application_type
&
application
()
const
noexcept
{
return
application_
;
}
const
id_type
&
id
()
const
noexcept
{
return
id_
;
}
// -- member functions -------------------------------------------------------
// -- member functions -------------------------------------------------------
template
<
class
Parent
>
template
<
class
Parent
>
error
init
(
Parent
&
parent
)
{
error
init
(
Parent
&
parent
)
{
return
application_
.
init
(
parent
);
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
return
application_
.
init
(
decorator
);
}
}
template
<
class
Parent
>
template
<
class
Parent
>
void
handle_data
(
Parent
&
parent
,
span
<
const
byte
>
data
)
{
void
handle_data
(
Parent
&
parent
,
span
<
const
byte
>
data
)
{
application_
.
handle_data
(
parent
,
data
);
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
application_
.
handle_data
(
decorator
,
data
);
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
@@ -65,20 +81,16 @@ public:
...
@@ -65,20 +81,16 @@ public:
application_
.
write_message
(
decorator
,
std
::
move
(
msg
));
application_
.
write_message
(
decorator
,
std
::
move
(
msg
));
}
}
template
<
class
Parent
>
void
write_packet
(
Parent
&
parent
,
span
<
const
byte
>
header
,
span
<
const
byte
>
payload
)
{
parent
.
write_packet
(
header
,
payload
,
id_
);
}
template
<
class
Parent
>
template
<
class
Parent
>
void
resolve
(
Parent
&
parent
,
const
std
::
string
&
path
,
actor
listener
)
{
void
resolve
(
Parent
&
parent
,
const
std
::
string
&
path
,
actor
listener
)
{
application_
.
resolve
(
parent
,
path
,
listener
);
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
application_
.
resolve
(
decorator
,
path
,
listener
);
}
}
template
<
class
Parent
>
template
<
class
Parent
>
void
timeout
(
Parent
&
parent
,
atom_value
value
,
uint64_t
id
)
{
void
timeout
(
Parent
&
parent
,
atom_value
value
,
uint64_t
id
)
{
application_
.
timeout
(
parent
,
value
,
id
);
auto
decorator
=
make_write_packet_decorator
(
*
this
,
parent
);
application_
.
timeout
(
decorator
,
value
,
id
);
}
}
void
handle_error
(
sec
error
)
{
void
handle_error
(
sec
error
)
{
...
...
libcaf_net/caf/net/write_packet_decorator.hpp
View file @
d14838a8
...
@@ -52,12 +52,17 @@ public:
...
@@ -52,12 +52,17 @@ public:
return
parent_
.
transport
();
return
parent_
.
transport
();
}
}
endpoint_manager
&
manager
()
{
return
parent_
.
manager
();
}
// -- member functions -------------------------------------------------------
// -- member functions -------------------------------------------------------
template
<
class
...
Ts
>
template
<
class
...
Ts
>
void
write_packet
(
span
<
const
byte
>
header
,
span
<
const
byte
>
payload
,
void
write_packet
(
span
<
const
byte
>
header
,
span
<
const
byte
>
payload
,
Ts
&&
...
xs
)
{
Ts
&&
...
xs
)
{
object_
.
write_packet
(
parent_
,
header
,
payload
,
std
::
forward
<
Ts
>
(
xs
)...);
parent_
.
write_packet
(
header
,
payload
,
std
::
forward
<
Ts
>
(
xs
)...,
object_
.
id
());
}
}
void
cancel_timeout
(
atom_value
type
,
uint64_t
id
)
{
void
cancel_timeout
(
atom_value
type
,
uint64_t
id
)
{
...
...
libcaf_net/test/application.cpp
View file @
d14838a8
...
@@ -64,8 +64,7 @@ struct fixture : test_coordinator_fixture<>, proxy_registry::backend {
...
@@ -64,8 +64,7 @@ struct fixture : test_coordinator_fixture<>, proxy_registry::backend {
input
=
to_buf
(
xs
...);
input
=
to_buf
(
xs
...);
}
}
void
write_packet
(
fixture
&
,
span
<
const
byte
>
hdr
,
span
<
const
byte
>
payload
,
void
write_packet
(
span
<
const
byte
>
hdr
,
span
<
const
byte
>
payload
)
{
unit_t
)
{
output
.
insert
(
output
.
end
(),
hdr
.
begin
(),
hdr
.
end
());
output
.
insert
(
output
.
end
(),
hdr
.
begin
(),
hdr
.
end
());
output
.
insert
(
output
.
end
(),
payload
.
begin
(),
payload
.
end
());
output
.
insert
(
output
.
end
(),
payload
.
begin
(),
payload
.
end
());
}
}
...
...
libcaf_net/test/stream_transport.cpp
View file @
d14838a8
...
@@ -84,15 +84,17 @@ public:
...
@@ -84,15 +84,17 @@ public:
rec_buf_
->
insert
(
rec_buf_
->
begin
(),
data
.
begin
(),
data
.
end
());
rec_buf_
->
insert
(
rec_buf_
->
begin
(),
data
.
begin
(),
data
.
end
());
}
}
template
<
class
Manager
>
template
<
class
Parent
>
void
resolve
(
Manager
&
manager
,
const
std
::
string
&
path
,
actor
listener
)
{
void
resolve
(
Parent
&
parent
,
const
std
::
string
&
path
,
actor
listener
)
{
actor_id
aid
=
42
;
actor_id
aid
=
42
;
auto
hid
=
"0011223344556677889900112233445566778899"
;
auto
hid
=
"0011223344556677889900112233445566778899"
;
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
()};
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
auto
p
=
make_actor
<
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
&
manager
.
system
(),
&
parent
.
system
(),
cfg
,
&
manager
);
cfg
,
std
::
move
(
ptr
));
anon_send
(
listener
,
resolve_atom
::
value
,
std
::
move
(
path
),
p
);
anon_send
(
listener
,
resolve_atom
::
value
,
std
::
move
(
path
),
p
);
}
}
...
...
libcaf_net/test/string_application.cpp
View file @
d14838a8
...
@@ -155,16 +155,16 @@ public:
...
@@ -155,16 +155,16 @@ public:
}
}
}
}
template
<
class
Manager
>
template
<
class
Parent
>
void
resolve
(
Manager
&
manager
,
const
std
::
string
&
path
,
actor
listener
)
{
void
resolve
(
Parent
&
parent
,
const
std
::
string
&
path
,
actor
listener
)
{
actor_id
aid
=
42
;
actor_id
aid
=
42
;
auto
hid
=
"0011223344556677889900112233445566778899"
;
auto
hid
=
"0011223344556677889900112233445566778899"
;
auto
nid
=
unbox
(
make_node_id
(
aid
,
hid
));
auto
nid
=
unbox
(
make_node_id
(
aid
,
hid
));
actor_config
cfg
;
actor_config
cfg
;
auto
p
=
make_actor
<
net
::
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
auto
sys
=
&
parent
.
system
();
&
manager
auto
mgr
=
&
parent
.
manager
();
.
system
()
,
auto
p
=
make_actor
<
net
::
actor_proxy_impl
,
strong_actor_ptr
>
(
aid
,
nid
,
sys
,
cfg
,
&
manage
r
);
cfg
,
mg
r
);
anon_send
(
listener
,
resolve_atom
::
value
,
std
::
move
(
path
),
p
);
anon_send
(
listener
,
resolve_atom
::
value
,
std
::
move
(
path
),
p
);
}
}
...
...
libcaf_net/test/transport_worker.cpp
View file @
d14838a8
...
@@ -70,10 +70,10 @@ public:
...
@@ -70,10 +70,10 @@ public:
return
none
;
return
none
;
}
}
template
<
class
Transpor
t
>
template
<
class
Paren
t
>
void
write_message
(
Transport
&
transpor
t
,
void
write_message
(
Parent
&
paren
t
,
std
::
unique_ptr
<
endpoint_manager
::
message
>
msg
)
{
std
::
unique_ptr
<
endpoint_manager
::
message
>
msg
)
{
transport
.
write_packet
(
span
<
byte
>
{},
msg
->
payload
);
parent
.
write_packet
(
span
<
const
byte
>
{},
msg
->
payload
);
}
}
template
<
class
Parent
>
template
<
class
Parent
>
...
...
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