1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
use failure::Error;
extern crate libquassel;
extern crate tokio;
extern crate pretty_env_logger;
use libquassel::primitive::*;
use libquassel::message::*;
use libquassel::client::*;
use tokio::io::{AsyncRead, AsyncWrite};
use core::marker::Unpin;
use futures::SinkExt;
use std::future::Future;
use log::*;
#[tokio::main]
async fn main() -> Result<(), Error> {
pretty_env_logger::init();
// let mut client = client::Client::<tokio::net::TcpStream>::connect(
// "cocaine.farm",
// 4242,
// true,
// ).await.unwrap();
let username = std::env::args().nth(1).expect("no username given");
let password = std::env::args().nth(2).expect("no password given");
let funcs = Funcs {
init: InitFuncs {
client_init_ack,
client_init_reject,
client_login_ack,
client_login_reject,
session_init
},
message: MessageFuncs {
sync_message,
rpc_call,
init_request,
init_data,
heart_beat,
heart_beat_reply
}
};
let mut client = Client::<tokio_tls::TlsStream<tokio::net::TcpStream>>::connect_tls(
"cocaine.farm",
4242,
true,
User {
name: username,
password,
},
//funcs,
).await.unwrap();
client.run().await;
Ok(())
}
async fn client_init_ack<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: &mut Client<T, F>, item: VariantMap) {
use libquassel::{HandshakeSerialize, HandshakeDeserialize};
info!(target: "init", "Initialization successfull");
info!(target: "login", "Starting Login");
let login = ClientLogin {user: client.user.name.clone(), password: client.user.password.clone()};
client.stream.send(login.serialize().unwrap()).await.unwrap();
}
async fn client_init_reject<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: VariantMap) {
error!(target: "init", "Initialization failed: {:?}", item);
}
async fn client_login_ack<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: VariantMap) {
info!(target: "login", "Login successfull");
}
async fn client_login_reject<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: VariantMap) {
error!(target: "login", "Login failed: {:?}", item);
}
async fn session_init<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: &mut Client<T, F>, item: VariantMap) {
info!(target: "login", "Session Initialization finished. Switching to Connected state");
client.state = ClientState::Connected;
}
async fn sync_message<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: SyncMessage) { unimplemented!() }
async fn rpc_call<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: RpcCall) { unimplemented!() }
async fn init_request<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: InitRequest) { unimplemented!() }
async fn init_data<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: InitData) { unimplemented!() }
async fn heart_beat<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: HeartBeat) { unimplemented!() }
async fn heart_beat_reply<T: AsyncRead + AsyncWrite + Unpin, F: Future>(client: Client<T, F>, item: HeartBeatReply) { unimplemented!() }
|