This repository has been archived by the owner on Feb 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 267
Node-to-node send/receive #746
Merged
Merged
Changes from all commits
Commits
Show all changes
35 commits
Select commit
Hold shift + click to select a range
b53bf2b
"receive" added to define_zome! macro
lucksus 15f07e7
Adjust hdk::send signature
lucksus 258a699
Integration test for send/receive in hdk
lucksus 8caf8b8
hdk::send() with SendArgs
lucksus af4645e
CustomDirectMessage
lucksus 9631a0d
Network::actions::custom_send
lucksus 4fdbdaa
hc_send -> invoke_send() -> network::actions::custom_send
lucksus 9075ce8
ribosome::callback::receive and CallbackResult::Receive(String)
lucksus e07dd1a
handle_custom_direct_message workflow and usage in network handler
lucksus 3a00a57
Handling of custom send result
lucksus 75eaf8b
Fix invoke_send to return a result
lucksus a23a846
Fix serialization/wrapping of payload
lucksus 70a464f
println--
lucksus af515cc
println--
lucksus f9bc8d2
rustfmt
lucksus 20c46f1
Adjust agent_id fixture
lucksus 8c29cb6
Fix some tests
lucksus 77444f3
Add dummy hc_send in integration tests to make windows build work
lucksus 42c31eb
Merge branch 'develop' into send-receive
5ab7729
Add dummy hc_send to example rustdocs so they can compile in windows CI
lucksus abe76af
Merge branch 'send-receive' of https://github.com/holochain/holochain…
lucksus e679c81
typo in comment
zippy 1758785
test instance name = test name
lucksus 181dc77
Merge branch 'send-receive' of https://github.com/holochain/holochain…
lucksus 6eb2e62
println--
lucksus 677ddd1
custom_send code comments
lucksus 10696eb
invoke_send code comments
lucksus 5b50169
SendDirectMessageTimeout and test
lucksus 334dfcf
typo in comment
Connoropolous 3836dcb
rustfmt
lucksus 950ee14
Merge branch 'develop' into send-receive
434d223
rustfmt
lucksus 9ea2c12
Merge branch 'develop' into send-receive
941b9ff
Merge branch 'develop' into send-receive
5a05493
Merge branch 'develop' into send-receive
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
extern crate futures; | ||
use crate::{ | ||
action::{Action, ActionWrapper, DirectMessageData}, | ||
context::Context, | ||
instance::dispatch_action, | ||
network::direct_message::{CustomDirectMessage, DirectMessage}, | ||
}; | ||
use futures::{ | ||
future::Future, | ||
task::{LocalWaker, Poll}, | ||
}; | ||
use holochain_core_types::{cas::content::Address, error::HolochainError}; | ||
use snowflake::ProcessUniqueId; | ||
use std::{ | ||
pin::{Pin, Unpin}, | ||
sync::Arc, | ||
thread::sleep, | ||
time::Duration, | ||
}; | ||
|
||
/// SendDirectMessage Action Creator for custom (=app) messages | ||
/// This triggers the network module to open a synchronous node-to-node connection | ||
/// by sending the given CustomDirectMessage and preparing to receive a response. | ||
pub async fn custom_send( | ||
to_agent: Address, | ||
custom_direct_message: CustomDirectMessage, | ||
context: &Arc<Context>, | ||
) -> Result<String, HolochainError> { | ||
let id = ProcessUniqueId::new().to_string(); | ||
let direct_message = DirectMessage::Custom(custom_direct_message); | ||
let direct_message_data = DirectMessageData { | ||
address: to_agent, | ||
message: direct_message, | ||
msg_id: id.clone(), | ||
is_response: false, | ||
}; | ||
let action_wrapper = ActionWrapper::new(Action::SendDirectMessage(direct_message_data)); | ||
dispatch_action(&context.action_channel, action_wrapper); | ||
|
||
async { | ||
sleep(Duration::from_secs(60)); | ||
let action_wrapper = ActionWrapper::new(Action::SendDirectMessageTimeout(id.clone())); | ||
dispatch_action(&context.action_channel, action_wrapper.clone()); | ||
}; | ||
|
||
await!(SendResponseFuture { | ||
context: context.clone(), | ||
id, | ||
}) | ||
} | ||
|
||
/// SendResponseFuture waits for a result to show up in NetworkState::custom_direct_message_replys | ||
pub struct SendResponseFuture { | ||
context: Arc<Context>, | ||
id: String, | ||
} | ||
|
||
impl Unpin for SendResponseFuture {} | ||
|
||
impl Future for SendResponseFuture { | ||
type Output = Result<String, HolochainError>; | ||
|
||
fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> { | ||
let state = self.context.state().unwrap().network(); | ||
if let Err(error) = state.initialized() { | ||
return Poll::Ready(Err(HolochainError::ErrorGeneric(error.to_string()))); | ||
} | ||
// | ||
// TODO: connect the waker to state updates for performance reasons | ||
// See: https://github.com/holochain/holochain-rust/issues/314 | ||
// | ||
lw.wake(); | ||
match state.custom_direct_message_replys.get(&self.id) { | ||
Some(result) => Poll::Ready(result.clone()), | ||
_ => Poll::Pending, | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
pub mod custom_send; | ||
pub mod get_entry; | ||
pub mod get_validation_package; | ||
pub mod initialize_network; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
use crate::{action::ActionWrapper, context::Context, network::state::NetworkState}; | ||
use holochain_core_types::error::HolochainError; | ||
use std::sync::Arc; | ||
|
||
pub fn reduce_handle_custom_send_response( | ||
_context: Arc<Context>, | ||
network_state: &mut NetworkState, | ||
action_wrapper: &ActionWrapper, | ||
) { | ||
let action = action_wrapper.action(); | ||
let (msg_id, response) = unwrap_to!(action => crate::action::Action::HandleCustomSendResponse); | ||
|
||
network_state.custom_direct_message_replys.insert( | ||
msg_id.clone(), | ||
response | ||
.clone() | ||
.map_err(|error| HolochainError::ErrorGeneric(error)), | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's an interesting point... so an app can have one
receive
callback per zome?But it could handle different event types, if they were passed as data, and using a
match
in receive?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Connoropolous pretty similar to how websockets works i guess, you can send and receive strings, but dispatching logic and simulating request/response behaviour is BYO