Minor fixes
This commit is contained in:
		
							parent
							
								
									2ceffb425c
								
							
						
					
					
						commit
						a2f13e1efb
					
				| @ -136,6 +136,7 @@ impl<Message> Handler for IoManager<Message> where Message: Send + 'static { | |||||||
| 				handler, | 				handler, | ||||||
| 			} => { | 			} => { | ||||||
| 				self.handlers.push(handler); | 				self.handlers.push(handler); | ||||||
|  | 				self.handlers.last_mut().unwrap().initialize(&mut IoContext::new(event_loop, &mut self.timers)); | ||||||
| 			}, | 			}, | ||||||
| 			IoMessage::UserMessage(ref mut data) => { | 			IoMessage::UserMessage(ref mut data) => { | ||||||
| 				for h in self.handlers.iter_mut() { | 				for h in self.handlers.iter_mut() { | ||||||
|  | |||||||
| @ -23,6 +23,8 @@ const _DEFAULT_PORT: u16 = 30304; | |||||||
| const MAX_CONNECTIONS: usize = 1024; | const MAX_CONNECTIONS: usize = 1024; | ||||||
| const IDEAL_PEERS: u32 = 10; | const IDEAL_PEERS: u32 = 10; | ||||||
| 
 | 
 | ||||||
|  | const MAINTENANCE_TIMEOUT: u64 = 1000; | ||||||
|  | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| struct NetworkConfiguration { | struct NetworkConfiguration { | ||||||
| 	listen_address: SocketAddr, | 	listen_address: SocketAddr, | ||||||
| @ -164,6 +166,18 @@ impl<'s, 'io, Message> NetworkContext<'s, 'io, Message> where Message: Send + 's | |||||||
| 			e @ Err(_) => e, | 			e @ Err(_) => e, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	/// Returns peer identification string
 | ||||||
|  | 	pub fn peer_info(&self, peer: PeerId) -> String { | ||||||
|  | 		match self.connections.get(Token(peer)) { | ||||||
|  | 			Some(&ConnectionEntry::Session(ref s)) => { | ||||||
|  | 				s.info.client_version.clone() | ||||||
|  | 			}, | ||||||
|  | 			_ => { | ||||||
|  | 				"unknown".to_string() | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Shared host information
 | /// Shared host information
 | ||||||
| @ -255,6 +269,7 @@ impl<Message> Host<Message> where Message: Send { | |||||||
| 
 | 
 | ||||||
| 	fn maintain_network(&mut self, io: &mut IoContext<NetworkIoMessage<Message>>) { | 	fn maintain_network(&mut self, io: &mut IoContext<NetworkIoMessage<Message>>) { | ||||||
| 		self.connect_peers(io); | 		self.connect_peers(io); | ||||||
|  | 		io.event_loop.timeout_ms(Token(IDLE), MAINTENANCE_TIMEOUT).unwrap(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	fn have_session(&self, id: &NodeId) -> bool { | 	fn have_session(&self, id: &NodeId) -> bool { | ||||||
| @ -340,6 +355,7 @@ impl<Message> Host<Message> where Message: Send { | |||||||
| 		let nonce = self.info.next_nonce(); | 		let nonce = self.info.next_nonce(); | ||||||
| 		match self.connections.insert_with(|token| ConnectionEntry::Handshake(Handshake::new(token, id, socket, &nonce).expect("Can't create handshake"))) { | 		match self.connections.insert_with(|token| ConnectionEntry::Handshake(Handshake::new(token, id, socket, &nonce).expect("Can't create handshake"))) { | ||||||
| 			Some(token) => { | 			Some(token) => { | ||||||
|  | 				warn!(target: "slab", "inserted {}", token.as_usize()); | ||||||
| 				match self.connections.get_mut(token) { | 				match self.connections.get_mut(token) { | ||||||
| 					Some(&mut ConnectionEntry::Handshake(ref mut h)) => { | 					Some(&mut ConnectionEntry::Handshake(ref mut h)) => { | ||||||
| 						h.start(&self.info, true) | 						h.start(&self.info, true) | ||||||
| @ -469,6 +485,21 @@ impl<Message> Host<Message> where Message: Send { | |||||||
| 
 | 
 | ||||||
| 	fn start_session(&mut self, token: StreamToken, io: &mut IoContext<NetworkIoMessage<Message>>) { | 	fn start_session(&mut self, token: StreamToken, io: &mut IoContext<NetworkIoMessage<Message>>) { | ||||||
| 		let info = &self.info; | 		let info = &self.info; | ||||||
|  | 		// TODO: use slab::replace_with (currently broken)
 | ||||||
|  | 		match self.connections.remove(Token(token)) { | ||||||
|  | 			Some(ConnectionEntry::Handshake(h)) => { | ||||||
|  | 				match Session::new(h, io.event_loop, info) { | ||||||
|  | 					Ok(session) => { | ||||||
|  | 						assert!(Token(token) == self.connections.insert(ConnectionEntry::Session(session)).ok().unwrap()); | ||||||
|  | 					}, | ||||||
|  | 					Err(e) => { | ||||||
|  | 						debug!(target: "net", "Session construction error: {:?}", e); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			_ => panic!("Error updating slab with session") | ||||||
|  | 		} | ||||||
|  | 		/* | ||||||
| 		self.connections.replace_with(Token(token), |c| { | 		self.connections.replace_with(Token(token), |c| { | ||||||
| 			match c { | 			match c { | ||||||
| 				ConnectionEntry::Handshake(h) => Session::new(h, io.event_loop, info) | 				ConnectionEntry::Handshake(h) => Session::new(h, io.event_loop, info) | ||||||
| @ -480,6 +511,7 @@ impl<Message> Host<Message> where Message: Send { | |||||||
| 					_ => { panic!("No handshake to create a session from"); } | 					_ => { panic!("No handshake to create a session from"); } | ||||||
| 			} | 			} | ||||||
| 		}).expect("Error updating slab with session"); | 		}).expect("Error updating slab with session"); | ||||||
|  | 		*/ | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	fn connection_timeout<'s>(&'s mut self, token: StreamToken, io: &mut IoContext<'s, NetworkIoMessage<Message>>) { | 	fn connection_timeout<'s>(&'s mut self, token: StreamToken, io: &mut IoContext<'s, NetworkIoMessage<Message>>) { | ||||||
| @ -504,6 +536,7 @@ impl<Message> Host<Message> where Message: Send { | |||||||
| 			h.disconnected(&mut NetworkContext::new(io, p, Some(token), &mut self.connections, &mut self.timers), &token); | 			h.disconnected(&mut NetworkContext::new(io, p, Some(token), &mut self.connections, &mut self.timers), &token); | ||||||
| 		} | 		} | ||||||
| 		self.connections.remove(Token(token)); | 		self.connections.remove(Token(token)); | ||||||
|  | 		warn!(target: "slab", "removed {}", token); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -518,7 +551,7 @@ impl<Message> IoHandler<NetworkIoMessage<Message>> for Host<Message> where Messa | |||||||
| 
 | 
 | ||||||
| 		// Start listening for incoming connections
 | 		// Start listening for incoming connections
 | ||||||
| 		io.event_loop.register(&self.listener, Token(TCP_ACCEPT), EventSet::readable(), PollOpt::edge()).unwrap(); | 		io.event_loop.register(&self.listener, Token(TCP_ACCEPT), EventSet::readable(), PollOpt::edge()).unwrap(); | ||||||
| 		io.event_loop.timeout_ms(Token(IDLE), 1000).unwrap(); //TODO: check delay
 | 		io.event_loop.timeout_ms(Token(IDLE), MAINTENANCE_TIMEOUT).unwrap(); | ||||||
| 		// open the udp socket
 | 		// open the udp socket
 | ||||||
| 		io.event_loop.register(&self.udp_socket, Token(NODETABLE_RECEIVE), EventSet::readable(), PollOpt::edge()).unwrap(); | 		io.event_loop.register(&self.udp_socket, Token(NODETABLE_RECEIVE), EventSet::readable(), PollOpt::edge()).unwrap(); | ||||||
| 		io.event_loop.timeout_ms(Token(NODETABLE_MAINTAIN), 7200).unwrap(); | 		io.event_loop.timeout_ms(Token(NODETABLE_MAINTAIN), 7200).unwrap(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user