MCPcopy Create free account
hub / github.com/ceramicnetwork/rust-ceramic / poll

Method poll

p2p/src/behaviour/ceramic_peer_manager.rs:237–284  ·  view source on GitHub ↗
(
        &mut self,
        cx: &mut Context<'_>,
    )

Source from the content-addressed store, hash-verified

235 }
236
237 fn poll(
238 &mut self,
239 cx: &mut Context<'_>,
240 ) -> Poll<libp2p::swarm::ToSwarm<Self::ToSwarm, libp2p::swarm::THandlerInEvent<Self>>> {
241 if let Some(mut peers) = self.peers_fut.take() {
242 match peers.poll_unpin(cx) {
243 Poll::Ready(peers) => match peers {
244 Ok(peers) => {
245 for peer_entry in peers {
246 self.ceramic_peers
247 .entry(peer_entry.id().peer_id())
248 .and_modify(|peer| {
249 let count = peer.addrs.len();
250 peer.addrs.extend(peer_entry.addresses().iter().cloned());
251 if count != peer.addrs.len() {
252 peer.start_redial()
253 }
254 })
255 .or_insert(CeramicPeer::new(peer_entry.addresses().to_vec()));
256 }
257 }
258 Err(err) => warn!(%err,"failed to get set of remote peers"),
259 },
260 Poll::Pending => {
261 self.peers_fut.replace(peers);
262 }
263 }
264 }
265 for (peer_id, peer) in self.ceramic_peers.iter_mut() {
266 if let Some(mut dial_future) = peer.dial_future.take() {
267 match dial_future.as_mut().poll_unpin(cx) {
268 Poll::Ready(()) => {
269 return Poll::Ready(ToSwarm::Dial {
270 opts: DialOpts::peer_id(*peer_id)
271 .addresses(peer.addrs.iter().cloned().collect())
272 .condition(PeerCondition::Disconnected)
273 .build(),
274 })
275 }
276 Poll::Pending => {
277 // Put the future back
278 peer.dial_future.replace(dial_future);
279 }
280 }
281 }
282 }
283 Poll::Pending
284 }
285
286 fn handle_established_inbound_connection(
287 &mut self,

Callers

nothing calls this directly

Calls 10

newFunction · 0.85
addressesMethod · 0.80
start_redialMethod · 0.80
peer_idMethod · 0.45
idMethod · 0.45
lenMethod · 0.45
extendMethod · 0.45
iterMethod · 0.45
to_vecMethod · 0.45
buildMethod · 0.45

Tested by

no test coverage detected