currently a not very useful pleroma bot. may become something else later
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
manabu/src/main.rs

90 lines
2.2 KiB

#[macro_use]
extern crate log;
#[macro_use]
extern crate failure;
#[macro_use]
extern crate smart_default;
#[macro_use]
extern crate serde;
use websocket::{OwnedMessage};
use std::thread;
mod bootstrap;
mod store;
mod ele;
use crate::bootstrap::handle_cli_args_and_load_config;
use crate::store::Store;
use crate::ele::{EleSession, EleStreamSocket};
use std::time::Duration;
#[derive(SmartDefault,Serialize,Deserialize,Debug)]
#[serde(default)]
pub struct Config {
/// Logging level to use (can be increased using -v flags)
#[default="info"]
pub logging: String,
/// Instance domain name, e.g. example.com
pub instance: String,
/// File to use for session storage
#[default="manabu_store.json"]
pub store: String,
}
fn main() {
let config : Config = handle_cli_args_and_load_config().expect("error init");
debug!("Loaded config: {:#?}", config);
let mut store = Store::from_file(&config.store);
store.set_autosave(true);
store.set_pretty_print(true);
let registered = ele::register(&mut store, &config);
let session = ele::open_session(&mut store, registered);
debug!("Listening to events");
let m_session = session.clone();
let handle = thread::spawn(move || handle_stream(m_session));
let _ = handle.join();
}
fn handle_stream(session : EleSession) -> ! {
loop {
debug!("Trying to open websocket");
match ele::open_stream_websocket(&session, "user") {
Ok(socket) => process_incoming_events(socket),
Err(e) => error!("Error opening socket: {}", e)
}
debug!("Delay before reconnecting...");
thread::sleep(Duration::from_secs(10));
}
}
fn process_incoming_events(mut socket : EleStreamSocket) {
'listen: for m in socket.incoming_messages() {
match m {
Ok(OwnedMessage::Text(text)) => {
debug!("Got msg: {}", text);
},
Ok(OwnedMessage::Close(_text)) => {
debug!("Close");
break 'listen;
},
Ok(any) => {
debug!("Unhandled msg: {:?}", any);
}
Err(e) => {
error!("Error reading from socket: {}", e);
break 'listen;
},
}
}
}