use std::default::Default;
use std::{thread, time};
use std::sync::{Arc, Mutex};
use rtps::common_types::*;
use rtps::*;
#[test]
fn test_ping_pong() {
let mut writer = StatelessWriter::new(WriterInitArgs {
guid: Guid::new(),
reader_locators: vec![],
unicast_locator_list: vec![],
..Default::default()
});
writer.start_listening().unwrap();
let writer_locator_list = vec![ (writer.unicast_locator_list()[0].clone(), Some(writer.guid().entity_id)) ];
let mut reader = StatelessReader::new(ReaderInitArgs {
guid: Guid::new(),
writer_locator_list: writer_locator_list,
..Default::default()
}).unwrap();
reader.start_listening().unwrap();
writer.reader_locators.push((reader.unicast_locator_list()[0].clone(), Some(reader.guid().entity_id)));
writer.new_change(ChangeKind::ALIVE,
InstanceHandle::new(),
ArcBuffer::from_vec(vec![1,2,3,4]));
let syncy_writer = Arc::new(Mutex::new(writer));
let writer_task = SpawnableTaskTrait::spawn(syncy_writer.clone());
let syncy_reader = Arc::new(Mutex::new(reader));
let reader_task = SpawnableTaskTrait::spawn(syncy_reader.clone());
thread::sleep(time::Duration::from_millis(11));
{
let reader = syncy_reader.lock().unwrap();
let cache = reader.reader_cache();
let changes_copy: Vec<ArcBuffer> = cache.iter().map(|c| c.data()).collect();
assert_eq!(changes_copy, vec![ArcBuffer::from_vec(vec![1,2,3,4])]);
}
{
let mut writer = syncy_writer.lock().unwrap();
writer.new_change(ChangeKind::ALIVE,
InstanceHandle::new(),
ArcBuffer::from_vec(vec![4,3,2,1]));
}
thread::sleep(time::Duration::from_millis(11));
{
let reader = syncy_reader.lock().unwrap();
let cache = reader.reader_cache();
let changes_copy: Vec<ArcBuffer> = cache.iter().map(|c| c.data()).collect();
assert_eq!(changes_copy, vec![
ArcBuffer::from_vec(vec![1,2,3,4]),
ArcBuffer::from_vec(vec![1,2,3,4]),
ArcBuffer::from_vec(vec![4,3,2,1])
]);
}
{
reader_task.stop();
writer_task.stop();
}
}