jabber: wait to have connected
This commit is contained in:
parent
4e1570b2fd
commit
54efe3f631
|
@ -21,7 +21,7 @@ impl Handle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(jid: String, password: String, muc_jid: String) -> Handle {
|
pub async fn run(jid: String, password: String, muc_jid: String) -> Handle {
|
||||||
let muc_jid: FullJid = match FullJid::from_str(&muc_jid) {
|
let muc_jid: FullJid = match FullJid::from_str(&muc_jid) {
|
||||||
Ok(jid) => jid,
|
Ok(jid) => jid,
|
||||||
Err(err) => panic!("MUC Jid invalid: {:?}", err),
|
Err(err) => panic!("MUC Jid invalid: {:?}", err),
|
||||||
|
@ -32,20 +32,26 @@ pub fn run(jid: String, password: String, muc_jid: String) -> Handle {
|
||||||
tx: tx.clone(),
|
tx: tx.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let client = AsyncClient::new(&jid, &password).unwrap();
|
let mut client = AsyncClient::new(&jid, &password).unwrap();
|
||||||
let (mut sink, mut stream) = client.split();
|
loop {
|
||||||
|
match client.next().await {
|
||||||
|
Some(Event::Online { .. }) => {
|
||||||
|
println!("XMPP client now online at {}", jid);
|
||||||
|
let packet = Packet::Stanza(make_join_presence(muc_jid.clone()));
|
||||||
|
client.send(packet).await
|
||||||
|
.unwrap();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Some(_) => {}
|
||||||
|
None => panic!("XMPP cannot connect"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let (mut sink, mut stream) = client.split();
|
||||||
tokio::task::spawn_local(async move {
|
tokio::task::spawn_local(async move {
|
||||||
while let Some(event) = stream.next().await {
|
while let Some(event) = stream.next().await {
|
||||||
match event {
|
match event {
|
||||||
Event::Online { .. } => {
|
|
||||||
println!("XMPP client now online at {}", jid);
|
|
||||||
let packet = Packet::Stanza(make_join_presence(muc_jid.clone()));
|
|
||||||
tx.send(packet).await
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
Event::Stanza(el) => {
|
Event::Stanza(el) => {
|
||||||
println!("<< {:?}", el);
|
|
||||||
if el.is("presence", "jabber:client") {
|
if el.is("presence", "jabber:client") {
|
||||||
match Presence::try_from(el) {
|
match Presence::try_from(el) {
|
||||||
Ok(presence) => {
|
Ok(presence) => {
|
||||||
|
@ -61,7 +67,6 @@ pub fn run(jid: String, password: String, muc_jid: String) -> Handle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ev => println!("<< {:?}", ev),
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||||
let jid = args[1].to_owned();
|
let jid = args[1].to_owned();
|
||||||
let password = args[2].to_owned();
|
let password = args[2].to_owned();
|
||||||
let muc = args[3].to_owned();
|
let muc = args[3].to_owned();
|
||||||
|
let jabber = jabber::run(jid, password, muc).await;
|
||||||
|
|
||||||
let aircrafts = aircrafts::Aircrafts::load("aircraftDatabase.csv");
|
let aircrafts = aircrafts::Aircrafts::load("aircraftDatabase.csv");
|
||||||
let locations = location::Locations::load("locations.json");
|
let locations = location::Locations::load("locations.json");
|
||||||
let mut events = adsb::run("https://adsb.hq.c3d2.de/data.json", locations);
|
let mut events = adsb::run("https://adsb.hq.c3d2.de/data.json", locations);
|
||||||
|
|
||||||
let jabber = jabber::run(jid, password, muc);
|
|
||||||
|
|
||||||
println!("wait for events...");
|
|
||||||
while let Some(event) = events.recv().await {
|
while let Some(event) = events.recv().await {
|
||||||
println!("event: {:?}", event);
|
println!("event: {:?}", event);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue