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
ea6ab1f4
Commit
ea6ab1f4
authored
Aug 02, 2018
by
Joseph Noir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Let newbs keep a self-ref, add client factory fun
parent
e0e0012e
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
218 additions
and
428 deletions
+218
-428
examples/remoting/tcp_newb.cpp
examples/remoting/tcp_newb.cpp
+117
-266
examples/remoting/udp_newb.cpp
examples/remoting/udp_newb.cpp
+57
-149
libcaf_io/caf/io/network/newb.hpp
libcaf_io/caf/io/network/newb.hpp
+40
-13
libcaf_io/test/protocol_policy.cpp
libcaf_io/test/protocol_policy.cpp
+4
-0
No files found.
examples/remoting/tcp_newb.cpp
View file @
ea6ab1f4
This diff is collapsed.
Click to expand it.
examples/remoting/udp_newb.cpp
View file @
ea6ab1f4
This diff is collapsed.
Click to expand it.
libcaf_io/caf/io/network/newb.hpp
View file @
ea6ab1f4
...
@@ -136,6 +136,12 @@ struct transport_policy {
...
@@ -136,6 +136,12 @@ struct transport_policy {
return
none
;
return
none
;
}
}
virtual
expected
<
native_socket
>
connect
(
const
std
::
string
&
,
uint16_t
,
optional
<
io
::
network
::
protocol
::
network
>
=
none
)
{
return
sec
::
bad_function_call
;
}
size_t
received_bytes
;
size_t
received_bytes
;
size_t
max_consecutive_reads
;
size_t
max_consecutive_reads
;
...
@@ -154,6 +160,9 @@ struct accept_policy {
...
@@ -154,6 +160,9 @@ struct accept_policy {
// nop
// nop
}
}
virtual
expected
<
native_socket
>
create_socket
(
uint16_t
port
,
const
char
*
host
,
bool
reuse
=
false
)
=
0
;
virtual
std
::
pair
<
native_socket
,
transport_policy_ptr
>
virtual
std
::
pair
<
native_socket
,
transport_policy_ptr
>
accept
(
network
::
event_handler
*
)
=
0
;
accept
(
network
::
event_handler
*
)
=
0
;
...
@@ -223,14 +232,15 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
...
@@ -223,14 +232,15 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
newb
(
actor_config
&
cfg
,
default_multiplexer
&
dm
,
native_socket
sockfd
)
newb
(
actor_config
&
cfg
,
default_multiplexer
&
dm
,
native_socket
sockfd
)
:
super
(
cfg
),
:
super
(
cfg
),
event_handler
(
dm
,
sockfd
)
{
event_handler
(
dm
,
sockfd
)
{
// nop
CAF_LOG_TRACE
(
""
);
}
}
newb
()
=
default
;
newb
()
=
default
;
newb
(
newb
<
Message
>&&
)
=
default
;
newb
(
newb
<
Message
>&&
)
=
default
;
~
newb
()
override
{
~
newb
()
override
{
// nop
CAF_LOG_TRACE
(
""
);
}
}
// -- overridden modifiers of abstract_actor ---------------------------------
// -- overridden modifiers of abstract_actor ---------------------------------
...
@@ -298,6 +308,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
...
@@ -298,6 +308,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
// -- overridden modifiers of event handler ----------------------------------
// -- overridden modifiers of event handler ----------------------------------
void
handle_event
(
network
::
operation
op
)
override
{
void
handle_event
(
network
::
operation
op
)
override
{
//std::cerr << "got event: " << to_string(op) << std::endl;
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_LOG_TRACE
(
""
);
CAF_LOG_TRACE
(
""
);
switch
(
op
)
{
switch
(
op
)
{
...
@@ -334,6 +345,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
...
@@ -334,6 +345,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
void
start
()
{
void
start
()
{
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_LOG_TRACE
(
""
);
CAF_LOG_TRACE
(
""
);
intrusive_ptr_add_ref
(
super
::
ctrl
());
CAF_LOG_DEBUG
(
"starting newb"
);
CAF_LOG_DEBUG
(
"starting newb"
);
activate
();
activate
();
if
(
transport
)
if
(
transport
)
...
@@ -343,6 +355,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
...
@@ -343,6 +355,7 @@ struct newb : public extend<scheduled_actor, newb<Message>>::template
void
stop
()
{
void
stop
()
{
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_PUSH_AID_FROM_PTR
(
this
);
CAF_LOG_TRACE
(
""
);
CAF_LOG_TRACE
(
""
);
intrusive_ptr_release
(
super
::
ctrl
());
close_read_channel
();
close_read_channel
();
passivate
();
passivate
();
}
}
...
@@ -493,8 +506,6 @@ struct newb_acceptor : public network::event_handler {
...
@@ -493,8 +506,6 @@ struct newb_acceptor : public network::event_handler {
virtual
expected
<
actor
>
create_newb
(
native_socket
sock
,
virtual
expected
<
actor
>
create_newb
(
native_socket
sock
,
transport_policy_ptr
pol
)
=
0
;
transport_policy_ptr
pol
)
=
0
;
// TODO: Has to implement a static create socket function ...
std
::
unique_ptr
<
accept_policy
<
Message
>>
acceptor
;
std
::
unique_ptr
<
accept_policy
<
Message
>>
acceptor
;
};
};
...
@@ -508,21 +519,37 @@ actor make_newb(actor_system& sys, native_socket sockfd) {
...
@@ -508,21 +519,37 @@ actor make_newb(actor_system& sys, native_socket sockfd) {
return
actor_cast
<
actor
>
(
res
);
return
actor_cast
<
actor
>
(
res
);
}
}
// TODO: I feel like this should include the ProtocolPolicy somehow.
template
<
class
Newb
,
class
Transport
,
class
Protocol
>
actor
make_client_newb
(
actor_system
&
sys
,
std
::
string
host
,
uint16_t
port
)
{
transport_policy_ptr
trans
{
new
Transport
};
expected
<
native_socket
>
esock
=
trans
->
connect
(
host
,
port
);
if
(
!
esock
)
return
{};
auto
res
=
make_newb
<
Newb
>
(
sys
,
*
esock
);
auto
ptr
=
caf
::
actor_cast
<
caf
::
abstract_actor
*>
(
res
);
CAF_ASSERT
(
ptr
!=
nullptr
);
auto
&
ref
=
dynamic_cast
<
Newb
&>
(
*
ptr
);
ref
.
transport
=
std
::
move
(
trans
);
ref
.
protocol
.
reset
(
new
Protocol
(
&
ref
));
ref
.
start
();
return
res
;
}
template
<
class
NewbAcceptor
,
class
AcceptPolicy
>
template
<
class
NewbAcceptor
,
class
AcceptPolicy
>
std
::
unique_ptr
<
NewbAcceptor
>
make_newb_acceptor
(
actor_system
&
sys
,
std
::
unique_ptr
<
NewbAcceptor
>
make_server_newb
(
actor_system
&
sys
,
uint16_t
port
,
uint16_t
port
,
const
char
*
addr
=
nullptr
,
const
char
*
addr
=
nullptr
,
bool
reuse_addr
=
false
)
{
bool
reuse_addr
=
false
)
{
auto
sockfd
=
NewbAcceptor
::
create_socket
(
port
,
addr
,
reuse_addr
);
std
::
unique_ptr
<
AcceptPolicy
>
acc
{
new
AcceptPolicy
};
auto
esock
=
acc
->
create_socket
(
port
,
addr
,
reuse_addr
);
// new_tcp_acceptor_impl(port, addr, reuse_addr);
// new_tcp_acceptor_impl(port, addr, reuse_addr);
if
(
!
sockfd
)
{
if
(
!
esock
)
{
CAF_LOG_DEBUG
(
"Could not open "
<<
CAF_ARG
(
port
)
<<
CAF_ARG
(
addr
));
CAF_LOG_DEBUG
(
"Could not open "
<<
CAF_ARG
(
port
)
<<
CAF_ARG
(
addr
));
return
nullptr
;
return
nullptr
;
}
}
auto
&
mpx
=
dynamic_cast
<
default_multiplexer
&>
(
sys
.
middleman
().
backend
());
auto
&
mpx
=
dynamic_cast
<
default_multiplexer
&>
(
sys
.
middleman
().
backend
());
std
::
unique_ptr
<
NewbAcceptor
>
ptr
{
new
NewbAcceptor
(
mpx
,
*
sockfd
)};
std
::
unique_ptr
<
NewbAcceptor
>
ptr
{
new
NewbAcceptor
(
mpx
,
*
esock
)};
ptr
->
acceptor
.
reset
(
new
AcceptPolicy
);
ptr
->
acceptor
=
std
::
move
(
acc
);
ptr
->
start
();
ptr
->
start
();
return
ptr
;
return
ptr
;
}
}
...
...
libcaf_io/test/protocol_policy.cpp
View file @
ea6ab1f4
...
@@ -303,6 +303,10 @@ struct dummy_basp_newb : network::newb<new_basp_message> {
...
@@ -303,6 +303,10 @@ struct dummy_basp_newb : network::newb<new_basp_message> {
};
};
struct
accept_policy_impl
:
public
network
::
accept_policy
<
new_basp_message
>
{
struct
accept_policy_impl
:
public
network
::
accept_policy
<
new_basp_message
>
{
expected
<
native_socket
>
create_socket
(
uint16_t
,
const
char
*
,
bool
)
override
{
return
sec
::
bad_function_call
;
}
std
::
pair
<
native_socket
,
network
::
transport_policy_ptr
>
std
::
pair
<
native_socket
,
network
::
transport_policy_ptr
>
accept
(
network
::
event_handler
*
)
override
{
accept
(
network
::
event_handler
*
)
override
{
// TODO: For UDP read the message into a buffer. Create a new socket.
// TODO: For UDP read the message into a buffer. Create a new socket.
...
...
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