| 
									
										
										
										
											2018-03-30 13:11:29 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | 
					
						
							|  |  |  |  * Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as | 
					
						
							|  |  |  |  * published by the Free Software Foundation, either version 3 of the | 
					
						
							|  |  |  |  * License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "neocomm/node.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | using namespace neocomm; | 
					
						
							| 
									
										
										
										
											2018-04-01 16:29:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | node::node(unsigned short port) { | 
					
						
							|  |  |  | 	// TODO: see about preserving an identity
 | 
					
						
							|  |  |  | 	network.run(port, dht::crypto::generateIdentity(), true); | 
					
						
							| 
									
										
										
										
											2018-04-01 16:29:40 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | node::~node() { | 
					
						
							|  |  |  | 	network.join(); | 
					
						
							| 
									
										
										
										
											2018-04-01 16:29:40 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | void node::join_channel(const std::string &name) { | 
					
						
							|  |  |  | 	if(get_channel(name)) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	channels[name].key = dht::InfoHash::get(name); | 
					
						
							|  |  |  | 	channels[name].token = network.listen<std::string>( | 
					
						
							|  |  |  | 			channels[name].key, | 
					
						
							|  |  |  | 			[&](std::string &&msg) { | 
					
						
							|  |  |  | 				channels[name].messages.push_back(msg); | 
					
						
							|  |  |  | 				return true; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-04-01 16:29:40 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | void node::leave_channel(const std::string &name) { | 
					
						
							| 
									
										
										
										
											2018-09-01 19:54:46 +02:00
										 |  |  | 	if(not get_channel(name)) | 
					
						
							| 
									
										
										
										
											2018-09-01 19:40:04 +02:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	network.cancelListen(channels[name].key, | 
					
						
							|  |  |  | 			channels[name].token.get()); | 
					
						
							|  |  |  | 	channels.erase(name); | 
					
						
							| 
									
										
										
										
											2018-03-30 13:11:29 +02:00
										 |  |  | } |