Make libp2p compile for wasm32-unkown-unknown (#2412)

* Make libp2p compile for wasm32-unkown-unknown

* Fix tests

* Add some crates
This commit is contained in:
Pierre Krieger
2019-04-29 16:07:40 +02:00
committed by Gavin Wood
parent ebbd6c8ec4
commit 0b6490854d
4 changed files with 36 additions and 6 deletions
+13
View File
@@ -78,6 +78,19 @@ test-linux-stable: &test
- time cargo test --all --release --verbose --locked
- sccache -s
check-web-wasm:
stage: test
image: tomaka/cargo-web:latest
allow_failure: true
only:
- master
script:
# WASM support is in progress. As more and more crates support WASM, we
# should add entries here.
- time cargo web build -p substrate-network-libp2p
- time cargo web build -p substrate-panic-handler
- time cargo web build -p substrate-peerset
.build-only: &build-only
only:
- master
+1 -2
View File
@@ -22,7 +22,6 @@ serde = { version = "1.0.70", features = ["derive"] }
serde_json = "1.0.24"
smallvec = "0.6"
substrate-peerset = { path = "../peerset" }
tokio = "0.1"
tokio-io = "0.1"
tokio-timer = "0.2"
unsigned-varint = { version = "0.2.1", features = ["codec"] }
@@ -34,4 +33,4 @@ erased-serde = "0.3.9"
[dev-dependencies]
tempdir = "0.3"
tokio = "0.1"
@@ -20,9 +20,11 @@ use libp2p::NetworkBehaviour;
use libp2p::core::{Multiaddr, PeerId, ProtocolsHandler, PublicKey};
use libp2p::core::swarm::{ConnectedPoint, NetworkBehaviour, NetworkBehaviourAction};
use libp2p::core::swarm::{NetworkBehaviourEventProcess, PollParameters};
#[cfg(not(target_os = "unknown"))]
use libp2p::core::swarm::toggle::Toggle;
use libp2p::identify::{Identify, IdentifyEvent, protocol::IdentifyInfo};
use libp2p::kad::{Kademlia, KademliaOut};
#[cfg(not(target_os = "unknown"))]
use libp2p::mdns::{Mdns, MdnsEvent};
use libp2p::multiaddr::Protocol;
use libp2p::ping::{Ping, PingConfig, PingEvent, PingSuccess};
@@ -45,6 +47,7 @@ pub struct Behaviour<TMessage, TSubstream> {
/// Periodically identifies the remote and responds to incoming requests.
identify: Identify<TSubstream>,
/// Discovers nodes on the local network.
#[cfg(not(target_os = "unknown"))]
mdns: Toggle<Mdns<TSubstream>>,
/// Queue of events to produce for the outside.
@@ -74,6 +77,11 @@ impl<TMessage, TSubstream> Behaviour<TMessage, TSubstream> {
kademlia.add_connected_address(peer_id, addr.clone());
}
if enable_mdns {
#[cfg(target_os = "unknown")]
warn!(target: "sub-libp2p", "mDNS is not available on this platform");
}
let clock = Clock::new();
Behaviour {
ping: Ping::new(PingConfig::new()),
@@ -87,6 +95,7 @@ impl<TMessage, TSubstream> Behaviour<TMessage, TSubstream> {
local_peer_id: local_public_key.into_peer_id(),
},
identify,
#[cfg(not(target_os = "unknown"))]
mdns: if enable_mdns {
match Mdns::new() {
Ok(mdns) => Some(mdns).into(),
@@ -304,6 +313,7 @@ impl<TMessage, TSubstream> NetworkBehaviourEventProcess<PingEvent> for Behaviour
}
}
#[cfg(not(target_os = "unknown"))]
impl<TMessage, TSubstream> NetworkBehaviourEventProcess<MdnsEvent> for Behaviour<TMessage, TSubstream> {
fn inject_event(&mut self, event: MdnsEvent) {
match event {
+12 -4
View File
@@ -17,8 +17,10 @@
use futures::prelude::*;
use libp2p::{
InboundUpgradeExt, OutboundUpgradeExt, PeerId, Transport,
mplex, identity, secio, yamux, tcp, dns, websocket, bandwidth
mplex, identity, secio, yamux, websocket, bandwidth
};
#[cfg(not(target_os = "unknown"))]
use libp2p::{tcp, dns};
use libp2p::core::{self, transport::boxed::Boxed, muxing::StreamMuxerBox};
use std::{io, sync::Arc, time::Duration, usize};
@@ -35,9 +37,15 @@ pub fn build_transport(
mplex_config.max_buffer_len_behaviour(mplex::MaxBufferBehaviour::Block);
mplex_config.max_buffer_len(usize::MAX);
let transport = tcp::TcpConfig::new();
let transport = websocket::WsConfig::new(transport.clone()).or_transport(transport);
let transport = dns::DnsConfig::new(transport);
#[cfg(not(target_os = "unknown"))]
let transport = {
let transport = tcp::TcpConfig::new();
let transport = websocket::WsConfig::new(transport.clone()).or_transport(transport);
dns::DnsConfig::new(transport)
};
#[cfg(target_os = "unknown")]
let transport = websocket::BrowserWsConfig::new();
let (transport, sinks) = bandwidth::BandwidthLogging::new(transport, Duration::from_secs(5));
// TODO: rework the transport creation (https://github.com/libp2p/rust-libp2p/issues/783)