kassaclient 0.1.0

LCU Client for the Kassadin Project
Documentation
use crate::{WebSocket, WebSocketBuilder};
use anyhow::Result;

use native_tls::{TlsConnector, TlsConnectorBuilder, TlsStream};
use websocket::header::{Authorization, Headers};
use websocket::sync::Client;
use websocket::websocket_base::stream::sync::TcpStream;
use websocket::{ClientBuilder, Message, OwnedMessage, WebSocketError, WebSocketResult};
use websocket::receiver::Receiver;
use websocket::websocket_base::ws::MessageIterator;

impl<'a> WebSocketBuilder<'a> {
    pub fn build(self) -> WebSocket {
        let address = self.lcu.socket_url();
        let base64_auth = self.lcu.base64_auth();
        let mut headers = Headers::new();
        headers.set(Authorization(format!("Basic {}", base64_auth)));
        let tls_connector = TlsConnector::builder()
            .danger_accept_invalid_hostnames(true)
            .danger_accept_invalid_certs(true)
            .build()
            .unwrap();

        let mut client = ClientBuilder::new(&address)
            .unwrap()
            .custom_headers(&headers)
            .connect_secure(Some(tls_connector))
            .unwrap();



        WebSocket {
            client,
            lcu: self.lcu.clone(),
        }
    }
}

impl WebSocket {
    pub fn start(&mut self) -> WebSocketResult<()> {
        self.client
            .send_message(&Message::text("[5, \"OnJsonApiEvent\"]"))
    }

    pub fn stop(&mut self) -> tokio::io::Result<()> {
        self.client.shutdown()
    }
}