mirror of
				https://github.com/bspeice/aeron-rs
				synced 2025-10-31 09:30:24 -04:00 
			
		
		
		
	Driver proxy add_publication
This commit is contained in:
		| @ -1,5 +1,6 @@ | |||||||
| //! High level API for issuing commands to the Media Driver | //! High level API for issuing commands to the Media Driver | ||||||
| use crate::command::flyweight::Flyweight; | use crate::command::flyweight::Flyweight; | ||||||
|  | use crate::command::publication_message::PublicationMessageDefn; | ||||||
| use crate::command::subscription_message::SubscriptionMessageDefn; | use crate::command::subscription_message::SubscriptionMessageDefn; | ||||||
| use crate::command::terminate_driver::TerminateDriverDefn; | use crate::command::terminate_driver::TerminateDriverDefn; | ||||||
| use crate::concurrent::ringbuffer::ManyToOneRingBuffer; | use crate::concurrent::ringbuffer::ManyToOneRingBuffer; | ||||||
| @ -43,6 +44,35 @@ where | |||||||
|         self.client_id |         self.client_id | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Request the media driver prepare to publish on a new channel and stream | ||||||
|  |     pub fn add_publication(&mut self, channel: &str, stream_id: i32) -> Result<i64> { | ||||||
|  |         let correlation_id = self.to_driver.next_correlation_id(); | ||||||
|  |         if channel.len() > (COMMAND_BUFFER_SIZE - size_of::<PublicationMessageDefn>()) { | ||||||
|  |             return Err(AeronError::InsufficientCapacity); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         let client_id = self.client_id; | ||||||
|  |         self.write_command_to_driver(|buffer: &mut [u8], length: &mut IndexT| { | ||||||
|  |             // UNWRAP: `PublicationMessageDefn` guaranteed to be smaller than `COMMAND_BUFFER_SIZE` | ||||||
|  |             let mut publication_message = | ||||||
|  |                 Flyweight::new::<PublicationMessageDefn>(buffer, 0).unwrap(); | ||||||
|  |  | ||||||
|  |             publication_message | ||||||
|  |                 .put_client_id(client_id) | ||||||
|  |                 .put_correlation_id(correlation_id) | ||||||
|  |                 .put_stream_id(stream_id); | ||||||
|  |  | ||||||
|  |             // UNWRAP: Bounds check performed prior to attempting the write | ||||||
|  |             publication_message.put_channel(channel).unwrap(); | ||||||
|  |  | ||||||
|  |             *length = publication_message.length(); | ||||||
|  |  | ||||||
|  |             ClientCommand::AddPublication | ||||||
|  |         })?; | ||||||
|  |  | ||||||
|  |         Ok(correlation_id) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Request the media driver subscribe to a new channel and stream. |     /// Request the media driver subscribe to a new channel and stream. | ||||||
|     pub fn add_subscription(&mut self, channel: &str, stream_id: i32) -> Result<i64> { |     pub fn add_subscription(&mut self, channel: &str, stream_id: i32) -> Result<i64> { | ||||||
|         let correlation_id = self.to_driver.next_correlation_id(); |         let correlation_id = self.to_driver.next_correlation_id(); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user